OS誕生からLinuxまでの歴史

すずきひろのぶ

hironobu @ h2np.net

本文はソフトウェアデザイン誌に連載していた
OS入門の原稿をベースにしています。

OS誕生

OSの歴史は、コンピュータが産まれてから20年ほど経った1960年代中期か らスタートします。1960年中期にIBMが開発した商用コンピュータ・システム IBM System/360は、本格的なOS (OS/360)を搭載していました。それ以前のコ ンピュータ・システムは、部分的にはOSとしての機能を満たしたものがありま すが、OS として機能及び概念が確立はしていません。IBM System/360が始め てOSの機能と概念を確立させました。

60年代のアメリカは公民権運動、ベトナム反戦運動、ウッドストック などを後世に残すと同時にOSも後世に残したのでした。

それまでのIBMのコンピュータは、そのハードウェアの製品ライン毎にソフ トウェアが必要で、各々の製品ラインの違うコンピュータ・システムには、ソ フトウェアの互換性がありませんでした。

これは、私たちが現在、アプリケーション・プログラムと呼んでいるよう な、ある特定目的のために動作するソフトウェアが、OSというクッションを持 たず、システム全体のソフトウェアと密接に絡み合っていたからです。つまり、 アプリケーションがリソースを管理しなければならなかったのです。

例えば、事務には事務専用システムおよびソフトウェアを、科学計算には科 学技術専用システムおよびソフトウェアを用意していました。また、同じ専用 システムでも最大メモリやプロセッサのスピード、IOデバイスの数などのシス テムの構成が違えば、それだけでソフトウェアの互換性は保てませんでした。

OSを導入することによってリソース管理をアプリケーションから切り離しま す。以前のシステム構成に特化したソフトウェアしか動かないコンピュータ・ システムの世界から今度は色々なソフトウェアを動かすことができる、汎用な コンピュータ・システム世界に変化していきます。

その後System 360は、370、4300、3080、3090といったIBMシリーズに続き 継がれます。それらのシステムは『汎用機』と呼ばれるコンピュータ・システ ムの代表です。

MULTICSも忘れちゃいけない

同世代で、忘れてはいけないのがタイムシアリング・システムと呼ばれる処 理方法を用いたCTSSと、それに引き続く今日のOSの原型でともいえるMULTICS です。CTSSは1963年にMITで使われていた原始的なOSでIBM System / 360より も古いIBM 7094というシステム上で実現されています。

タイムシアリング・システムとは、複数のユーザが実行している各々のプ ログラムの処理をある一定時間毎(あるいは入出力が発生しI/O待ちになった場 合)に切替えて、各々のユーザがあたかも同時に1つのコンピュータを使ってい るかのように見せかせるシステムです。

CTSSのプログラムの切替えは非常に単純です。ユーザの動かしているプロ グラムをまるごと主記憶装置から補助記憶装置に追い出し、次に動かすプログ ラムをロードしてくるというものでした(注1)。複数のプログラムを切替える 能力はありましたが、リソース管理という点では、OSと呼ぶには十分ではあり ません。

(注1) これは、まだマルチプログラミングまで進化していません。混 同しやすいので要注意のこと。

CTSSがうまくいったので1965年にMITとAT&Tベル研究所とジェネラル・エ レクトリック社(注2)が、共同で、現在のOSと比較しても見劣りしないような 数々のスペックを持った、多目的なOSを作ろうとしました。それがMULTICSで す。現在、私たちがOSの機能と呼んでいる数々の機能はMULTICSで現れたもの です。

    (注2) 当時のジェネラル・エレクトリックは大手コンピュータ・ メーカーであった。

がしかし、1965年当時それらを実現するにはそもそもハードウェアの能力 が足りませんし(注3)、それだけのアイデアを完全に実現するだけのソフトウェ ア技術もまだ存在しないという、かなり無謀なプロジェクトでした。

(注3) あまりに古くて、正確な資料がないのですが、MULTICSのターゲッ ト・ハードウェアだったGE-645の処理パワーは、i386マシンぐらいだっ たようです。

途中でベル研がプロジェクトから抜け、ジェネラル・エレクトリック社がコン ピュータ市場自体から撤退しました。MULTICSはその後、MIT内部と数十のサイ トで利用されました。おどろくことに細々とまだ存在しているのですが、多く の人の記憶からは既に消え去ってしまっています。しかしMULTICSで考えられ た数々のアイデア、例えば、仮想記憶、プロセスの概念、プロテクションの概 念、他にも多くの重要なアイデアが、今日のOSの中に生きています。

UNIX誕生!

MULTICSプロジェクトにはベル研のKen ThompsonとDennis Ritchieがいました。 彼らはベル研に戻り、廃棄同然のDEC PDP-7という小型のコンピュータの上に OSを書きます(注4)。1968年のことです。それはMULTICSのような大きなスペッ クを持つOSではなく、もっとコンパクトなOSなので、彼らはMULTICSをもじっ てUNICSと命名します。後にUNICSはUNIXと改名し、そのままの名前が定着します。

(注4) Ken ThompsonはMultics上で動いていたスペースゲームをベル研に 持ち帰ってきたはいいがのですが、遊ぶのに適当なマシンがなかったので 放置されていたDEC PDP-7を使い始めたと言われています。

たまに『UNIXはMULTICSの否定である』とか、その反対に『MULTICSの後継 がUNIXである』とか書いてある説明を見かけます。これは正しくもあり間違っ てもいます。思い出して欲しいのですが今日的なOSの基礎となる沢山のアイデ アが導入されているのがMULTICSです。つまり今日的なOSの多くのアイデアそ のものはMULTICSを源流にもちます。ただし、MULTICSは、たくさんのアイデア をつめこんだためにシステムが肥大化しプロジェクト自体は失敗に終っていま す。

もちろん今日的OSであるUNIXにはMULTICSの数々のアイデアが採り入れて います。しかしながらUNIXはMULTICSの最大の特徴(かつ致命的な問題となって いた)である多目的で複雑である部分を否定しています。言うまでもないです がUNIXはMULTICSをもう一度作ろうとしたものでもありません。もしUNIXと MULTICSの関係性を表現するとするならば「MULTICSの失敗を教訓にしたOS」と 言えるでしょう。

ちなみにMULTICSが複雑で大きなOSでUNIXがシンプルで小さいOSだったと いうのは初期のUNIXを指していうことであって、現在の基準では当てはまりま せん。その後のUNIXは肥大化の道を歩んでいます。

現在、UNIXを作ったKen ThompsonやDennis Ritchieといったベル研の人達 は既にUNIXは利用せずPlan9という異なるタイプの新しいOSを開発し、利用し ています。

BSDへの分岐

PDP-7の上で産声をあげたUNIXは、まだ正式なバージョンが付けられてい ません。ですから、正確にはまだUNIXではないとしてカッコつきで(PDP-7)と して分類している本もあります。First Editionと呼ばれるのは、PDP-11/20上 で動き始めたUNIXからです。それまでアセンブラで書かれていたUNIXがCで書 き換えられFourth Editionとなります。

どうしてEditionという言葉を使っているかというと、ベル研究でのバー ジョンはマニュアルのバージョンで区別しているのだそうです。なぜなら、い つもUNIXのソースコードに手を入れていたため常にソースコードが変わってい てソースコードでのバージョン管理は不可能だったためだそうです。唯一のバー ジョンコントロールというのはマニュアルだったというわけです。一般には Sixth Edition と言わずにV6 (Version 6)という具合にVersion を使う方を目 にする方が多いかも知れません。

1976年のSixth EditionをベースとしてUNIXはPWB3.0とBSDが分岐します。PWB はProgrammer Work Banechの略です。この流れは、後にSystem IIIへつながり ます。BSDはBerkeley Software Distributionsの略で、UCB (University of California Berkeley)のCSRG (Computer System Research Group)で作られて いました。

1BSDと呼ばれる、最初のバージョンはPDP-11上で動いていました。これが2BSD になり2.xBSDになります(xは1,2,3といった数字が入ります)。2.xはPDP-11を プラットフォームにしています。

一方、2BSDからVAXで動く3BSDに分岐し、後に4.0BSDになります。以降、 4.1BSD、4.2BSD、4.3BSD、4.4BSDとなります。もともとのUNIXのプログラムワー クベンチとしての使い勝手の良さはもとより、CSRGで加えられた仮想記憶の能 力、高速なファイルシステム、TCP/IPの実装プラットフォーム(注)などの数々 の最新技術の投入によるアドバンテージにより、BSDは研究所や大学を中心に 急速に広がります。

(注) これらの研究は国防総省傘下の研究組織であるDARPAから の研究資金の援助で開発されています。

BSD自体は自由にコピーできるのですがベル研で作られたコードが含まれ ていますので、UNIXを動かすにはAT&Tへのライセンス費用が発生しました。こ の1980年代前半、AT&Tへのライセンス費用は研究施設では配布実費程度($800)、 商用サイトでは($43000)でした。しかしながら高額な科学計算用コンピュータ VAXを所有している所では、この料金は大した問題ではありませんでした。

最後のリリースが4.4BSDです。ここでCSRGでのBSDの研究開発は終了しま す。この頃になるとBSDは技術的に研究と呼べる部分が少なくなってきたのは 確かですが、それ以上にAT&Tとライセンセンス問題がこじれて研究者の中のモ チベーションが保てなくなったのではと筆者は考えています。

1992年1月、UNIXライセンスを管理するAT&Tの子会社URL社が4.3BSD NET/2をベー スに商用BSDを作ったBSDI社を相手に製品出荷差し止め訴訟をおこします。そ れが判事に却下されたので、今度はUCBとBSDIの両方を相手に製品出荷差し止 め訴訟を繰り広げます。また裁判途中でURL社がAT&Tからノベル社に買収され たりとったこともあって、なかなか訴訟も、和解案も進みません。やっとのこ と1994年の1月に解決します。

貴重なCSRGメンバーの労力が、このバカバカしい訴訟で浪費されたといっ ても過言ではありません。1995年6月の4.4BSD-Lite Release 2を最後にCSRGは 解散します。もちろん表向きは「新しい時代、新しい人達へのバトンタッチ」 ですが、実際は、この世にもバカバカしい訴訟で燃え尽きたといっても過言で はないでしょう。

まぼろしのSystem IV

Sixth Editionから分岐してPWBが作られます。ベル研にはリサーチとは関 係のないUNIXをソフトウエアの開発のために使おうというグループがあって、 そこがUNIXをプログラマーのための道具として使うためのに改良しました。 1979年のことです。これがPWB/UNIX 1.0として研究所の外部にもライセンスさ れるようになります。PWBから分岐して1982年にSystem IIIが作られます。PWB はその後何度かバージョンがアップされますが、1984年にSystem V Relase 2 に統合されます。

一般市場向けに販売された最初のAT&TブランドUNIXがSystem IIIです。筆 者は1983,4年頃にCPUにMC68000を使ったNCR社製マシンでSystem IIIを使った 経験があります。GUIもネットワークもありませんが、使い心地は今のLinuxや FreeBSDなとどおなじです。

その後、後継バージョンとしてSystem Vが出てきます。System IVという 名前は幻になっています。実は発売寸前までSystem IVは進んでいたのですが、 その内容のひどさにUNIXを生み出したベル研のメンバーは激怒し「今後一切関 係はない」といって、マニュアルなどすべてから名前の削除を求めたそうです。 それでSystem IVは余儀なく大量の変更が発生し、発売できなくなりました。

世界最大のUNIXベンダ マイクロソフト

1980年代前半、世界で最もUNIXの出荷が多かったのは実はマイクロソフト社で した。その頃、SCO (Santa Cruz Operation)社と共同でマイクロソフトは XENIXというIntel 8086上で動くUNIXのバージョンを作成していました。その 頃、他はVAXのような大きなマシンばかりでしたので、出荷数から見るとXENIX の数が最大のように見えるのです。

UNIX爆発の時代

1985年から1995年までの10年間は、色々なバージョンのUNIXが増殖した時代と いえるでしょう。UNIXの流行とともに、色々な会社が色々なUNIXを実装して売 り出していきます。日本でも通産省の大失敗プロジェクトであるΣプロジェク トが行われていた頃です。色々な会社のUNIXマシンを製造し、少しでも自分の シェアを独占しようと奔走していたころです。このような背景があってAT&Tが BSDIの邪魔をし、その邪魔ができないと見るやいなや、UCBも含めて訴えてい た頃です。なんと情けない時代でしょう。そんなAT&Tや他の企業のドタバタも 95年以降は鎮静化します。理由は簡単です。Windows がディスクトップUNIXの シェアを食い、Windows NTがサーバのシェアを食ったからです。

Linuxの誕生前夜

Linuxが生まれる1991年前夜、既にOSのトレンドは新しい世界に入ってい ました。それはマイクロカーネル技術を使ったOSです。マイクロカーネルのポ イントは提供するサービスと、最小限のコントロールのみしか残していない小 さなカーネルから出来上がっている所です。 最小限のコントロールとは、メモリ、タスク、プロセス間通信、(最小限必要 なハードウェアの)デバイスドライバなどです。ファイルシステム、ネットワー ク機能、プロセス管理、仮想記憶管理などなどはサーバプログラムとして動作 しています。それまでのUNIXカーネルはOSが果たすべき機能はすべて1つのカー ネル内で行われているモノリシック・カーネルとよばれるタイプでした。

Linux誕生

フィンランドの大学生 Linus Torvaldsが1991年にLinux version 0.02をリリー スしました。1994年にLinux 1.0をリリースしました。 Linuxを一躍有名にしたのは、使い勝手でもなく、新規性でもなく、処理能力 でもありません。1992年にあったネットニュース上での大喧嘩でした。

Torvalds vs. Tanenbaum

1992年にcomp.os.minixで行われたLinuxの生みの親Torvaldsとオペーレーティ ングシステム研究者の大御所Tanenbaum教授との論争です。"Linux is obsolete"というタイトルで書いた教授の記事の趣旨は「90年代に70年代の技 術であるモノリシックカーネルであること」「ポータビリティに欠けること」 の2点です。これはオープンソフトウェア(オライリージャパン)に収録されい るので、みなさんも是非1度目を通されることをお勧めします。

正直に筆者の意見をいうと教授の言い分は正しいです。ただし、その時代遅れ な構造こそがLinuxに味方しました。誰もが知っている時代遅れの枯れた技術 を使ったからこそLinuxのカーネルをハックできる人口が多く、そしてまた実 現方針も建てやすく、早く簡単に作れたといえます。

マイクロカーネルはモノリシック・カーネルよりオーバーヘッドが発生し 処理効率が落ちると言われていますが、これはLinuxができてきた91年であっ ても古い話です。80年代後半ごろマイクロカーネルの草分けであるMachはのオー バーヘッドの問題はありましたが90年に入るとマイクロカーネル技術は既に、 その問題を克服しています。いまだにこの「マイクロカーネルは遅い」という 神話を信じている人がいて驚くことがあります。

またマイクロカーネルの提供する「粒度」というモノリシックカーネルでは存 在しえない概念も入っています。ここでの粒度とはマイクロカーネルが実行す る処理のサイズだと考えてください。 マイクロカーネルはこの粒度という処理を分散する考え方を導入しているため たとえばCPUを何十、何百、何千個搭載した並行処理マシン上で1つ1つのCPUで マイクロカーネルが各々動き、個々のタスクが割り当て、さらに全体としてプ ロセスを管理するプロセス管理サーバがあるような実装が可能になります。た ぶん、このようなことをしたいために日立の並列スーパーコンピュータ SR8000シリーズ の OS は Machをベースとしたマイクロカーネルで実装してい ます。

Windows NTもマイクロカーネルで作られているので同じような効果がでます。 たとえばCOMPAQ ProLiant 8500というマルチプロセッサマシンを多数と Microsoft Windows 2000 Advanced Server と Microsoft SQL Server 2000 Enterpriseの組合せでデータベースのベンチマークであるTPC-Cの最高レコー ドを何度か書き換えています。

2とか4程度のプロセッサ数ならモノリシックカーネルでも使えるでしょう が、このようなプロセッサ数が多いマルチプロセッサマシンでは上手に動けま せん(このような劇的なパフォーマンスが出る実装はまだ存在していません)。

LinuxはUNIXではない

こう書くと混乱する人がいるかも知れません。まずLinuxはUNIXではありませ ん。BSDにしても、他の多くのUNIXベンダのOSにしても、前身となるUNIXシス テムがあるものがほとんどです。その前身をたどっていくと、最後はベル研の UNIXにたどり着きます。Linuxは、その流れから完全に独立しています。現在 のLinuxの原点は、今や伝説ともなったLinus Torvaldsというフィンランドの1 大学生が386CPUベースのPC上で勉強のために作り始めたものです。それ以前を ひきついでいません。LinuxはLinuxから出発しているのです。つまり元祖なの です。これは、かなりユニークなポジションにいます。たとえばThe Design and Implementation of the 4.4BSD Operating SystemのHistory of the UNIX Systemの章にあるUNIXの家系図を見ると、前身がないOSはPlan9とLinuxしかあ りません。

LinuxはUNIX互換ではない

LinuxはUNIX互換として作られたわけではなくPOSIX 1003.1仕様のOSです。 POSIX 1003.1とはポータブルOSの互換性を保つための規格です。POSIX 1003.1 はUNIXを参考にして作られていますがUNIXの規格ではありません。よって POSIX 1003.1準拠のOSであるLinuxはUNIX互換ではないということです。

LinuxはLinuxではない

システムはカーネルだけあっても、何もサービスはできません。サービスを行 うためのソフトウェア環境が揃って始めてシステムとなります。その取り巻く 環境をミドルウェアと呼ぶ場合もありますが、ここではもっと広い意味でユー ザにサービスを提供する総体としてシステムと呼びます。Linuxはカーネルで す。そのカーネル上でサービスを提供するための数々のソフトウエアはフリー ソフトウェアであるGNUが使われています。よってシステムとして呼ぶ場合は GNU/Linuxと呼ぶのが正しい呼び方です。

Linuxは新しいOSなのか

誕生した時期は「新しい」と言えますが、その中身の構造は非常に「古典的」 です。それはTanenbaumがLinuxを切捨てた通りです。ではLinuxの目標は何な のでしょうか?それは「POSIX準拠した本格的な機能を持ったフリーのOSを作る こと」だと言えます。技術的野心に燃えて新しいことをするのではなく、自分 達が自由に使えるOSを作るということが明確だったのです。

Torvaldsは最初は、そんなに目標が明確だったわけではなかったと思います。 しかし、Torvalds vs. Tanenbaumの論争の中でLinuxの方向性は決っていきま す。それは完全にフリーソフトウェアであること、将来の発展よりまず現在の マシン上で十分に動かせることです。

GNU運動の指導者リチャード・ストールマンがGNUプロジェクトの性質に対して こういったのを筆者は聞いたことがあります。「GNUソフトウェアはわくわく するような新しいものを研究し画期的なソフトウェアを生みだすためのプロジェ クトではない。ソフトウェアをフリーなものに置き換えるむしろ後追いの地味 なプロジェクトだ」

なぜLinuxがこれだけ広まったか

Linuxが現れた頃、既に同様にフリーである386BSDがありました。しかしLinux の開発の方が一歩リードしていたようです。FSFの機関誌であったGNUダイジェ ストのバックログをおってみるとよくわかります。386BSDとLinuxがGNUダイジェ スト(GNU's Bulletin)に紹介されるのは、1992年6月発行の13号です。 GNU's Bulletinは次のURLから入手できます。 ftp://ftp.sra.co.jp/pub/gnu/sra/Bull-j/

GNUダイジェスト1992年6月号から引用してみましょう。
  • Linux (386マシン用のフリーなUnixシステム)

    Linux (Linus Torvalds にちなんで名前が付けられた) は、フリーな Unix シス テムのクーロンであり、System V や POSIX の機能のサブセットを実現する。 Linux はまったく最初から作成され、カーネル内には独占的なコードを含まない。 非常に多くのユーティリティやライブラリは、GNU ソフトウェアを使っている。 Linux は 386/486 AT バスマシンでのみ動作する。Intel 386 以外への移植は非 常に困難であろう。カーネルで広範囲に、386 メモリ管理システムやタスク・プ リミティブを使っているからである。Linux は次のサイトから anonymous FTP で入手可能である。`tsx-11.mit.edu:/pub/linux' (アメリカ)、 `nic.funet.fi:/pub/OS/Linux' (ヨーロッパ)。 Linus に関して討論する `comp.os.linux' というニュース・グループがあ る。メイリング・リストに関する問い合わせは `linux-activists-request@niksula.hut.fi' まで。

  • フリーな 386 BSD

    経験のあるハッカーは、William F. Jolitz らによって移植された BSD Unix の 386 へ移植したバージョンのアルファ・テストに興味を抱くかもしれない。この カーネルは AT&T コードを含まないフリーなもので、自由に再配布可能である。 詳細な情報は `sokol@reyes.stanford.edu' から入手可能である。初 期のバージョンは安定していないので、あるシステムではブート時に問題が発生 する点に注意されたい。

  • ここからわかるのは、386BSDよりもLinuxの方が安定して動作していることと、 既にftpサーバが用意されていて、誰でも容易に入手できる体制がアナウンス されていたことです。

    この文章からもLinuxはIntel CPUアーキテクチャーにべっとり依存していたこ とがわかります。この頃のUNIXユーザはパワーのないPCアーキテクチャーのマ シン、いわゆるパソコンなど使わず、SUNやVAXといったワークステーションを 使っていました。

    教科書通りの考え方だと単一アーキテクチャーしか使えないOSかつ、パワーな いCPU上でしか動かないOSなので魅力がなさそうに見えます。ところが、実際 は既にたくさんのPCが世の中に存在していて、かつ、その後のウインテルと揶 揄されるWindowsとIntel CPUの組合せでIntel CPUの能力が格段に発達しまし た。その時流にLinuxはちょうど乗っかったのです。

    386BSDは4.3BSD NET/2からブランチしています。ここが利用者を躊躇させる1 つの要因になったようにみえます。既に本家4.3BSD NET/2は4.4BSDへアップす るための作業が進んでいました。その後、386BSDはFreeBSDとNetBSDという2つ にカーネルが分岐してしまいます。また本家4.4BSD自体がIntel CPUをサポー トする予定です。

    このような状況でユーザはどれがステーブルなBSDであるかを選択できるでしょ うか。筆者なら386BSD(FreeBSDやNetBSD)を選択しません。4.4BSDまで待ちま す。一方で、今、手元にあるPCでフリーのUNIXを使いたいと思ったら? 筆者 なら将来のマップが見えない386BSDよりもLinuxを選びます。筆者の目からみ れば、出発点で技術的に不利と思われていたLinuxですが、今振り返ると広が るべくして広がったように見えます。

    1994年以降

    1994年以降のLinuxの繁栄に関しては筆者よりもきっとSoftwareDesignの読者 のみなさんの方が色々な情報を知っていると思います。ではLinuxの現代史は、 また別の機会に。

    ここまで

    その他文章集へ