履歴
Protobufがなぜ作成され、時間とともにそれを変えた決定事項を理解することで、ツールの機能をより良く利用するのに役立ちます。
なぜProtocol Buffersをリリースしたのですか?
私たちがProtocol Buffersをリリースしたのにはいくつかの理由があります。
Protocol BuffersはGoogle内部の多くのプロジェクトで使用されています。Protocol Buffersを使用する他のプロジェクトもオープンソースとしてリリースしたかったため、そのためにはまずProtocol Buffersをリリースする必要がありました。実際、この技術の一部はすでにオープンになっていました。Google AppEngineのコードを掘り下げてみると、その一部を見つけることができるかもしれません。
私たちはXMLだけでなくProtocol Buffersも受け入れる公開APIを提供したかったのです。それは、より効率的であるという理由と、どちらにせよ私たちの方でそのXMLをProtocol Buffersに変換していたからです。
私たちはGoogle外部の人々もProtocol Buffersが役立つと感じるだろうと考えました。Protocol Buffersを私たちが満足できる形でリリースするのは、楽しいサイドプロジェクトでした。
なぜ最初のリリースバージョンが2なのですか?バージョン1はどうなったのですか?
Protocol Buffersの初期バージョン(「Proto1」)は2001年初頭に開発が始まり、長年にわたって進化し、誰かが必要とし、それを作成する作業を厭わないときに新しい機能が追加されていきました。そのようにして作られたものなら何でもそうであるように、それは少々ごちゃごちゃしていました。私たちは、そのままのコードをリリースすることは現実的ではないという結論に達しました。
バージョン2(「Proto2」)は完全な書き直しでしたが、Proto1の設計のほとんどを維持し、実装のアイデアの多くを利用しました。いくつかの機能が追加され、いくつかは削除されました。しかし最も重要なことは、コードがクリーンアップされ、まだオープンソース化されていないGoogleのライブラリに依存しなくなったことです。
なぜ「Protocol Buffers」という名前なのですか?
この名前は、フォーマットの初期、私たちがクラスを生成するためのProtocol Bufferコンパイラを持つ前に由来します。当時、個々のメソッドのバッファとして実際に機能するProtocolBuffer
というクラスがありました。ユーザーはAddValue(tag, value)
のようなメソッドを呼び出して、このバッファにタグ/値ペアを個別に追加していました。生のバイトはバッファに格納され、メッセージが構築された後に書き出すことができました。
それ以来、名前の「buffers」の部分はその意味を失いましたが、今でも私たちが使用している名前です。今日では、人々は通常、抽象的な意味でのメッセージを指すために「プロトコルメッセージ」、シリアライズされたメッセージのコピーを指すために「プロトコルバッファ」、パースされたメッセージを表すメモリ内のオブジェクトを指すために「プロトコルメッセージオブジェクト」という用語を使用します。
GoogleはProtocol Buffersに関する特許を持っていますか?
現在、GoogleはProtocol Buffersに関する特許を取得しておらず、Protocol Buffersと特許に関して人々が持つ可能性のあるいかなる懸念にも喜んで対応します。
Protocol BuffersはASN.1、COM、CORBA、Thriftとどう違うのですか?
これらのシステムはすべて長所と短所があると考えています。Googleは内部でProtocol Buffersに依存しており、それらは私たちの成功に不可欠な要素ですが、だからといってすべての問題に対する理想的な解決策であるわけではありません。ご自身のプロジェクトの文脈で、それぞれの代替案を評価する必要があります。
ただし、これらの技術のいくつかは、交換フォーマットとRPC(リモートプロシージャコール)プロトコルの両方を定義していることは注目に値します。Protocol Buffersは単なる交換フォーマットです。RPCに簡単に使用でき、実際、RPCサービスを定義するための限定的なサポートはありますが、特定のRPC実装やプロトコルに縛られているわけではありません。