Multicsを振り返ってみたい

Coders at Workという業界の有名人に対するインタビュー集を読んでいるが、プログラミング寄りの切り口が面白い。さて、本書のインタビューイの1人としてKen Thompsonが登場する。ベル研でProject MACに関わる以前の話から、現在Googleで何をやっているかという話まで触れられている。もちろんPlan 9の話題も(Linuxへの評価に関連して)出てきて、Plan 9のドライバを書くときは、Linuxのドライバを参考にしたと答えている。

ベル研のProject MAC撤退に伴い、kenとdmrらはMulticsの開発をやめ、そのアンチテーゼとしてUNIXを作り始めたというのは、歴史としてよく語られる。が、MulticsUNIXの間の技術の連続性にもっと着目してもよいのではないだろうか。Multicsは技術的には非常に野心的な、怪物システムであったが*1UNIXを設計するにあたり、Multicsから何を取捨選択したのか。その換骨奪胎のプロセスに興味がある。

ここでCoders at Workから少し引用したい。

ーー MULTICSの機能で好きだけどUnixに入れることがなかったものというのはありますか?
トンプソン 実際にUnixに入れるくらい気に入っていたものは階層化ファイルシステムとシェル、つまりほかのプロセスに置き換え可能な独立したプロセスです。それ以前のシステムはみな、「エグゼクティブ」といった名前の、ある種の組み込みの処理言語を持っていました。それにプロセス単位の実行。シェルに何か打ち込むたびに、新しいプロセスが作られ、タイプされたことを実行し、終わると戻ってきます。だから実行しているものはいつも手の届く範囲にあります。

ーー ではそれがあなたの選び取ったすべてで取り落として後悔しているものはないということですか?
トンプソン ありません。

Linusは386の仮想記憶の仕組みを勉強しているうちにLinuxを作り上げたように、KenらはMulticsに触発されたファイルシステムPDP-7上で開発し、対話的なテスト環境を作ろうとして、結果的にOSになっていった。

自分の理解では、Multicsファイルシステムは仮想記憶システムやダイナミックリンクともっと密に連動していて*2UNIXのそれとはちょっと違う印象を持っている。そこも含めてなぜUNIXファイルシステムがあのような設計になったのか、Multicsファイルシステムってどんなの?っての調べてみたい。

Multics関連情報を調べるには、http://www.multicians.org/がまとまっているのでおすすめ。ちなみに、2007年にMulticsオープンソース化されているので、コードを参照できる。ただし、カーネルのコードを見つけられない。。。

ということで、少しMultics熱が高まってきたので、ちゃんと調べてみたいのだが、1人でやるときっと挫折するので、勉強会でも開催するか? そんな話題で人が集まるかという話はあるが。。。

(追記:2011-09-24)同じくCoders at WorkのPeter Deutschの言葉を引用する。UCBでSDS 940タイムシェアリングシステム(「fork/execモデルの起源」でも触れた)を開発で、ユーザプログラムとカーネル間のインタフェースをどう切るかという問題に直面したときのこと、Multicsの考えが参考になったとのこと。

MULTICSの流儀に基づいて、私たちははじめからカーネルと、今日シェルと呼んでいるものをはっきり区別していました。これはオペレーティングシステム開発のごく初期の話で、シェルを実質特権なしで構築できるということに気づいていませんでした。シェルはユーザモードプログラムでしたが、様々な特権を持っていました。カーネルはどの機能をシェルに与えなければならないかという問題がありました。シェルは何を直接実行できるべきで、何はカーネルコールで行うべきかということです。

Coders at Work プログラミングの技をめぐる探求

Coders at Work プログラミングの技をめぐる探求

*1:KenはMulticsセカンドシステム症候群に陥っていたと言う。ここでのファーストシステムはMIT CTSSタイムシェアリングシステム。

*2:Multicsの論文を読むと、ダイナミックリンクの仕掛けとか格好いいなと思う訳だけど、ばっさり切り捨てるのね。Plan 9にもその流れは継承されている訳だけど。