村井純 特別インタビュー:「KAME」プロジェクトを日本でやった意味

村井純 特別インタビュー:「KAME」プロジェクトを日本でやった意味

タグ:
慶應義塾大学環境情報学部
教授 村井純

インタビューア:IPv6Style編集長 中島由弘

IPv6のプロトコルスタックの開発の目的

村井純

 インターネットはそもそも1969年に始まった2つの出来事に起源があるといわれています。1つはUNIXが開発されたこと、もう1つはARPANETの実験が開始されたことです。しかし、驚くべきことに、この2つの技術は70年代には出会わなかったのです。

 80年代になって、ようやくUNIXとARPANETの2つをどうやったら関係付けられるかということを考えるようになりました。そこで大きな役割を担ったのが、1976年に論文として発表されたEthernetです。それまでのARPANETはパケット公衆網を使った長距離ネットワークで、メインフレームを遠くから使うためのものでした。しかし、80年代の初めにEthernetが登場してローカルエリアネットワークという考え方が誕生すると、長距離のネットワークに加えちょっと(当時はすごく!)速いローカルエリアネットワークで分散処理をするということが研究の主流になりました。

 その結果、オペレーティングシステムのアーキテクチャも考え直さなければならないという議論がなされ、当時、DEC社のVAXに乗っていたUNIXの4.1 BSDをもう一度ネットワークオペレーティングシステムとして再構築しようという動きが起こりました。

 1982年当時、私は慶應義塾大学にいて、S&T NETという独自のネットワークを作って実験していました。まだ、Ethernetが標準化されていなかったころです。カリフォルニア大学バークレー校(以下、バークレー)でも今度は4.2BSDとして同じようなことを実験していました。つまりオペレーティングシステム(OS)を専門とする研究者はいつもネットワークのことを考え始めたのです。

 このBSDプロジェクトは80年代の初めごろ、バークレーのCSRG(Computer Science Research Group)として行っていた研究プロジェクトです。私はプロトコルを入れ込むための議論を中心にCSRGの連中と仲良く共同研究をしていました。4.1 BSDはUNIXをVAXのバーチャルメモリー対応にしただけですが、4.2 BSDではネットワークを使うことを考えてプロセスのスケジューリングやメモリー管理を変えるという、OSとしては根本的な変更をしました。ネットワークに対応しなければならないので、CPUはユーザープロセスだけではなく、ネットワークインターフェイスから入ってきたプロトコルの処理も同時にしかも効率的にしなければならないためです。

 メモリー管理の変更はプロトコルの階層に起因します。今まではデータをドライバーからIPに渡す、IPからTCPに渡す、TCPからプログラムに渡すという処理はメモリー上でデータのコピーをしていました。しかし、メモリー間のコピーはすごく時間がかかるので、その方法はやめようという部分が私の提案でした。

 そこで、ハードウェアのメモリーマネージメントを使って、メモリーの中の同じところにネットワークのデータを置いたまま、ヘッダーの変更を論理的に行うようにしました。このようにメモリーの中でコピーが起こらないようにしないと、プロトコル処理は遅くなってしまうのです。これで速くプロトコルスタックが動くようになり、それまで困難と思われていたことを実現したことはエンジニアとしては誇りだと思っていました。

 TCP/IPのプロトコルのデザインを考えているメンバーがこのようなOSのアーキテクチャを変更したところにプロトコルを実装していきました。つまりTCP/IPのプロトコルスタックが4.2 BSDに入ったのです。

オープンソースであることがインターネットを普及させた

 こうして開発されたものは、オープンソースのソフトウェアとして配られました。ソフトウェア開発者がプロトコルの仕様書なんて読んでも、具体的に何を意味しているのか分からないけど、それを実装したソースコードを見ればすぐに分かります。パケットが届いて、アドレス見て、自分宛ではなかったら他の人に送ればいいだけです。仕組みは簡単だっていうこともすぐに分かります。そしてどんどん改善される。つまり、ソースコードを見ながらTCP/IPを勉強し、発展させていくわけです。

 インターネットが広がっていく過程ではいろいろな初歩的な事故や事件が起こりました。たとえば、ICMPのように仕様には書いてあっても実際には誰も正しく実装してないということが、それを期待しているtracerouteのような新しいアプリケーションが現れると露見して、そこら中のネットワークが動かなくなることがありました。つまり、さまざまな機器は開発者がBSDのソースコードを見て勉強して製品を開発しているので、大元のBSDにバグがあるとBSDで勉強して開発された他の製品にも影響し、世界中のいろいろなコンピューターが同じ理由で次々と落ちるのです。つまりBSDのオープンソースの影響力が絶大だという証明でした。

 サブネットという新しい概念を入れたときも、とにかくBSDを直して、それを世界のベンダーに手分けして見せ、それぞれの実装を直してもらったから新しい概念が広まりました。つまり、みんなが参照できるソースコードがなければプロトコルは広がらなかったということです。このように考えると、インターネットはBSDのソースコードがあったから広がったといえます。

IPv6の仕様決定前夜

 90年代になって、コンピューターは相互に接続されなければならないということがますます広く認識されるようになり、OSIという国際標準規格が登場してきました。政府調達ではアメリカでもOSIを採用しましたし、日本でもOSI採用について閣議決定が2度行われました。サン・マイクロシステムズはOSIを実装するために別工場まで作ったと聞いています。「国際規格」だと決まったら、なにしろそれに従わなければならないという力は古今東西あるわけです。そして、1991年にIABというインターネットを推進する組織がIPをOSIのIPであるCLNPに変えようということを決めました。

 しかし、その決定を聞いた世界中のエンジニアは怒りました。動くかどうか分からない、実績の無いプロトコルに変えるとはどういうことかと。これがその後の大革命につながるわけです。その革命は1992年の神戸で起こりました。神戸で第1回のインターネットソサエティの国際会議であるINET 92をWIDEプロジェクトがホストしていたときです。エンジニアが「反対だ」といって革命が起き、それはエンジニアの意志決定組織であるIABの改組にもつながったのです。それまでIABというのはInternet Activities Boardといって、インターネットの活動の中心的な役割をしていた人、つまりインターネットを作ったビント・サーフを始めとするいわば長老たちの会議でした。

 INET92の議論で、IABは全体の整合性のオーバービューはしなければいけないけれど、個々のプロトコルに何を使うかはIETFという組織で純粋にエンジニアリングの視点から考えて提案を出し、自信のある良い物、役に立つ物を採用しよう。その上で、インターネットの社会的な要求とアーキテクチャが矛盾しないことを考える組織は分離しようということになりました。結果として、プロトコルの決定はIETFで行うこととし、IABはInternet Architecture Boardという名前に変更されました。その上に、こうしたことが米国を中心に決まるのはよくないという議論があり、私がIABのメンバーに選ばれました。それですべては仕切り直しになり、OSIでいくという決定をとりやめたのです。

 確かに次世代にはIPアドレスは不足するだろうし、さらにモビリティ、セキュリティなどの新しい要求もある。それで、急いで、IPng(Internet Protocol Next Generation)と呼ばれていた次世代インターネットプロトコルを考えようということになりました。そこで、IPngとして、よいアイデアがあったら提案するようにとIABがIETFにいったわけです。もちろん、元もと提案されたOSIの案も含めてです。提案の中から結果として2つの案に絞られました。1つはIPのヘッダーを小さくしてアドレスだけを長くしたSIP(simple-IP)、もう1つがOSIのCLNPを用いた案でした。OSIの案はロスアラモス研究所にいたピーター・フォードという優秀なエンジニア達が作ったTUBAと呼ばれるもので、大変によくできているものでした。

 SIPは固定長アドレスでCLNPは可変長アドレスです。固定長アドレスと可変長アドレスは何が違うかというと、可変長アドレスにはアドレスの先頭に長さの情報がある点です。その情報を見ればアドレスを何ビットまで読めばいいのかということが分かるわけです。これによりアドレス長は必要に応じて大きくしていくこともできます。

 しかし、長さを調べた上でアドレスを取り出すのと、あらかじめ決まっている長さのビット長を取り出すのとではプログラムでいうと2〜3ステップ違うわけです。問題はこの2〜3ステップの工夫をしなければならないことが、世界中でいったい何人のプログラマーの差を生んでしまうかという判断となりました。

 固定長アドレスの処理は分かるけど、可変長アドレスの処理は分からないプログラマーは何人いるのだろうか。ひょっとすると、2〜3ステップの処理のために、インターネットのプログラムを書けるエンジニアを何人も失ってしまうのではないだろうかということです。これが固定長アドレスに決定した最後の決め手でした。これからみんなが作らなければならないソフトウェアなのに、ちょっとでも複雑になってしまったらいけないのではないかというのが大きな判断基準だったのです。

IPv6の参照コードを作れるか?

 もう1つ考えていたことは、IPv6が広がるときに、かつてのBSDにTCP/IPのプロトコルスタックを実装したバークレーの役割を誰が担うのかということです。バークレーのソースコードはみんなで力を合わせて書いたものだし、その結果をバークレーは広く配布してくれた。もちろん、そのソースコードは最高のクオリティです。つまりコミュニティの能力をBSDに凝縮したわけですね。

 IPv6でも同じことができないといけない。そこで、あたりを見渡してみたのですが、もうバークレーにはCSRGはない。アメリカではすでにインターネットバブルが始まっていて、リック・アダムスはUUNET社を、CSRGのメンバーはBSDI社を創業していました。ビル・ジョイはサン・マイクロシステムズ社にいました。自分の知っている頼りになる人はみんなビジネスを始めていました。あれ?大学にいるのは自分だけ?という感じでした。

 それで、これは自分が中心にやらなければならないと思い、WIDEプロジェクトのメンバーを集めて「BSDのIPv6プロトコルスタックの実装は自分たちがやるぞ!」という号令をかけたのです。まず、3つのグループを作り、お互いのコードを見ちゃいけない、話し合っちゃいけないというルールで、3つの全く違う実装を開発しました。本当につながるかどうかを試してみることが目的でした。そして、つながることが確認できたところで、そのソースコードを一旦すべて捨てたのです。

 次に、最後まで残ったメンバーが勤務する会社や組織に「彼らを2年間WIDEプロジェクトのために貸してください」とお願いして回りました。結局、8年間も続いてしまったのですが・・・。そして、エース級のエンジニアをオフィスに閉じ込めて、他のことをするのを一切禁止し、これまでの経験を生かし、新しい最強のIPv6プロトコルスタックを一から作り始めました。これがKAMEプロジェクトの原型です。KAMEの名称は、本当はいろいろ背景があるのですが、私の公式な言い方は、「たまたま開発をするオフィスがSFCのある刈込(かりごめ)という住所にあったため、その地名の「か」と「め」で「かめ」という」ということにしています。

 IPv6のプロトコルスタックは他の国々でも別の2つの実装を作っていたので、合計3つ存在しましたが、それらと技術的な競争をした結果、他の実装は「KAMEプロジェクトにはかなわない」ということになり統合に成功しました。

 その後、さまざまな企業からKAMEプロジェクトが開発したプロトコルスタックを使わせて欲しいといわれましたが、目的を達成したというイメージをはっきりと持ちはじめたのはアップルからMac OS Xに使いたいと連絡がきたときです。また、中国のすべての大学ではBSDを使っていて、みんなKAMEプロジェクトが開発したプロトコルスタックを使っています。このようにして、かつてバークレーのCSRGのTCP/IPのコードが世界中にインターネットを広げたのと同じ役割を担えたと思います。

KAMEプロジェクトの技術的役割

 プロジェクトの一番大きな役割としてはIPv6が普及するとき、エンジニアがソースコードを見ながらプロトコルの理解を深められることが当初の目標だったわけです。その参照実装が欲しかったのです。KAMEプロジェクトのメンバーは自分たちでプロトコルスタックを開発してみることで、いままでは机上の空論だったプロトコルを実装で検証し、その結果を標準化の作業にフィードバックするということをやってきました。

 このようにして標準化を進めつつ、参照実装ができましたので、IPv6が普及することの技術的な心配はまったくなくなったといえます。あとはマーケット的な心配、たとえばセキュリティビジネスとか、あるいはトランジッションをどうするか、IPv4とIPv6が両方あるときにどのようにコストを抑えながら、両立させてIPv6に移るかということですね。こうした部分は移行作業という領域で、プロトコル開発という段階ではなくなります。したがって、ここでKAMEプロジェクトの役割と成果をはっきりさせて結論付けておくということは重要です。

 本来の世界最高の参照コードが世界中で誰にも入手可能になって、世界中の人がIPv6を勉強したり、技術を採り入れたり、ビジネスにしたりするときに障害をなくすという目的に関して、KAMEプロジェクトは立派に目的を達成しました。

KAMEプロジェクトの成果

 KAMEプロジェクトのメンバーとして各企業から優秀なエンジニアを借りていたわけですからその期限もあります。もちろんこのプロジェクトを続けたい人はぜひ続けていただきたいですし、WIDEプロジェクトとしても受け入れます。ここで、優秀なエンジニアをこのプロジェクトに専念させてくれた各企業や組織には本当に感謝の意を表したいと思います。このプロジェクトを支えてくれていた多くの人に感謝するということは私からだけではなく、インターネットのコミュニティ全体がすべきだと思います。

 また、この開発に関わったエンジニアも大きな自信が得られたと思います。自分たちが作ったIPv6のプロトコルスタックがMacなどを含め世界中で動いているのは自分たちの成果だと胸を張っていえると思います。彼らには一生このことを誇りに生きていって欲しいと思います。

 UNIXでプロトコルが動くのも、インターネットが世界でつながるのも、私自身先頭に立ってやってきたので「インターネットはアメリカのもので、村井さんが輸入してきたのですよね」といわれることには少々違和感があります。同じような違和感をKAMEプロジェクトのメンバーをはじめとする次の世代のエンジニアには味合わせたくなかった。

 しかし、ここまでの成果を出したので、今度は「IPv6はアメリカが作ったものですね」といわれることは一切ないと思います。これは世界中のエンジニアが分かってくれていることです。私にはこれが一番大切なことだったのです。

この記事のトラックバックURL

http://www.ipv6style.jp/trackback/166
Ads by Google

IPv6ブログ