OS誕生からLinuxまでの歴史
- 注意
- 本文は1994年にソフトウェアデザイン誌に連載していたOS入門の原稿をベースにしています。ですからこの文章は1994年当時の状況をベースにしてかかれています。
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の誕生前夜
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の現代史は、また別の機会に。