T1#research#regulation
UNIX の誕生 ── Bell 研究所

メタデータ
- 日付
- 年代
- 1960s
- Tier
- T1
- 参照年表
- IT全史 ── 計算機が世界を編み変える · OSの歴史 · オープンソースの歴史
- 出典数
- 06
- 関連項目
- 04
- Tags
- #research#regulation
UNIX の物語は、しばしば「失敗からの転身」として語られる。その枠組みは Ritchie 自身のものだ ──「ベル研究所の計算機科学にとって、1968年から1969年はいささか落ち着かない時期だった。主たる理由は、研究所が Multics 計画からゆっくりと、しかし明らかに不可避的に撤退しつつあったことである」。
Multics のあと
Multics(Multiplexed Information and Computing Service)は MIT、General Electric、AT&T ベル研究所が共同で進めた OS で、当時の先進的な発想 ── タイムシェアリング、階層型ファイルシステム、動的リンク、リング保護、コマンド言語 ── をすべて1つに詰め込んでいた。最終的に完成はした。ベル研究所は1969年にそこから離脱した。
その後を作ることになる4人 ── Ken Thompson、Dennis Ritchie、Doug McIlroy、Joe Ossanna ── は、Ritchie の言葉では「実際に Multics を触っていた、ベル研究所最後の抵抗勢力」だった。失われようとしていたのは製品ではなく習慣である。Multics は多人数を支えられなかったが、彼らを支えることはできた。守りたかったのは「プログラミングをするための良い環境というだけでなく、その周りに交わり(fellowship)が生まれるような系」だった。
1969年を通じて彼らは中規模機 ── DEC PDP-10 や SDS Sigma 7 ── の購入を働きかけ、OS を書くと約束した。どの提案も、正式に却下されないまま消えた。買い取り・第三者リース・プロセッサの下取りを組み合わせて支出を抑える、最も込み入った最後の提案に対しては、ある発言が伝わっている ── Ritchie が慎重に「噂によれば」と断ったうえで書いているのは、研究担当副社長 W. O. Baker の「ベル研究所はそういうやり方で商売はしない」という反応だった。Ritchie 自身の後年の総括はもっと素っ気ない ──「我々は、あまりに漠然とした計画のために、あまりに少ない人数に、あまりに多くの金を使えと研究所に求めていた」。
PDP-7
実際に機械を引き寄せたのはゲームだった。Thompson は太陽系の主要天体をシミュレートする Space Travel を、まず Multics 上に、次に GE 635 の GECOS 用に Fortran で書いていた。GECOS 版は表示がぎこちなく、1プレイあたり CPU 時間で約75ドルかかった。そこで彼は「ほとんど使われていない、優れたディスプレイプロセッサを備えた PDP-7」を見つけ、Ritchie とともにゲームを移植した。
並行して Thompson、R. H. Canaday、Ritchie は、黒板と走り書きでファイルシステムを設計していた。「設計の大半は Thompson のものだ」と Ritchie は書く。「そもそもファイルシステムについて考えようという衝動もそうだった。ただ、デバイスファイルという発想は自分が寄与したと思う」。Space Travel は PDP-7 向けにプログラムを用意する作業がいかに面倒かを教えた。Thompson は黒板上のファイルシステムを PDP-7 に実装しはじめ、それを動かすのに必要なもの ── プロセス、ファイルの複製・印刷・削除・編集のユーティリティ、そして単純なコマンドインタプリタ ── を次々に肉付けしていった。1969年8月、妻 Bonnie が幼い息子を連れて1か月ほど里帰りしていた間に、カーネル・シェル・エディタ・アセンブラをそれぞれ1週間ずつ書いた。アセンブラが動いた時点で、系は自分自身を支えられるようになった。
Ritchie は命名を「1970年もかなり進んでから」とし、Brian Kernighan が「Multics をもじった、いささか人の悪い駄洒落」として Unix という名を提案したと記している。より早い綴り UNICS も広く伝えられている。
1969年の系にあったもの、なかったもの
PDP-7 UNIX のファイルシステムは、今日の目にも見覚えがある。i-list(各ファイルの保護モード・種別・サイズ・ブロック一覧を記述する i-node の線形配列)があり、ディレクトリ(名前と i 番号の並びを持つ、ただのファイル)があり、デバイスを記述する特殊ファイルがあった。read、write、open、creat、close も揃っていた。
無かったのは、UNIX が1969年に発明したと語られがちな当のものである。パス名が無かった。 ファイル名の引数はすべて / を含まない単純名で、カレントディレクトリからの相対として解釈された。階層の代わりを務めたのはリンクと、込み入った慣習の集合である。他人のディレクトリにあるファイルに触るには、コマンド3つと後始末が要った。さらに悪いことに、システム稼働中にディレクトリを作ることはできなかった ── ディレクトリはすべて紙テープからファイルシステムを再構築するときに作られる。Ritchie の言い方では、ディレクトリは事実上「再生不能な資源」だった。結果としてサブディレクトリは使うのが面倒すぎて、誰も使わなかった。階層的な名前空間は PDP-11 とともに来る。
マルチプログラミングも、fork も wait も exec も無かった。プロセスはちょうど2つ、端末ごとに1つ。シェルはコマンド行を読み、コマンドのファイルにリンクし、小さなブートストラップをメモリ上端にコピーしてそこへ飛ぶ。ブートストラップがシェル自身のコードの上にコマンドを読み込む。exit は、終了したコマンドの上に新しいシェルを読み直す。
この原始的なループには、その後のすべてを担った判断が2つ含まれている。第一に、シェルは OS の一部ではなく、ファイルに置かれた通常のユーザレベルプログラムだった ──「その後の発展にとって決定的だった」と Ritchie は書く。第二に、シェルも I/O 系も Thompson の専有物だったため、< と > によるリダイレクト記法 ── Multics がもっと不格好な形で持っていながら、ベル研究所の誰も盗もうと思わなかった発想 ── は、正しい形が浮かんでしまえば「実装は1時間かそこら」で済んだ。
現代的なプロセス制御は「2日ほどで設計され実装された」。fork と exec を1つにまとめず分離したのは、何が安く済むかという事情も大きい ── PDP-7 の fork は「ちょうど27行のアセンブリ」で書けた。この変更は直ちに chdir を壊した。それまで普通のコマンドだった chdir は、生成されてすぐ終了する子プロセスのディレクトリを変更するだけになってしまった。
PDP-11 と、3人のタイピスト
1970年初頭、彼らは再び申請した。今度は要求を下げ、具体的な用途を約束した ── 約 65,000ドル、文書の編集と整形に特化したシステムのために。押したのは Ossanna、資金を通したのは L. E. McMahon、発注は同年5月。プロセッサは夏の終わりに届いたが、ディスクは12月まで来なかった。その3か月間、機械は部屋の隅で 6×8 の盤上の閉じたナイト・ツアーを全列挙し続けていた。
最初の PDP-11 UNIX は 24K バイトのコアメモリ(16K がシステム、8K がユーザプログラム)と 512K バイトのディスクで動き、ファイルサイズの上限は 64K バイトだった。1971年後半、この機械は特許部門の3人のタイピストを支え、特許出願書類を作らせている。メモリ保護の無い機械で、新しいプログラムを試すたびに彼女たちの足元でシステムが落ちる可能性があった。特許部門はこれを採用し、その信用が、最初期の PDP-11/45 を1台手に入れさせた。
パイプ
パイプが UNIX に現れるのは1972年、「M. D. McIlroy の提案(あるいは執拗な主張)によって」である。McIlroy は数年前から、コマンドは入力と出力のファイルを左右のオペランドに取る二項演算子と考えるべきだと説いていた。ある午後、黒板で説明されたその発想は採用されなかった ── 中置記法が過激すぎると見えたのだ。「なんという想像力の欠如だろう」と Ritchie は後年書いている。
実装されたとき、最初の記法はリダイレクトと同じ文字を流用していた ── sort input >pr>opr>。これが今日の | に置き換わるまで、わずか数か月しかもたなかった。filter という語はほとんど即座に生まれ、多くのコマンドがパイプラインの途中で使えるよう書き換えられた。それまで、引数を与えられなかった sort や pr が標準入力を読むべきだとは誰も思っていなかった。なぜこれが重要だったかについての Ritchie 自身の評価はこうだ ──「Unix のパイプラインの天才性は、それが単体で日常的に使われているのとまったく同じコマンドから組み立てられている点にこそある」。
1973年 ── C 言語と論文
分水嶺は1973年の夏、カーネルが C 言語で書き直されたことだった。公表された代償は具体的である ──「新しいシステムのサイズは、旧版より約3分の1大きい」。それが受け入れられたのは、同じ書き換えがマルチプログラミングと、ユーザプログラム間でのリエントラントコード共有をもたらしたからであり、結果が理解しやすく変更しやすかったからだ。
移植性は動機ではなく帰結であり、そしてそれが UNIX を先行するすべての OS と分けた。高級言語で書かれた OS 自体が初めてだったわけではない ── 1961年の Burroughs MCP は ALGOL 系の ESPOL で書かれ、Multics も大半が PL/I だった。だが、高級言語で書いたことが「別の機械へ運べる」という結果に結びついたのは、UNIX が最初だった。
1973年10月、Ritchie と Thompson はニューヨーク州ヨークタウンハイツの IBM Thomas J. Watson 研究所で開かれた第4回 ACM オペレーティングシステム原理シンポジウム(SOSP)で UNIX を発表した。改訂版は1974年7月の『Communications of the ACM』に載る。短い論文だが、変わった自慢が書き込まれている ── 1971年2月に PDP-11 UNIX が稼働してから約 40 か所に導入されたこと、そして「UNIX は4万ドル程度の安価なハードウェアでも動作し、主要なシステムソフトウェアに費やされた工数は2人年に満たない」ということ。
手放させた制約
1949年、米司法省はシャーマン法違反で AT&T をニュージャージー連邦地裁に提訴した。1956年の同意判決は資産分離を求めなかった代わりに、AT&T が共通運送通信サービス以外の新規事業に参入することを禁じ、ベル研究所に対しては特許を合理的なロイヤリティで第三者にライセンスすることを義務づけた。連邦司法センター(FJC)の記述はこうだ ──「この合意の帰結の一つは、AT&T がコンピュータ事業に参入することを禁じられたことである。当時の同社経営陣は、それをさほど重要な譲歩とは考えていなかった」。
したがってベル研究所は UNIX を売れなかった。代わりに名目上の費用 ── 実質的にはテープ代と郵送代 ── で、ソースコードごと大学と研究機関に配った。その1本を受け取ったバークレーが何をしたかは、別の物語である。
1991年、Linus Torvalds が Linux を書きはじめたとき、手本にしたのは UNIX だった。2007年、Apple が iPhone OS を作ったとき、その下にあったカーネルもまた UNIX の子孫だった。UNIX という名前を聞いたことのない人でも、現在、ほぼ全員が UNIX 系の OS を毎日使っている。
よくある質問
- UNIX を作ったのは誰ですか。
- AT&T Bell 研究所の Ken Thompson が1969年に空いていた PDP-7 上で書き始め、Dennis Ritchie が加わりました。1970年に UNICS(後の UNIX)と名付けられています。
- UNIX が C 言語で書き直されたのはいつですか。
- 1973年です。C 言語の設計は1972年で、この書き換えによって UNIX は移植性を得ました。
出典
最終更新: