« 『イノベーションのジレンマ』は他人に伝えることが難しく、実行はもっと難しいという個人的な思い出 | Main | 日本でAmazon Kindleが「まもなく発売」 »

「UNIXをC++で分散OSに書き直せ」、幻に消えたBill Joyの野望とは

UNIXの歴史にはある大きな転換点があり、そこには「もう一つの未来」の可能性が開けていました。この転換期に起こった出来事は「UNIX戦争」として知られていますが、その背景に「UNIXをC++で分散OSに書き直す」という野心的な計画があったことは、今ではほとんど語られることはありません。

私は、この一連の出来事の時期に、『日経エレクトロニクス』の記者としてUNIXの動向を追っていました。当時の出来事の概要を、取材者の視点から書き記しておきたいと思います。多くの読者にとって初耳の情報も含まれていると思います。

一連の出来事の発端は1987年に発表された、Sun、AT&T、Microsoftによる統合UNIXの発表です。この発表の前夜がどういう時代だったか、という話がまず必要でしょう。

統合前夜

1980年代後半は、コンピュータの歴史でも重要な時期でした。この時期、32ビット・マイクロプロセッサ(Intel 80386)を搭載したパソコンはすでに存在していました。1986年発表のCompaq DeskPro 386が最初の386搭載PCとされています。

ところが、このプロセッサの能力をフルに引き出すOS(当時は「32ビットOS」と呼ばれていました)がまだ登場していなかったのです。Windows NTもLinuxもまだありません。80386を積んだパソコンは、単に高速なMS-DOSマシンとして使われていたのです。

IBMとMicrosoftは、パソコンOSの主流を目指して、1987年に登場したOS/2の32ビット化を共同で進めていました。Microsoft Windowsはバージョン2になっていて、386モードを使えるWindows/386というバージョンもありましたが、この時点ではぱっとしない存在でした。やがてIBMとMicrosoftは袂を分かつことになるのですが、この時期には両社はまだ共同戦線を張っていました。

そういう不安定な時期に、UNIX戦争は起こりました。

当時のUNIXは、商用化が始まり、エンジニアリング分野や金融分野で注目されて、一般の企業システムへの展開が進み始めていた頃です。主要なUNIXマシンのベンダーは、Sun、HP、IBM、DEC、といった顔ぶれでした。そして、UNIXの系統は、AT&Tが開発した商用UNIXである「System V」と、カリフォルニア大学バークレイ校が開発して学術コミュニティで普及していた「BSD」、それにMicrosoftがPC向けにUNIXを移植した「Xenix」の各系統が有力とされていました。

当時の商用UNIXの一番手と目されていたのは、Sun Microsystemsです。Sunは、UNIXの歴史上でも重要なバージョンだった4.2BSDの開発者であるBill Joyを創業者に迎えた企業で、BSDを商用化したSunOSにより人気を博していました。

この4.2BSDにはDARPA(米国防総省高等研究計画局)の支援があり、ARPAnet(つまりインターネットの祖先です)との親和性も重要視されていました。4.2BSDで新たに加わった機能とは、ページング仮想記憶、TCP/IP、Socketインタフェースと、きわめて重要なものでした。4.2BSD開発の中心人物であったBill Joyは、UNIXの世界の高位の神々の一人として尊敬を受けていたのです。

統合UNIXの発表

1987年に、ある大胆なアライアンスが成立します。このアライアンスの中心メンバーはSun Microsystems、AT&T、それにMicrosoftです。商用UNIXの一番手であるSunが、当時のUNIXのライセンス元であるAT&Tと手を組んで、「System VとBSDに分かれていたバージョンを統合しよう」とするものでした。この統合UNIX(Unified UNIX)は「UNIX System V Release 4(SVR4)」と呼ばれていました(翌1988年に、SVR4は実際に発表されました)。

さらに、この統合UNIXとXenixをマージしてPCに載せるという構想も発表されていました。もし最新バージョンのUNIXが早い時期にPCに載って、大手資本による販売とサポートが付いたなら、32ビットPCのOSの勢力分布は変わっていたかもしれません。前述したように、当時はまだ32ビットOSの主流が確定しない不安定な時期だったのです。

業界の反発

当時のUNIXコミュニティにとって、このアライアンスの衝撃は大変なものでした。BSDの生みの親で「神様」として知られていたBill JoyがいたSunと、UNIXの開発元であり商用ライセンスの提供元でもあったAT&Tが手を組んだのです。「本家と元祖」が手を組んだようなものです。

BSDベースのSunOSは、SVR4ベースのSolarisに取って代わられました。これはBSDに慣れ親しんでいた学術コミュニティの人々にとっても大きな出来事でした。

さて、このように大きな事件だったわけですが、このアライアンスに対して反旗を翻した人たちがいました。

その時点の構図は、数あるUNIXベンダーの中でSunが1社だけ「抜け駆け」して「UNIXの盟主」の座を狙った格好です。他の商用UNIXベンダーにとっては黙って見ている訳にはいかなかったのです。

この対抗グループの主要メンバーは、DEC、IBM、Apollo、HPです。この異色の面々が手を組んだことで、業界は騒然となりました。このグループは集会場所のあった通りの名前を取って「ハミルトン・グループ」と呼ばれました。この集団は、後に「OSF(Open Software Foundation)」を結成します。

OSFは、当時注目されていたMachオペレーティングシステムを中核に、「OSF/1」という新OSを作るという計画を掲げました。

Bill Joyの野望

さて当時のSunは、ある野望を持っていました。単にUNIXのバージョンを統合して終わりにする予定ではありませんでした。AT&TとBSDという2つのバージョンを統合した後に、全面的に書き直した「次世代」のUNIXを作ろうとしていたのです。

「UNIX戦争」についての資料はWikipediaなどでも見かけますが、この次世代のUNIXに関する記述はほとんどありません。そこで、私が知り得た範囲で概要を記しておきます。

  • UNIXをC++言語とオブジェクト指向で書き直す
  • ネットワーク・ワイドな仮想記憶をOSの基本機能として提供する
  • 分散環境でのプログラム間通信の手段として、共有メモリ・モデルを採用する

25年経った現時点で見ても、大胆な構想だと思います。

当時、分散OSに関する研究が学術コミュニティでは一大ブームになっていました。最も有名だったのがカーネギーメロン大学のRichard Rashid教授(当時)らのMachオペレーティングシステムです。Machは、4.3BSDのカーネル部分を書き直し、新カーネルと4.3BSDのOSサービスの両方を提供していた点で注目されていたのです。このほか、いくつもの分散OSのプロジェクトが進行していました。

そして、当時のSunのCTO(最高技術責任者)であったBill Joyも、当時の研究水準から見て最新の知見を取り入れた分散OSを作り、それを商用UNIXのメインストリームにしようとしていたのです。

このBill Joyらのプロジェクトは、「Menlo Park Project」と呼ばれていました。Bill Joyは、シリコンバレーの真ん中のメンロパークに開発拠点を置き、UNIXをC++に書き直すプロジェクトを率いていたのですね。

Bill Joyが来日したさい、あるパーティーの場で私はBill Joyをつかまえて次の質問をしました。「ネットワークワイドな共有メモリ」を通信手段に選んだのはなぜか。その実装はどうするのか、と。

その回答は、「共有メモリはプログラマにとって自然な手段だ」ということ。そして、キャッシュ・コヒーレンシ・プロトコルとしてその実現手段もよく調べられていること、というものでした。確かに、ネットワークワイドな仮想記憶がOSの基本機能であるなら、ネットワークワイドな共有メモリはごく自然に作れるはずです。

Bill Joy主導のこの新UNIXが登場していたら、一体何が起こったでしょうか。まず、分散コンピューティングが早い段階から(1990年代初頭から)普及した可能性があります。この新UNIXが早い時期にPCのOSとしてシェアを確保できていたら、その後のパソコンOSの勢力図が変わっていた可能性もあります。当時のMicrosoft Winodwsはまだ完成度が低く、OS/2も32ビット化を果たしておらず、パソコンOSの決定版はまだ存在していなかったからです。

つまり、Bill Joyの計画が実現していたら、ITの歴史の時計の針はもっと速く進んでいた可能性があります。

その後の物語

結果として、この次世代UNIXは日の目を見ませんでした。

一つの理由は、UNIX戦争で業界が分断してしまい、腰を据えた技術開発よりも業界内バトルの方にリソースが割かれたことがあるでしょう。また、「UNIXをC++で分散OSとして書き直す」こと自体の困難も大きかったに違いありません。

このプロジェクトを通じて、Bill Joyらは「C++で大規模開発をするのはダメだ」という感触を持ったのではないかと思います。そして1990年代になってから、Bill Joyの監督のもとでJames Goslingが設計したJava言語が登場した訳ですが、これは別の物語です。

一方、DECらが推進していた新OSのOSF/1は、数年後に推進していた各社が製品化します(注1)。OSFの活動の成果物は、X Window上のUIライブラリ「OSF/Motif」や、分散コンピューティングのフレームワーク「OSF DCE」として残っています。

一連の出来事の中で、Machオペレーティングシステムの名声は高まり、Machを開発したRichard Rashid教授は、1991年にMicrosoft Researchに移っています。Rashidは今もMicrosoftの研究トップです。

Microsoftを率いていたBill Gatesは、Machなど当時の研究用OSのテクノロジーには興味津々だったようです。Winodws NTの開発物語『闘うプログラマー』には、プロジェクトリーダーのDavid Cutlerに対して、Bill Gatesが「C++を使おう」とか「マイクロカーネルアーキテクチャを使おう」と提案して却下される場面が出てきます。

Machオペレーティングシステムに目を付けていた人物は、Bill Gatesだけではありませんでした。NeXT Computerを設立したばかりのSteve Jobsも、Machに強い関心を持っていました。Jobsは、Rashid教授の学生であった"Avie" Tevanianを雇い、Machオペレーティングシステムを中核としたNeXTstepを開発します。やがてNeXTはAppleに買収されましたが、Machの資産は今も生き続けています。MacOS XもiOSも、Machカーネルを採用しているのです(なお、誤解を防ぐ意味で付け加えると、NeXT/Appleが使っているMachはマイクロカーネル版ではありません)。

Free Software Foundation(FSF)のRichard StallmanもMachには注目していました。GNUベースの「自由なOS」のカーネルとして使おうと考えていたのです。しかしMachのマイクロカーネル版の登場が遅れ、さらにマイクロカーネル上にOSサービスを統合した「GNU Hurd」の開発は難航します。気がついてみれば、フィンランドの学生が開発したLinuxカーネルが広く使われるようになっていたのです。

ちなみに、Linuxの開発者であるLinus Torvaldsは、Andrew Tanenbaum教授との間で「マイクロカーネルか、モノリシックカーネルか」の議論を繰り広げています(Wikipedia)。Tanenbaum教授は、新たに開発されるOSであるLinuxが、当時のOS研究で主流の考え方になっていたマイクロカーネルを採用していないことに苦言を呈したのですが、Linusの方は現実的な観点から反論しています。

UNIX戦争の時代に企画された「次世代UNIX」は、Bill Joyの新UNIXは登場せず、OSF/1は登場したもののその位置づけはベンダー各社の独自UNIXと同じでした(注2)。「UNIXの世界が統一されて、分散OSとして生まれ変わり、PCの世界でも普及する」というシナリオは夢と消えたのです。

この後も、商用UNIXベンダーごとに少しずつ違いがあるバージョンのUNIXが使われ続けることになります。このUNIXの「分断」状況を憂慮する意見もあったのですが、各ベンダーはバージョン統合の努力にはもう懲りたのか、ひたすら自社マシンを売り込むことに注力しました。そして1990年代に登場したオープンソース・ソフトウエアのLinuxは、商用UNIXの市場を少しずつ侵食していくことになります。

Bill Joyの発言を見ると、彼はLinuxは「UNIXクローンにすぎない」として高く評価していなかったようです。しかし、Linus Torvaldsが米国に来たときBIll Joyが会いに来た話を、Linus自身が『それがぼくには楽しかったから 』に書き記しています。彼の感想は「Bill Joyはオープンソースが分かってないんじゃない?」というものでした。

UNIX戦争でSunと闘った会社のうち、Apolloは1989年にHPに買収されます。DECは1998年にCompaqに買収されます。Compaqは2002年にHPに買収されます。一方、Sunは、2010年にOracleに買収されます。

商用UNIX大手の系譜は、総合ITベンダーのIBMとHPとOracleに残っています。統合UNIX計画の名残は、SVR4というバージョンとして残っています。MachカーネルはMacBookやiPhoneの中で動き続けています。Windows NTカーネルもパソコンOSや、最近発表されたWindows Phone8の中核として使われています。

Bill Joyは、Java、Jini、JXTAのプロジェクトを率いたのち、2003年にSunを離れ、現在は名門ベンチャーキャピタルのKleiner Perkinsで、IT系ではなく"Green Technology"を担当するパートナーとなっています。

関連記事:

追記1:

(注1)OSF/1は当初「登場せず」と記述していましたが、実際には各社が製品化していたとの指摘を吉岡弘隆氏より受け、記述を改めました。(参考:Wikipedia) 。
(注2)注1と同様に記述を改め、文脈を補強しました。

追記2:

LinuxでもカーネルをC++で書き直そうとして中止した経緯があることを、鵜飼文敏氏より教えて頂きました。

|

« 『イノベーションのジレンマ』は他人に伝えることが難しく、実行はもっと難しいという個人的な思い出 | Main | 日本でAmazon Kindleが「まもなく発売」 »

Comments

これはSpringのことではないかと思うのですが、どうでしょう?
http://en.wikipedia.org/wiki/Spring_%28operating_system%29

Posted by: 藤枝和宏 | June 28, 2012 10:09 PM

ご指摘のSpringは、Sun Microsystemsの研究所が1990年代前半に研究していた分散OSです。この記事で記述したBill Joyのプロジェクトは商用UNIXの書き直しが目的で、1987年に対外的に存在が明らかになっています。時期が違い、目的(研究用と商用)が違うことから、私は異なるプロジェクトと認識していました。

リンク先のWikipediaの記述によれば、Bill Joyの次世代UNIXのプロジェクトが頓挫した後に、同じチームで開発した別のOSがSpringという流れのようですね。また、この記事で述べたようにBill Joyは「ネットワークワイドな共有メモリ」を重視していましたが、Springの論文はIPC(プロセス間通信)の記述の比重が多く、別のコンセプトに基づく研究ではないかと考えています。

Posted by: 星 暁雄 | July 01, 2012 10:08 AM

wikipediaの記述によると、(1) Springプロジェクトは1987年に、AT&Tとのコラボとして始まる (2)ただし、このコラボはちょっとミーティングしただけで解散した、とありますから、AT&Tとのコラボについては、実作業の着手に至ってないように見えます。というわけで、異なるプロジェクトではなく、同一のプロジェクトと言ってよいと思います。wikipediaの「this part of the project died」という書き方も、同一プロジェクトであるというニュアンスでしょう。

Springの仮想メモリシステムが、ネットワークワイドな分散メモリのサポートを考慮して設計されていることについては、wikipediaからリンクのある http://labs.oracle.com/techrep/1993/smli_tr-93-9.pdf のAbstractおよび6.2に記載があります。
分散共有メモリについては、この時期に既にDomain/OSが実用化していましたので、それほど大胆ではないと思います。SunOS 4の頃でも、NFSでファイルオブジェクトをmmapできましたが、本質的なコンセプトはそれと同一ですし(ただし、NFS経由でmmapした場合、一貫性の制御は非常に緩いんですが)。ここで一貫性制御を厳密に行うとオーバーヘッドが増大するので、分散コンピューティングの普及を助ける役にはあまり立たないように思います(仮想メモリシステムのレベルで一貫性制御した上に、さらに各アプリケーションが排他制御を行う必要がありますから、同様な制御を二重に行うことになり、無駄が多いですし。逆に排他制御の要らない不変なデータを共有するだけであれば、SunOS 4でも問題ありませんし)。オーバーヘッドが小さいという意味で、分散技術の基盤としては、IPCの方が、より現実的な選択でしょう。

Posted by: 曽田哲之 | July 06, 2012 01:49 PM

ご丁寧なコメントありがとうございます。非常に参考になりました。

「Springと同じプロジェクト」かどうか、という件に関しては、今回のエントリの立場から、次のように考えています。

Springの論文にはBill Joyの名前は入っていません。その意味で、私はBill Joyが考えていたプロジェクトとSpringは、チームのつながりはあったにせよ「別」と認識をしています。

ご指摘いただいたような議論がチームの間で出たことは想像に難くなく、「(専門家から見れば)別に新しくない」とか「大変すぎる」という理由でチームがまとまらずに頓挫した、という側面もあるのかもしれません。ただ、Bill Joyが「何を考えていたか」は、記録は残す価値があると私は考えています。

1987年〜1993年頃にかけてのOS戦争の候補は、OS/2、Windows、商用UNIX、NEXTSTEP・・といった面々でした。こういったOSの中で、 UNIXはかなり"惜しい"所でゲームから降りてしまった、私はそのように考えています。

Posted by: 星 暁雄 | July 06, 2012 06:56 PM

"The Spring Virtual Memory System"を読めばわかりますが、SpringのIPC&RPCであるdoorsはメッセージ通信に仮想メモリを使います。Springの仮想メモリは分散共有メモリです。論文にBill Joyの名前こそありませんが、これはBill Joyの目指したものそのものではないでしょうか。

Springは商業化には至りませんでした。しかし、doorsは高速なIPCとしてSolarisに移植されて生き残っています。Springの開発で得られた知見が、Javaやその周辺技術の開発に大きく影響したことはよく知られています。

Bill Joyが企図していたものがSpringだったとしても、日の目を見なかったことは確かです。ですから、この記事の論旨は変わらないですけどね。

Posted by: 藤枝和宏 | July 08, 2012 11:50 AM

コメント感謝です。研究用OSのSpringの設計が、商用OSのSolarisのDoorsにつながっている、というお話は特に興味深く拝見しました。

思ったのですが、Bill Joyが分散共有メモリを取り入れた新UNIXのコンセプトを語ったのが1987年、一方Springの論文が1993年頃で、実に6年が経過しています。途中、空白の時期や紆余曲折の時期もあったことが想像されます。開発チームの間でどういう事が起きていたのか、気になるところです。

Posted by: 星 暁雄 | July 09, 2012 02:02 PM

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference 「UNIXをC++で分散OSに書き直せ」、幻に消えたBill Joyの野望とは:

« 『イノベーションのジレンマ』は他人に伝えることが難しく、実行はもっと難しいという個人的な思い出 | Main | 日本でAmazon Kindleが「まもなく発売」 »