ニュージャージスタイルとMITスタイル

昨年末、TwitterPlan 9はニュージャージスタイルかMITスタイルかという話が出た。まぁ、レッテルを貼ることに意味はないし、結論もないのだが、この辺の話題をまとめておきたい。

初期UNIXやCの開発哲学・ソフトウェア開発アプローチはニュージャージスタイルと呼ばれることがある。一方、MITやスタンフォードでCommonLispやCLOSに関わっていた連中のアプローチをMITスタイルと呼ぶ。コードが複雑になっても「正しい」やり方を追求するMITスタイルに対して、ユーザに負担をかけても正しさよりも単純さを優先する、さらに言うとインタフェースよりも実装の単純さを優先するというのがニュージャージスタイルである。

この話のオリジナルはLISP界で有名なRichard P. GabrielがEuroPAL 1991で発表した論文「Lisp: Good News, Bad News, How to Win Big」であり、この論文の一節で「悪い方がよい(Worse is Better)」という設計哲学が紹介されている。優れた言語であるLISPはなぜCに負けたのか?古典的なソフトウェア工学的に悪いとされているアプローチの方が逆説的ではあるが生き残るソフトウェアができる、という議論が繰り広げられている。今日的にはバザールスタイルと言えるだろう*1。ニュージャージという名はベル研の所在地から由来しているのだろうけど、Gabrielのエッセイには(ニュージャージ出身のロックシンガー)Bruce Springsteenからインスパイアされたともある。さて、この論文の一節「The rise of "Worse is Better"*2は、"The Kid"ことJWZにより多くの人々に広められ、大きな反響を呼んだ。その顛末はこちらのエッセイに詳しい。

SunのJim Waldoはblog「Worse is worse」で「悪い方がよい」というスローガンは非常にキャッチーであるが、誤解が多い。結局は単純に良い・悪いの問題ではなく、何をメトリクスに評価するかの違いだと指摘する。Simplicity、Correctness、Consistency、Completenessというメトリクスの中で何を一番に優先するかの違いであり、CorrectnessとConsistencyを優先するMITスタイルに対してSimplicityを優先するニュージャージスタイルがあるのだと。

さて、Plan 9もニュージャージスタイルを貫いているのかというのが元々の疑問だったのだが、どうなのであろうか。ユーザランドは基本的にニュージャージスタイルを踏襲している気がする。ではカーネルはどうか、「すべての資源はファイル」という設計原理について考えてみたい。これはユーザがOSが管理する資源を一貫的に扱うための「正しい」インタフェースを提供しようとしているように見るが、根本的な問題意識としてカーネルの肥大化があったようにも思える*3Plan 9がファイルに抽象化してない資源として、プロセス生成、ネットワークアドレス(ホスト名)、共有メモリといった例外がある。例えば、プロセスを生成するときには、

% cp /bin/sh /proc/clone/mem

とかやるのではなく、UNIXと同様にfork & execを用いる。これらの資源はファイルベースの抽象化とは相性がよくなく、実装もきっと必要以上に複雑になってしまう。

そのようなバランスの上で設計が行われていると言うことで、原点に立ち返って論文「Plan 9 from Bell Labs」を通読してみようかなと思った年始であった。

*1:当然、ESRの伽藍とバザールでも参考文献に挙がっている。

*2:翻訳はデザインの「悪い方がよい」原則

*3:この辺の話はカーネルVM探検隊の資料「今日から始めるPlan 9 from Bell Labs」を参照してもらいたい。