Unixの歴史について文章を書くお誘いがあり、 文献等の情報収集を始めました。
このページは備忘録のかわりです。 記述に関する誤り/勘違いは是非 まで御一報下さい。


関連する リンク はこちら。
Unix Seventh Edition Manual のページを追加しました。


Multics

- A Quarter Century of UNIX
- http://www.multicians.org/history.html

  • CTSS は改良型の IBM 7094 で稼動するタイムシェアリングシステムだった。 1961 に最初のデモンストレーションが行なわれた。


  • MIT の Project MAC は 1963 に J.C.R. Licklider の提案に基づいて組織された。 初代ディレクターは Rebert M. Fano だった。


  • 1963 に Project MAC は夏期研修を主催した。 著名なコンピュータ科学者を集めて CTSS のデモンストレーション行ない、 将来のコンピューティングに関する議論を促した。


  • 1963 当時の Project MAC の成果は Fernando J. Corbato の CTSS と Marvin Minsky (John McCarthy) の AI Lab だった。


  • Multics は CTSS の後続となる第2世代のタイムシェアリングシステムで、1964 に MIT, BTL, General Electric(GE) の共同プロジェクトとして開始された。


  • Project MAC は ARPA の Information Processing Techniques Office (IPTO) から資金提供を受けた。 その金額は Multics Project だけで年間 200 万ドルであった。 更に BTL や GE からも相当の資源の提供を受けた。


  • 1963 に Multics のためのハードウェアを提供するメーカーの選定が始まった。 IBM は後に 360/65 となるマシンを売り込んだが、Project MAC が考えていた ページングとセグメンテーションに関するアイデアには無関心だった。 GE の参加は MIT 講師の Joseph Weizenbaum の引き合わせによる。 GE は Project MAC のアイデアに強い関心を持ち、 のちに 645 となるハードウェアの提案を行なった。 この他に DEC も提案を行なったが、結局 GE が選定される事になった。


  • BTL の Multics 開発への参加の経緯は今一つはっきりしない。
    公衆通信事業者として電話/電信以外の事業参入を厳しく制限されていた AT&T の関連会社の1つである BTL が自ら望むコンピューティング環境の 構築に直接手を染めるには、こういった研究プロジェクトに参加するしか 道がなかったと思われる。


  • 1965 Fall Joint Computer Conference で Project MAC は Multics に関する6つの論文を発表した。 当初、次の9つの目標が立てられた。

    • 便利なリモートターミナルの使用
    • 電話サービスに匹敵する、継続的な操作
    • 幅広いシステムコンフィグレーション
    • 選択的な情報共有のサポート
    • 情報の階層構造
    • 幅広いアプリケーションのサポート
    • 複数の環境とインターフェースのサポート
    • システムを進化させる機能

    その野心的過ぎる内容に実現を危ぶむ声もあった。


  • 先立つ 1964 に Multics のプログラミング言語として PL/I が採用された。 既に「高水準言語によるオペレーティングシステムの実装」は固まっていたが、 どの言語を選定するかが問題であった。結局 PL/I が選定されたが、PL/I の 問題点はこの時点では動作する言語処理系が存在しない事であった。 このため独自にコンパイラなどの言語処理系を開発する事となった。


  • この時期 PL/I は一般に大変強力な新しいプログラミング言語として認知されていた。 IBM が Fortran に変わる主力プログラミング言語に据えようとしていたことからも、 この言語の人気がわかる。問題は言語仕様が大きく、 言語処理系の実装が非常に困難なことにあった。


  • 当初 PL/I コンパイラの実装はその専門能力が期待され、 外部業者に委託された。 契約管理は BTL が担当した。が、その実装は予想外に難しく、 結局外部業者はコンパイラを完成できなかったと推測される。 結果、Multics の開発はノッケからケツマずくことになる。


  • PL/I コンパイラの開発作業が遅れていることが明らかになってきた 1965/5/3、BTL の Robert Morris と Doug McIlroy は Bob McClure が開発したコンパイラ記述システムである TMG を利用して暫定的な PL/I コンパイラを開発するための作業を開始した。McClure の協力を得て CDC 1600 で動作する TMG を IBM 7094 に移植し、それを使って生成されたコンパイラのアセンブラコードを IBM 7094 の形式に変換してバイナリを生成した。さらに Clem Pease が GE-635 上で IBM ニーモニックに対応する GE-635 のマクロを定義して、再度 アセンブルしなおして GE-635 用のバイナリも生成した。この一連の作業は 1966 の春までには完成していたと推測される。Multics 関係者はこのコンパイラを EPL (Early PL/I) と呼んだ。EPL の最初のバージョンは 1966 頃には一応動作するようになり、 後に GE が開発した PL/I コンパイラが完成する 1970 頃まで使用された。


  • PL/I コンパイラの完成を待つ間、 開発チームは "Multics System Programmers's Manual" を書き上げた。 このマニュアルは 3000 ページにも及ぶ。


  • Multics Project に参加した BTL のメンバーは次のとおり。

    • Peter Neumann (Manager, Filesystem Designer)
    • Doug McIlroy (EPL)
    • Bob Morris (EPL)
    • Dave Farver (EPL)
    • Jim Gimpel (EPL)
    • Joe Ossanna (I/O Designer)
    • Ken Thompson (QED, IOS)
    • Stu Feldman (IOS)
    • Dennis Ritchie (BCPL)
    • Rudd Canady (BCPL)
    • Brian Kernighan (645 Simulation)

    Dennis Ritchie が BCPL を担当していたのは興味深い。


Multics 開発プロジェクト撤退後の混乱
  • BTL が Multics 開発プロジェクトからの撤退を決めた理由は開発目標を達成できる見込みが薄いと判断したことにもよるが、開発に関わる研究員が計算機サービスと研究という2つの業務を兼務している状況に対する懸念があったようである。詳細は不明であるが BTL 内部には試験的な名目で既に Multics のユーザーが存在しこれらのユーザーをサポートできるのは Multics の開発に携わる研究員だけであったと推測される。このように Multics マシンを何らかの形で保有し、且つ自らの手で運営・サポートを行わなければならないとなると、研究所としてはあまりにも負担が大きいと判断されるのはやむ得ないことだったであろう。


  • Ken Thompson や Dennis Ritche 達は日常的に CTSS や Multics を使って開発を始め各種の作業を行っていたようである。彼らはこの環境(便利で対話的な計算機サービス)気に入っていたと言及している。Dennis Ritchie は「単にプログラミングしやすい環境だけではなく、まわりとの親交を持つことのできるシステム」「タイムシェアリングシステムによってもたらされる共通の計算環境の本質は、単にプログラムをキーパンチする代わりに端末に打ち込めるということだけではなく、コミュニケーションを密にすることができることであると認識していた。」と述べている。ここで述べられているコミュニケーションとは具体的に何を指しているのか不明だが、情報共有に関するタイムシェアリングシステムの何らかの利用法を既に実践していたと思われる。


  • BTL が Multics 開発プロジェクトからの撤退を決定した後も、J.F.Ossanna、K.Thompson、D.Ritchie はオペレーティングシステム(タイムシェアリングシステム)の開発を続行する意欲を捨ててなかったと思われる。そのためオペレーティングシステムが書けそうな中型計算機を確保するべく、撤退直後から盛んに活動を行ったようである。購入すべき計算機の候補として DEC PDP-10 や SDS Sigma 7 を上げたが承認されることなかった。承認されない理由が高額な費用にあると考えた彼らは、さらに支出を切り詰めるため、あらゆる工夫を施した提案を繰り返したが却下される。結果 1969 を通して行われた計算機を確保する目論見はすべて失敗に終わる。


  • 計算機調達と並行して、K.Thompson は近い将来着手する(つもりであった)オペレーティングシステムの技術的な検討も手がけている。いわゆるチョークファイルシステムは、このとき K.Thompson が行った検討の成果である。検討対象としてファイルシステムが選ばれたのは、それが新たなオペレーティングシステムの開発において早い段階で実現しなければならない機能であったことと、おそらく Multics の開発では BTL の担当外の開発課題であったのではないかと想像している。K.Thompson はさらにチョークファイルシステムのシュミレータおよび GE645 用の実験用カーネルを実装するまでにいたるが、計算機調達が頓挫し、Multics の開発のために使用していた GE645 の撤去が決定した時点でこれらの作業は完全に停止する。一連の作業は 1969 の4月から6月の期間に実施されたようだ。


  • Multics の開発のために使用していた GE645 はプロジェクト撤退後も、しばらくは残存し稼動していたが、結局、撤去されることになったと思われる。Space Travel の開発経緯から推測すると、当初 Multics で稼動していたこのシステムは、後に GE645 標準のオペレーティングシステムである GECOS に入れ替えられた可能性がある。またBTL が自ら計算機サービスの運営を行うことを嫌ったことから、このシステムはリース等により調達され、その費用負担もかなり高額であったと推測される。


PDP-7 UNIX
  • かの有名な K.Thompson 作ったゲーム Space Travel は太陽系の主要な天体の飛行を模したシュミレーションゲームであった。


  • Space Travel は 1969 に開発された。当初は Multics で、続いて GE645 の標準OSである GECOS の Fortran に書き直された。が、GE645上でゲームすると1ゲームあたり約75ドル分のCPU時間を使用する問題があった。Space Travel を PDP-7 に移植する動機は主にこの問題を解決するためだったと推測される。


  • たまたま使用者不在の PDP-7 が存在しており、K.Thompson が自由に使用することができた。というのも、この PDP-7 は 18 ビットワード、8K ワードのメモリしか積んでない 1969 当時としても十分に古くさいシステムだったからである。しかし、都合のよい事にもともとグラフィックターミナルとして使用されていたので、グラフィック表示のできるディスプレイが接続されていた。


  • PDP-7 版 Space Travel の開発は当初 GECOS 上で行われた。PDP-7 用のクロスアセンブラを作成し (GCOS の GEMAPアセンブラのマクロ機能を使用したらしい)、それで作成したバイナリを紙テープに出力して PDP-7 で実行する方法が取られた。当然のことながらコードは全て PDP-7 アセンブラで記述された。


  • さらに K.Thompson は既に検討済みのチョークファイルシステムを PDP-7 上で実装しようとした。この作業は Space Travel の開発上ファイルシステムが必要になったのか、それともまったく無関係であったかは定かではない。いずれにせよファイルシステムを動作させるために必要な周辺機能も実装し、結局ごく単純なOSカーネルが出来上がった。これが後に PDP-7 UNIX と呼ばれるものの原型である。


  • PDP-7 上で動く開発用ツールを開発することになったのは、ファイルシステムのデバッグ作業の効率をあげるため、紙テープを使用するクロス開発の作業の煩雑さから逃れることが最大の理由であったと推測される。シェル、エディタ、アセンブラなど作業に必要なユーティリティが実装された。この作業は 1969 夏に妻と子供が1ヶ月間の里帰りしている期間を利用して K.Thompson 一人で実装した。


  • この時作られた Ken Thompson のアセンブラは極めて単純なもので、1つのソースファイルからいきなり実行形式バイナリを生成し、出力ファイルの名前は "a.out" に固定されていた。リンカーもないため、当然ライブラリなども使用できない。なお、出力ファイルの "a.out" という名前はその後も Unix で受け継がれていく。


  • PDP-7 Unix の原型が出来上がったところで、Doug McIlroy が Bob McClure の TMG を PDP-7 Unix に移植した。TMG はコンパイラを記述するための言語というべきもので、文字通り PDP-7 Unix で動く最初のプログラミング言語となった。この TMG は Multics プロジェクトにおいて EPL (Early PL/I) を記述するためにも使われているが、おそらくアセンブラで記述されていただろうこのプログラムは、予想に反して高い移植性も備えていたのではないか?


  • PDP-7 Unix が TMG を手に入れた事で、アセンブラを使ったプログラミングの生産性の低さを解消するため K.Thompson は FORTRAN コンパイラの実装を思い立つ。実際、非常に制約が厳しい PDP-7 の上でこのようなちゃんとした言語処理をするプログラムを動作させたという事実は Doug McIlroy の離れ技というべきもので、この事実が Ken Thompson のやる気を更に刺激したのは想像に難くない。が、結局出来上がったのは BCPL をベースにした B と呼ばれる言語だった。


  • BCPL は Martin Richards が 1960 年代の中ごろ、MIT のビジターであった頃に設計した言語で、Richards が Multics の開発環境である CTSS の上でこのコンパイラを実装した事から BTL のメンバーはこの言語を良く知っていた。BCPL はシステム・プログラミングに向く低水準な高水準言語と言えるもので、PL/I よりも BTL のメンバーの好みにあっていた。 MIT の AI ラボの面々が PL/I を目のカタキにしていた事実も考え合わせると、この見解の一致は非常に面白い。


  • TMG バージョンのB が動作するようになると、K.Thompson は B 自身で B を書き直す作業を行った。が、この作業は実装されているメモリの制限により非常に困難な作業であった。


  • PDP-7 上で動く B は中間コードを実行するインタープリタとして実装されており B コンパイラよりこの中間コードを生成した。B の処理系は2種類の実装があった。1つは一般的なインタープリタ、もう一つは 4K ワードページ単位でテキストとデータのページイン/ページアウトを行う Virtual B あるいは vb 呼ばれるバージョンであった。


  • PDP-7 の B は実行速度が大変遅かったため、B で書かれたプログラムはごくわずかしかなかった。その中にはその後の Unix でも継承される dc の初期のバージョンも含まれていた。


  • この時 D.Ritchie は GE635 でのコンパイラ(中間コードではなく機械語を生成する)として B を実装したいと考えていたようだ。この計画は実行され GE635 用 B コンパイラ は実在したようだ。


  • PDP-7 Unix は実際に使うには遅すぎるシステムであった。それにもかかわらず各種の実装が試みられたのはちょっとした実験、すなわち将来コンピュータを手に入れたときに行うであろう実装のシュミレーション的な意味を持っていたと思われる。しかし後の PDP-11 に対する移植作業において思わぬ実力を発揮することになる。


  • 現在 PDP-7 Unix のソースコードは残っていないと思われる。


First Edition
  • PDP-11 の購入提案はそれまでの提案と一線を画するものであった。予算額がそれまでの提案よりも1桁小さいものであっただけでなく、具体的な「文書処理システム」を開発する提案を行った。この提案を熱心に推進したのは J.F.Ossanna であった。この提案は Lee E. McMahon の尽力により、音響学研究部のディレクタ Max Mathews の資金提供で承認された。このように PDP-11 の調達は研究所内の各所からの支援により実現した。


  • First Edition の開発が実質的に始まったのは K.Thompson や D.Ritchie が PDP-11/20 を手にした 1970 の夏以降だと推測される。その当時新製品だった PDP-11 は当初ディスクなしの状態で納入され、ディスクはその年の 12 月に遅れて納入された。シリアル番号は1番だったらしい。


  • 当初 PDP-11 には文書処理のためのシステムとして開発することを考えていたが、予想外の PDP-7 Unix の需要の高さから、結局 PDP-11 でも Unix を動かしたほうがとの結論に達した。ちょっとした実験や特殊目的のシステム開発のため PDP-7 Unix は大変有用であったらしい。


  • PDP-11 用のプログラムは当初 B で書かれた PDP-7 アセンブラを使ってクロスアセンブルすることによって作成された。PDP-11 で実行された最初のプログラムは PDP-11 アセンブラと dc だった。


  • PDP-11 の導入当初ディスクがなかったため K.Thompson はメモリの半分をRAMディスクに割り当て、その上で作業を行った。今日の言うところの Mini Unix と同じやり方である。こうして cp、cat、ls などが出来上がった。


  • ディスクの到着を待つ間 Mini Unix の上で6x8のチェス盤による騎士巡礼問題の解決を実行した。3ヶ月のジョブだった。


  • ディスクが納入されるとまもなく PDP-11 Unix は動作した。


  • PDP-11 Unix の最初のバージョンは原則的に PDP-7 Unix と同じものだった。PDP-11 は 24KB のメモリ(システム用 16KB、ユーザー用 8K)と 512KB のディスクしかもっていなかった。ファイルの大きさは 64K に制限された。


  • PDP-11 Unix がシステムの形を成してきたところで、再び書き直しが始まった。B で書かれたアセンブラは大変遅かったため、アセンブラで書き直された。高水準言語によるシステム・プログラムの記述というアイデアは、この段階では実験以上の意味を持たなかったようだ。


  • PDP-11 Unix の開発環境が整った後、提案時の約束を果たすため、特許部に対する特許申請書用の文書処理サービスを申し出た。特許部はこの時期この目的のために商用システムの購入を検討していたので、その代わりに実験に付き合ってもらう約束を取り付けたようだ。こうして文書処理システムのための開発が始まり、このためエディタとテキストフォーマッタが作成された。


  • エディタに関してはいくつもの変遷を経ている。オリジナルは MIT で開発された PDP-1 用の TECO (TapeEditor and Corector のちに TextEditor and Corector) である。1967 に L.P.Deutsch と B.W.Lampson が TECO を SDS-940 に移植したバージョン QED を作成する。さらに K.Thompson が QED を IBM 7094 (おそらく CTSS が動作する) に移植し、それを K.Thompson と D.Ritchie がGE635 に移植した。PDP-11 Unix wではこの GE635 版 QED を移植する形で簡易ラインエディタ ed が実現される。ed はのちに UCB で ex、vi と変遷し、また MIT では TECO の直系の子孫として emacs が開発される。今日主要なエディタとして広く認知されている emacs と vi が同じ祖先である TECO から派生した事実は興味深い。


  • テキストフォーマッタは CTSS で動作していた J.E.Saltzerrunoff がベースとなった。runoff は「印刷する」(run off a document) に由来している。


  • Bob Morris が runoff を GE635 (Multics or GECOS ?) に移植した。 この際 runoff という名前を短縮した roff が使われた。


  • Bob Morris の roff をベースに PDP-7 (Unix) バージョンである rf が実装された。実装者は Ken Thompson か? Dennis Ritchie か?それともその他の誰かかは定かではない?


  • 同時期に Doug McIlroy によって roff は BCPL で書き直される。


  • (おそらく 1971 年に) PDP-11 Unix 用の roff は Doug McIlroy の BCPL バージョンを参考に Joe Ossanna が実装を行なった。(当初はアセンブリ言語で記述した?)


  • 開発の成果を確認すべく 1971 の後半に特許部のタイピスト3人が特許申請書の入力、編集、整形をおこなった。結果、特許部は Unix を採用し、それまで開発に使用していた PDP-11/20 を特許部は譲り受け、代わりに彼らの開発用に PDP-11/45 の購入資金を提供してくれた。


  • PDP-11 Unix すなわち First Edition はオペレーティングシステムとしては Multics の主にファイルシステムに関する次のようなアイデアを継承していた。

    • ツリー構造のファイルシステム
    • バイトストリームとしてのファイル表現
    • テキストファイルが Newline 文字が行末を意味する文字の連続とみなすこと
    • 今日ファイル構造体として理解される抽象化のセマンティックス
    • アプリケーションプログラムとしてのコマンドインタープリタの実現
    • 入出力のリダイレクション

    プロセス制御に関しては今日ある fork、exec、exit、wait などのシステムコールは存在したものの、その実装は非常に単純なものだったと思われる。コードは全てアセンブラで記述され、高水準言語による書き直しは後のCの登場まで待たなければならなかった。


  • "UNIX PROGRAMMERS'S MANUAL" によれば First Edition は 1971/11/3 にリリースされたことになっている。


Second Edition/Third Edition/Forth Edition
Fifth Edition/Sixth Edition/Seventh Edition
BerkeleyでのUNIX
3BSD
4BSD から 4.2BSD まで
4.3BSDtahoe と 4.3BSDreno
4.4BSD と CSRG の終焉

参考文献 はこちら。

関連する リンク はこちら。

Unix Seventh Edition Manual はこちら。

エミュレータ情報 はこちら。

このページに関する質問/感想/意見/要望などを にお知らせ下さい。
よろしくお願いします。