That's a good question.

You could argue that anything discrete enough to be testable should be public as a (somewhat) reusable component. (eg, the compilers).
This will improve as we refactor more of the code.