Quite a few types in the codebase are declared "private", however it turns out that this doesn't reflect usage as the abstraction is later broken, usually by using Marshall.
This inconsistency puts a huge barrier to developers willing to experiment with alternative serialization formats, and makes impossible to properly ask many basic questions about the system without indeed, having to mess with core APIs.