Xの起源に分散OS

UNIXGUIがいまいちな元凶にX Window Systemがあるけど、twitterで昔話に花が咲いて、hutaiさんにいろいろ教えてもらったので忘れないうちにまとめておく。

今時のLinuxなどのXサーバはX.Orgになっていると思うが、それ以前のXFree86を含め、これらはX11、つまりX Window System version 11のシステムである。version 11というからにversion 1から歴史は始まった訳で、それが1984年頃の話。プロジェクトの中心人物はMITでアテナプロジェクトを推進していた*1アテナプロジェクトのJim GettysとMIT CSAILのBob Scheiflerだった。Xはアテナプロジェクトの一部として、ハードウェア/ベンダ独立なグラフィックスシステムを実現するために開発がスタートした。プロジェクトでは最初分散OS Vで開発されたW Window SystemをUNIXに移植した。WはXと同様にクライアントサーバ型のウィンドウシステムで、同期型のネットワークプロトコルを採用していた。

Vは、80年代ごろ、Stanford大学DSGのDavid Cheriton教授らによって研究されていた分散システムで、Ethernetで接続された疎結合マルチプロセッサシステムだった。その分散カーネルMachやSpriteなどの分散OSの先駆けと言える。そのキーとなるメカニズムはマルチスレッド*2と同期型RPCである。Vではリモートカーネルやリモートプロセスと通信するために、VMTP (RFC 1045)というトランスポートプロトコルを使っていた。

Bob ScheiflerはUNIXに移植されたWを基に、同期型プロトコルを非同期型プロトコルに変更することで、Xを開発した。当時の開発環境はVAX750とVAX Station 100だったらしい。Xが一般に公開されたのはX10R3からで、当時の標準ウィンドウマネージャはuwm (Ultrix Window Manager)だった。twmならまだしも、さすがにuwmを使っている人はいないと思うが、ソースコードがあったので、Mac OS Xコンパイルしてみた。さすがに少々手を入れないとコンパイルは通らなかったが、なんとか動かすことができた。メニューもスクロールバーもなく、ただ枠があるだけである。Mac OS X上だとどうもマウスイベントの扱いがうまくいかなかったのだが、Ubuntuだと正常に動作した*3

(追記:2010-01-02)X10R3以前の話はあまり探しても見つからなかった。次の引用は「MITアテナプロジェクトのすべて」P.127より。

1985年9月、Xウィンドウシステムバージョン9から実稼働として使用が開始され、バージョン10は翌年導入された。バージョン10は翌年導入された。バージョン10はアテナに非常に満足な結果をもたらし、このまま数年は使っていけると考えられていた。が、この間にもXの開発は進められていて、1987年初頭にはバージョン11が登場した。バージョン11とバージョン10ではプロトコルレベルで互換性がなく、したがってXのアプリケーションはすべて書き換えを余儀なくされた。バージョン11は1987年9月からアテナで本採用されたが、互換性維持のためにバージョン10も残されていた。9月の新学年度初日にバージョン11の稼働が開始されたが、バグが続々と現れてしまった。しかし手に負えないほどではなく、テストを実環境ですることになってしまったが、そう悪いことではなかった。

また、Bob ScheiflerはXlibのLISP版とも言えるCLXを開発していたが、こちらは流行らなかったようだ。

ちなみにV、W、Xときたらは次はYで、確かにY Window Systemを名乗るプロジェクトはあったけど、メジャーにならずに消えた。いつの日か究極のウィンドウシステムZが登場することはあるのだろうか?

余談だが、IPマルチキャストもV由来の技術だったりする。

MITアテナプロジェクトのすべて―大規模分散システムに挑んだ先駆者たちの記録

MITアテナプロジェクトのすべて―大規模分散システムに挑んだ先駆者たちの記録

*1:hutaiさんのコメント参照。

*2:Vの論文ではスレッドをプロセス、プロセスをチームと呼んでいる。

*3:後で調べてみたNetBSDにはパッケージがあるのね。さすが。「よしだともこのルート訪問記」によるとX11R5でuwmはcoreからcontribに降格され、デフォルトのウィンドウマネージャはtwmに変わったようだ。uwmはuseful window managerの略ともある。