inexperienced protobuf user here -- why do non-googlers generally use protobuf? is it for the wire format, or for the schema language, or for the codegen?
i have a feeling there is an unmet need for something without all the google-cruft but still gives you a nice schema language and convenient codegen. just a simple stripped-down service and types definition with some support for codegen plugins would cover most crud-like applications in the wild without requiring much fuss. even just supporting only JSON would be acceptable -- maybe an optional buyin for msgpack.
i'm thinking twirp, but abandoning protobuf and using a new, simpler schema format.
These days I am of the opinion that we don’t need a real IDL. Instead one should choose a “primary language” and define the schema in that language. All other language bindings are generated from that canonical language. Then for wire format you’d just pick something workable from pb json msgpack etc. This replaces all the Google codegen intermediate layer, and for the primary language it naturally becomes very ergonomic.
In my experience, during the phase where you scale up and move from interpreted to compiled code with microservices, someone inevitably benchmarks protobuf vs JSON, and protos come out ahead.
Also, using it as a schema doesn’t totally suck. There are others but proto is… fine.
I have lots of opinions, but don’t feel like spinning up to a full rant here :-)
If protobuf hasn’t been created by Google, nobody would use it.
It’s actually not well designed for small requests, and doesn’t even deal with versioning all that well. It’s more verbose than a C struct yet not self-describing either.
To me, it fails to excel at any one thing yet people blindly use it anyway.
If one really considers the details, Protobuf makes ASN.1 actually start to look good!
i have a feeling there is an unmet need for something without all the google-cruft but still gives you a nice schema language and convenient codegen. just a simple stripped-down service and types definition with some support for codegen plugins would cover most crud-like applications in the wild without requiring much fuss. even just supporting only JSON would be acceptable -- maybe an optional buyin for msgpack.
i'm thinking twirp, but abandoning protobuf and using a new, simpler schema format.