底(手・ハードウェア)から始めた旅を、最上流で閉じる
本シリーズは、いちばん下(手で彫った種・配線されたハードウェア)から旅を始め、Linux まで登ってきました。最後に、いちばん上── 系譜の最上流へ行きます。Unix が生まれる直前、そこには Multics という巨大な OS がありました。Unix は、ある意味でその反動として生まれた。今回は「Unix とは何への反動だったのか」を通して、この一族を貫く設計思想に触れ、シリーズを閉じます。それは、鶏と卵をさかのぼる旅でくり返し現れた“小さな種”の思想と、ひとつのものでした。
1964年、MIT・GE・ベル研が手を組み、時分割 OS Multics(Multiplexed Information and Computing Service)の開発を始めます。舞台は GE-645。目標は当時として息をのむものでした ── 数百人が同時に使え、計算を電気や水道のような公共サービスにする。しかも PL/I という高級言語で書かれた、OS 記述の先駆でもありました。革新の塊です。ただ ── 当時の技術には、野心的すぎた。
ベル研は、Multics のサイズと複雑さに次第に嫌気し、1960年代末に撤退します(第7回)。残された研究者たち ── Ken Thompson、Dennis Ritchie、Doug McIlroy、Joe Ossanna ── は、Multics で味わった時分割の良さは手放したくなかった。そこで彼らは決めます ── 同じ良さを、うんと小さく作り直そう。 遊休の PDP-7 の上で(第7回)。それが Unix でした。
Multics と Unix は、設計哲学が正反対でした。下の図で、二つを切り替えてください。
・各プログラムは、一つのことをうまくやる。
・新しい仕事には、古いプログラムを新機能で肥大させず、新しく作り直す。
・プログラムをパイプで繋ぎ、小道具の組み合わせで大きな仕事をする(ls | grep | wc)。── 「大きな完全システム」ではなく「小さな部品と、その組み合わせ」。
Unix は Multics の反面教師でしたが、同時に師でもありました。第1回の言葉でいえば ── コードは1行も継がず、思想を継いだ。階層ファイルシステム、シェルを(カーネルでなく)ただのユーザプログラムにする発想、そして何より「時分割で対話的に使う」体験そのもの。Multics の良い部分の思想と、大きすぎた部分への反省を、両方受け継いで Unix は生まれました。反動とは、否定であると同時に、深い学習でもあります。
Unix の「小さく始めて、組み合わせで積み上げる」は、じつはこの旅で何度も出会った思想です ── 中間コードの小さな核(第4回)、357バイトの種(番外②)、手で彫った数語(第9回)。大きな塔を、小さな土台から積み上げる。ブートストラップの原理は、Unix の設計思想そのものだった。鶏と卵を下までさかのぼって見えた“小さな種”は、Unix が最初から大切にしてきたものと、同じでした。下の図で、その赤い糸をたどってください。
(1) Multics は「失敗作」ではありません。セキュリティのリング保護、動的リンク、単一レベル記憶など多くの革新を残し、後世に大きな影響を与えました。1969年のベル研撤退後も開発は続き、実運用は2000年まで続いています。「大きすぎた」は当時の技術との相対的な話です。(2) 「Unix 哲学」の箇条書きは McIlroy らによる後年の整理で、理想化された面があります。実際の Unix/Linux も、歴史の中で相当に肥大しました。
(3) 「反動」は物語的な単純化で、Multics から Unix への連続的な影響(受け継ぎ)も同じくらい大きい。(4) 名前 UNICS の由来(第7回)には諸説あります。── これらの但し書きも含めて、歴史は一本の直線ではなく、影響と反発の織物です。
系譜の最上流に、巨大で野心的な Multics(1964, MIT・GE・ベル研, GE-645, PL/I, 「計算を公共サービスに」)があった。ベル研はそのサイズと複雑さに嫌気して撤退し、残った Thompson・Ritchie・McIlroy・Ossanna は「同じ良さを、うんと小さく」作り直した ── それが Unix。名前からして Multics への反動(UNICS)。哲学は「各プログラムは一つのことをうまくやり、パイプで繋ぐ」。ただし Multics のコードは継がず思想を継ぎ、良さと反省の両方を受け取った(第1回の再実装の木)。
そしてこの「小さく始めて、組み合わせで積み上げる」は、私たちが鶏と卵をさかのぼる旅で何度も出会ったものだった ── 中間コードの小さな核(第4回)、357バイトの種(番外②)、手で彫った数語(第9回)。ブートストラップの原理は、Unix の設計思想そのもの。底(手・ハードウェア)から始めた旅は、最上流(Multics への反動)で、同じ一つの真実に還ってきた ── 大きなものは、いつも小さな種から積み上がる。
鶏が先か、卵が先か。
── 最初の卵は、手で彫った。
そして小さな種は、世界になった。
「わかるUNIXの歴史」本編11話+番外6話、これにて完結。最後まで、ありがとうございました。
gcc と打つとき、あるいは PC の電源(ブート)を入れるとき ── そのボタンの向こうに、紙テープを運んだ人、スイッチを叩いた指、ゲートを配線した技術者、そして「小さく作ろう」と決めた研究者たちが、途切れず並んでいることを、思い出してください。
印刷 / PDF 化:⌘+P(Windows は Ctrl+P)。画面では図1のボタンで Multics / Unix の設計哲学を、図2のスライダーで「小ささ」の系譜をたどれます。「答えを見る」で解答が開きます。全17話、おつかれさまでした。