Anyway, it looks like users have to write code to populate Protobuf's generic container at run-time.
It sounds like you are confusing the three layers of Protobuf. These are:
- The IDL description language, which describes the semantics of the data.
- The wire layout, which describes what the actual bits are on the wire for a particular data structure.
- The tools and libraries that implement protobuf in a particular language.
Note that there can (and do) exist more than one implementation of bindings for a particular language, and part of implementing bindings is to decide how the user uses the library, and what code gets generated. We've developed bindings for protobuf to Erlang, PHP and Javascript, and they each make different decisions on how to expose the data structures to the native language.