『17,468本の真空管を積んだ部屋が、コンピュータの始まりだった』で見たENIACは、1つの部屋、1つの機械としての始まりでした。Unixの始まりは、それとは種類が違います。小さなソフトウェアが、いつの間にか土台になっていたという始まり方です。
Multicsからの撤退と、余ったPDP-7
1969年、AT&Tベル研究所は、MITやGE(General Electric)と組んで進めていたMulticsという大規模プロジェクトから撤退します。理想は高かったものの、実用的な速さで動くところまで仕上がらなかったためです。開発者本人の記録によれば、当時ベル研究所にいたケン・トンプソンは、そのMulticsの上で「Space Travel」という宇宙船を操縦するゲームを書いていました。プロジェクトが止まると、遊び場も一緒になくなります。
トンプソンは、社内であまり使われていなかったPDP-7という小さな計算機を見つけ、ディスプレイの調子が良かったこともあって、そこにゲームを移植することにしました。ディスプレイ表示を書くだけでは足りず、ファイルの読み書きやプログラムの実行といった基本部分から、自分たちで組む必要がありました。 この「ゲームを動かすための土台」が、後にUnixと呼ばれるものの最初の形です。デニス・リッチーも加わり、ファイルをデバイスとして扱う考え方などを持ち込みました。
当時使われていたのと同型のPDP-7(オスロ大学に1966年に納入された個体、復元前)。撮影:en:User:Toresbe、編集:Pittigrilli(CC SA 1.0、出典)
名前は、Multicsへの当てこすりだった
1970年になって、同僚のブライアン・カーニハンがこの新しいシステムに「Unix」という名前を提案します。「Multics」は「多重化された(Multiplexed)」システムという意味を含んだ名前でした。対して、しばらく1人のユーザーしか使えなかったこの小さなシステムに、「単一の(Uni-)」という、Multicsをからかう当てこすりとして付けられた名前がUnixでした。
Cで書き直したことが、他の機械でも動く道を開いた
初期のUnixは、アセンブリ言語という書き方で書かれていました。コンピュータの回路は本来、0と1の並びだけでできた命令(機械語)しか理解できません。アセンブリ言語は、その0と1の並びを、人間が多少は読み書きできる短い記号に、ほぼ1対1で置き換えただけの書き方です。人間には読み書きしづらい代わりに機械にはそのまま伝わりますが、書き方がPDP-7という特定の機械の回路に合わせて作られているため、他の機械に持っていくには一から書き直すしかありません。
1971年からデニス・リッチーが取り組んでいたのが、C言語です。アセンブリ言語とは逆に、人間が読み書きしやすく、特定の機械に縛られない書き方ができる言語で、こうした言語を高水準言語と呼びます。そして1973年、Unixの中核部分(カーネル。ハードウェアを直接操作して、OS全体を動かしている土台の部分)がCで書き直されます。人間が書いたプログラムの原文(ソースコード)を、機械が実行できる命令に変換する作業をコンパイルと言いますが、これを別のハードウェア向けにやり直すだけで、Unixを動かせるようになったわけです。リッチー本人が「Unixの成功の多くは、高水準言語で書かれていたことによる読みやすさ・改造しやすさ・移植しやすさに由来する」と振り返っている通り、この書き直しが、後の広がり方を決めています。
タダ同然で大学に配られた、皮肉な理由
Unixが急速に広まったのには、もう1つ事情があります。AT&Tは1956年に結んだ独占禁止法上の同意判決により、電話事業以外の分野で新しく商売を始めることを禁じられていました。Unixを自社製品として売り出す道が、そもそも塞がれていたわけです。
そこでベル研究所は、大学に対してごく安い金額でUnixのソースコードをライセンスします。中でもカリフォルニア大学バークレー校は、ソースコードに独自の改良を重ね、BSD(Berkeley Software Distribution)という派生版を生み出していきます。商売として囲い込めなかったことが、結果として世界中の大学にUnixを行き渡らせました。
いまのiPhone・Mac・Linux・Androidまで
ここから今日までの距離は、思ったより近いものです。
- macOSは、Appleの公式ドキュメントで「カーネルのBSD部分は、4.4BSDの一系統であるFreeBSDに由来する」と明記されています。つまりBSD→FreeBSD→Darwin→macOSと、ソースコードの系譜としてつながっています。
- iPhone(iOS)も同じ系譜です。 AppleがGitHub上で公開しているXNUカーネルは「Darwinオペレーティングシステムの一部で、macOSとiOSの両方で使われている」と説明されており、macOSとiPhoneは、Unix由来の同じカーネルを共有しています。
- Linuxは事情が異なります。1991年にリーナス・トーバルズが、Unixのソースコードを使わず、ゼロから独立して書いたカーネルです。Unixと同じ流儀で動く「Unix系」ではありますが、Unixのコードそのものを受け継いではいません。
- Androidは、そのLinuxカーネルの上に構築されています。
「ソースコードを受け継いでいる」macOS・iPhoneと、「思想と作法だけを受け継いでいる」Linux・Androidとでは、Unixとの距離が違います。ただし出発点まで遡れば、行き着く先はどちらも1969年、小さなPDP-7です。
いま打っているlsも、同じ血筋
血筋がつながっているのは、OSの中身だけではありません。このサイトの「ターミナル/UNIXコマンド」で扱っている、黒い画面のコマンドそのものも、Unixの遺産です。中身を見るためのlsは、1973年のマニュアルにもすでに載っています。50年以上前に打たれていたのと、ほぼ同じ綴りのコマンドを、いまも同じように打っているわけです。
まとめ
- Unixは、Multicsから撤退した後に残った、あまり使われていなかったPDP-7の上で、ゲームを動かすための土台として始まった
- 名前は、Multics(多重化)への当てこすりで、1970年にブライアン・カーニハンが提案した
- 1973年にC言語で書き直されたことで、特定のハードウェアに縛られず他の機械でも動くようになった
- AT&Tが独占禁止法で新事業を禁じられていたため、大学にほぼ無償でライセンスされ、それがBSDを生んだ
- macOS・iPhoneはBSDの系譜としてソースコードを受け継ぎ、Linux・Androidは思想を受け継いで独立に書かれている
30トンの部屋から始まったENIACとは対照的に、Unixは誰も気に留めていなかった小さな計算機から始まりました。いま手元にあるiPhone・Mac・Linuxサーバ・Androidのどれかは、たいてい半世紀前のこの線の先にあります。