{"id":83,"date":"2008-07-11T22:19:00","date_gmt":"2008-07-12T02:19:00","guid":{"rendered":"http:\/\/steve.vinoski.net\/blog\/?p=83"},"modified":"2008-07-13T16:49:11","modified_gmt":"2008-07-13T20:49:11","slug":"protocol-buffers-no-big-deal","status":"publish","type":"post","link":"https:\/\/steve.vinoski.net\/blog\/2008\/07\/11\/protocol-buffers-no-big-deal\/","title":{"rendered":"Protocol Buffers: No Big Deal"},"content":{"rendered":"<p>I&#8217;ve gotten a few emails asking me to blog my opinion of Google&#8217;s <a href=\"http:\/\/code.google.com\/p\/protobuf\/\">Protocol Buffers<\/a>. Well, I guess I pretty much share <a href=\"http:\/\/www.innoq.com\/blog\/st\/2008\/07\/google_can_have_stupid_ideas_t.html\">Stefan&#8217;s opinion<\/a>. I certainly don&#8217;t see this stuff providing anything tremendously innovative, so as with <a href=\"\/blog\/2008\/05\/22\/just-what-we-need-another-rpc-package\/\">Cisco Etch<\/a>, it seems to me to be just another case of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Not_Invented_Here\">NIH<\/a>.<\/p>\n<p>Ted Neward already wrote a <a href=\"http:\/\/blogs.tedneward.com\/2008\/07\/11\/So+You+Say+You+Want+To+Kill+XML.aspx\">pretty thorough analysis<\/a> &mdash; it&#8217;s almost 0.85 <a href=\"http:\/\/steve-yegge.blogspot.com\/\">Yegge<\/a>s in length! &mdash; so I&#8217;ll just refer you to him. There are at least two important points he made that bear repeating, though:<\/p>\n<blockquote><p><em>Which, by the way, brings up another problem, the same one that plagues CORBA, COM\/DCOM, WSDL-based services, and anything that relies on a shared definition file that is used for code-generation purposes, what I often call The Myth of the One True Schema.<\/em><\/p><\/blockquote>\n<p>Indeed. Usually when one points this out, those who disagree with you come back with, &#8220;Oh, that doesn&#8217;t matter &mdash; you can just send whatever data you want as a string or as an array of bytes!&#8221; Having been forced to do just that numerous times back in <a href=\"\/blog\/acpwc\/\">my CORBA days<\/a>, I know that&#8217;s not a good answer. You have a bunch of distributed infrastructure trying to enforce your One True Schema Type System, yet you go the extra mile to tunnel other types that don&#8217;t fit that schema through it all, and the extra layers can end up being especially complicated and slow.<\/p>\n<p>The second point I&#8217;ll quote from Ted says it all:<\/p>\n<blockquote><p><em>Don&#8217;t lose sight of the technical advantages or disadvantages of each of those solutions just because something has the Google name on it.<\/em><\/p><\/blockquote>\n<p>Most excellent advice.<\/p>\n<p>There&#8217;s one last thing I&#8217;ll quote. This one&#8217;s not from Ted, but directly from the <a href=\"http:\/\/code.google.com\/apis\/protocolbuffers\/docs\/proto.html\">Protocol Buffers documentation<\/a>:<\/p>\n<blockquote><p><em>For example, you might implement an <code>RpcChannel<\/code> which serializes the message and sends it to a server via HTTP.<\/em><\/p><\/blockquote>\n<p>Sigh.<\/p>\n<p><em>[Update: more opinions &mdash; and some questions &mdash; in my <a href=\"\/blog\/2008\/07\/13\/protocol-buffers-leaky-rpc\/\">next post<\/a>.]<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve gotten a few emails asking me to blog my opinion of Google&#8217;s Protocol Buffers. Well, I guess I pretty much share Stefan&#8217;s opinion. I certainly don&#8217;t see this stuff providing anything tremendously innovative, so as with Cisco Etch, it seems to me to be just another case of NIH. Ted Neward already wrote a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,43,100,7],"tags":[162,103,146,179],"class_list":["post-83","post","type-post","status-publish","format-standard","hentry","category-distributed-systems","category-http","category-rpc","category-services","tag-http","tag-protocol-buffers","tag-rest","tag-rpc"],"_links":{"self":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/83","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/comments?post=83"}],"version-history":[{"count":0,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/83\/revisions"}],"wp:attachment":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/media?parent=83"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/categories?post=83"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/tags?post=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}