It&#x27;s really interesting to me that the top two comments on this story both wish Protocol Buffers were different, but seem to be asking for opposite things.<p>Your comment wishes that there was a pure-Python implementation that doesn&#x27;t do metaprogramming.  That would imply doing code generation, but having the generated code be more &quot;concrete&quot;, so-to-speak (containing all of the actual implementation).<p>However, a different comment (<a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=10762101" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=10762101</a>) admires the thriftpy project which doesn&#x27;t have a codegen step at all.  This is in some sense the opposite of what you want: <i>everything</i> becomes metaprogramming.<p>I work on Protocol Buffers at Google, and I frequently observe these kinds of opposing feelings about how protobufs ought to work.  One thing I&#x27;ve learned is how incredibly difficult it is to please everybody.  Another good example of this is whether to be pure-Python: some people (like you) want that. But it&#x27;s nearly impossible to make it very fast, and lots of users are sensitive to speed (you can find various comments and blog articles complaining about the speed of Python protobuf).