Google Protocol Buffers - Open Sourced
google-opensource.blogspot.com
google-opensource.blogspot.com
When I first saw Gmail without folders, I was like wtf!idiots. Then I used it a bit and I was like wtf!sweet.
Same thing with Google Maps. I heard about them using Javascript and I was like wtf!idiots. And then I finally got to see it and I was like wtf!whoa.
I talked with some of the guys who did Thrift, and while they didn't steal code, the concept and config files are close to identical.
File format wise, it's hardly a rocket science too. When developers re-implement something, it's only natural to recycle an established implementation element. Changing it just for the sake of being different from another vendor is frankly quite dumb.
So I'd be careful with bold "rip-off" statements. In the end "Everything new is a well-forgotten old".
Also, I must plead ignorance. I've never worked with ASN.1 or these other formats. From my cursory examination, ASN.1 seems to be far more complex.
Don't get me wrong, I admire Facebook for making Thrift public, and it was a great thing for the internet. It was probably foolish of me to focus on the lineage of the thing.
There's an article in the 1997 Game Developer's Conference Proceedings on a similar technique that Naughty Dog used in their Crash Bandicoot tool-chain.
Given a binary file format, it's nice to be able to specify a reader or writer code-generator with a declarative syntax that looks just like the file format spec.
For that matter, how does it compare to JSON?
I'm not really making a point about how fast Protocol Buffers are. I'm making a point about how the article was written.
I think XDR describes fixed-format structures. I don't know anything about DCE.
As described above, Thrift is a clone of Protocol Buffers.
Thrift and PB are a lot like XDR or god forbid, CORBA, but with a few twists. They define message templates for how to parse and emit relatively simple binary structures, which are then compiled into RPC clients and servers. PBs are cross-platform, at least by Google standards: they work with both C++ and Java very well. So you get the speed and convenience of making RPC calls with binary data structures in a mixed C++/Java environment.
But the best thing about PBs is that the message structure can evolve. If a message suddenly has a new field the receiver can't use, the receiver doesn't panic or read in garbage, unlike many other binary formats. So you can upgrade clients and servers in a gradual manner, without any downtime. This is what makes PBs especially suited to cloud computing.