オペレーティングシステムの歴史

オペレーティングシステムの歴史（オペレーティングシステムのれきし）では、オペレーティングシステム(OS)の観点から比較的最近の計算機の歴史を解説する。 OSはコンピュータのほとんどのアプリケーションプログラムが必要とし利用する機能群や、コンピュータのハードウェアを制御し同期させるのに必要な機能群を提供する。初期のコンピュータにはOSがなく、個々のプログラムは通常のタスクを実行するものであってもコンピュータのハードウェア仕様を完全に把握し、プリンターやパンチカードリーダーなどの周辺機器を自前で制御する必要があった。ハードウェアとアプリケーションプログラムが複雑化してくるにしたがって、OSが必須となっていった。 初期のコンピュータはメインフレームであり、OSを持たなかった。この時代のユーザーはマシンを単独使用し、パンチカードや磁気テープやさん孔テープの形でプログラムとデータを事前に用意してやってきた。そのプログラムをマシンに読み込ませ、完了するかクラッシュするまでプログラムを実行させる。プログラムのデバッグは制御パネルのトグルスイッチやランプを使って行った。アラン・チューリングは初期のコンピュータの1つ Manchester Mark I でのこのような作業が得意だったという。彼は万能チューリングマシンの原理から「オペレーティングシステム」の基本的概念に既に到達していた。 プログラマは記号言語、アセンブラ、コンパイラなどを開発し、それまでバイナリで直接書かれていたプログラムを記号化されたプログラムコードで書いて自動的にバイナリに変換するようになった。さらに入出力などを扱うサポートプログラムをライブラリとしてまとめ、パンチカードや磁気テープに格納し、ユーザープログラムとリンクして利用するようになる。その仕組みが現代的オペレーティングシステムの始まりである。しかし、その時点でもまだマシンは一度に1つのジョブしか実行できなかった。イギリスのケンブリッジ大学ではテープを物干し竿にかけ、それぞれに色つきの洗濯ばさみをつけて優先順位を示すという人力のジョブ管理を行っていた。 コンピュータの性能が向上してくると、実際に計算をする時間よりもユーザーからユーザーへ利用を引き継ぐのにかかる時間が大きくなってきた。それまで壁にかかった時計をチェックして課金していたが、コンピュータが自動的にログをとるようになった。ランキューは文字通りドアの前に並ぶユーザーのキューだったが、それが予約表となり、リーダーに複数のジョブのパンチカードを積み重ねるようになり、最終的にOSが磁気テープ装置をオンラインにする順序を自動的に選択するようになった。かつてはプログラム開発者がマシンを直接操作してジョブを実行していたが、マシンの保守も行う専任オペレータがそれに取って代わるようになり、タスクを手動で設定することは少なくなっていった。計算センターが商売として成り立つようになると、入出力のバグなどでデータが失われることが問題となり、装置ベンダーはシステムリソースの誤用を防ぐようランタイムライブラリを強化せざるを得なくなった。自動監視はCPU使用状況だけでなく、印刷したページ数、パンチしたカード枚数、読み込んだカード枚数、使用したディスク容量などに及ぶようになり、ジョブ実行中の磁気テープ交換などオペレータの介入が必要な事象を知らせる機能が生まれた。セキュリティ機能としては、どのプログラムがどのファイルにアクセスしたかなどを記録する監査証跡機能がOSに加えられ、科学技術計算プログラムが給与台帳ファイルにアクセスするなどの不正なアクセスを防ぐようになった。 これらの機能はすべて、完全なオペレーティングシステムの一部となった。そしてランタイムライブラリが進化してジョブ投入前に起動するようになり、ジョブを受けつけ、その実行を制御し、リソース使用状況を記録し、ジョブが完了するとリソースの再割り当てをして次のジョブを実行するといった機能を持つようになった。このバックグラウンドで常駐してシステム全体を管理するプログラムは、モニターあるいはモニタープログラムなどと呼ばれ、後にオペレーティングシステムと呼ばれるようになった。 ハードウェアの管理、ソフトウェアのスケジューリング、リソース監視などを行うプログラムが後のパーソナルコンピュータ時代のユーザー志向OSの先祖といえる。しかし、OSの意味するものは時代と共に変化している。昔の自動車にはスピードメーターもラジオもエアコンもなかったが、後にそれらは標準装備となった。それと同様に、オプションのソフトウェア機能が多くのOSパッケージの標準機能となっていった。ただし、データベース管理システムや表計算ソフトといったアプリケーションは今もオプションであり、別個に販売されている。このため現代でOSと言えば、グラフィカルユーザインタフェースを備え、ユーティリティ群を備え、テキストエディタやファイルマネージャなどのアプリケーションや設定ツールを含むシステムを指すようになっている。 初期のOSの真の子孫は、今では「カーネル」と呼ばれる部分である。技術畑では、古くからの意味でのOSが今も保たれている。これは、携帯機器から産業ロボットやリアルタイム制御システムまでの様々なデータ処理を伴う電子機器の組み込みオペレーティングシステムの開発が今も活発に行われているからで、その多くはユーザーが目にするようなフロントエンドのアプリケーションを実行しない。現代の組み込みOSは1950年代のOSの先祖と比べてもそれほどかけ離れたものではない。 世界初の実用化されたOSといわれるのは、ゼネラルモーターズの研究部門が IBM 704 向けに1956年に開発した GM-NAA I/O である。他の多くの初期のIBMメインフレーム用OSも顧客が自ら開発した。 初期のオペレーティングシステムは非常に多彩で、ベンダーや顧客が特定のメインフレーム向けに様々なOSを生み出していた。同じベンダーであってもコマンド体系や操作手順、デバッグ用ファシリティなどが全く異なるOSを複数作っていた。一般に、メーカーが新たな機種を開発する度に新たなオペレーティングシステムも開発され、その度にアプリケーションを人力で修正し、再コンパイルし、評価し直していた。 そのような状態は1960年代まで続いていたが、ハードウェアベンダーとして頭角を現していたIBMはそれまで開発していた様々なシステムの開発をやめ、System/360シリーズの開発に集中するようになった。それは小規模なマシンから大規模なマシンまで、すべて同じ命令セットを使い、入出力アーキテクチャを統一したシリーズである。IBMはこのシリーズ向けに単一のオペレーティングシステム OS/360 を開発しようとした。OS/360の開発で発生した問題は半ば伝説となっており、ソフトウェア工学の古典ともいえるフレデリック・ブルックスの『人月の神話』に描かれている。シリーズ全体の性能があまりにも異なり、ソフトウェア開発が遅延したため、実際には単一のOSでシリーズ全体をカバーすることができず、OS/360はOSファミリの一部となった。 IBMは以下の2つのオペレーティングシステムを長くリリースすることになった。 OS/360 - 中規模および大規模向けのOS。3種類の構成オプションが存在した。 PCP - 初期ユーザー向け。マルチプログラミング用リソースがない。 MFT - 中規模システム用。OS/360 Release 15/16 にて MFT-II となった。さらに後継として OS/VS1 があったが、1980年代に開発完了。 MVT - 大規模システム用。PCPやMFTとほとんどの面で似ているが（再コンパイルせずに3者間でプログラムの移植が可能）、メモリ管理が洗練されており、タイムシェアリングファシリティ TSO を備えている。MVT の後継としてz/OSなどがある。 DOS/360 - System/360 の小型機種向けで、後継はいくつかあり、z/VSEなどがある。OS/360とは大きく異なる。 IBMは常に互換性を維持してきたため、60年代に開発したプログラムでも現在のz/VSE（DOS/360向けのプログラム場合）やz/OS（MFTやMVT向けのプログラムの場合）で変更なしで実行可能である。 IBMは System/360 Model 67 向けにタイムシェアリングシステムTSS/360 も開発したが、公式にリリースすることはなかった。 System/360やSystem/370向けにサードパーティが開発したOSとしては、Michigan Terminal System (MTS) や MUSIC/SP などがある。 コントロール・データ・コーポレーション (CDC) は1960年代にバッチ処理用の SCOPE オペレーティングシステムを開発し、その後タイムシェアリング用の MACE オペレーティングシステムを開発。MACEは後の KRONOS のベースとなった。1970年代にはミネソタ大学と共同でKRONOSと後継のNOSオペレーティングシステムを開発した。NOSはバッチ処理とタイムシェアリングを同時にサポートしていた。多くの商用タイムシェアリングシステムと同様、そのインタフェースは黎明期のタイムシェアリングシステムであるDTSSのインタフェースを拡張したものだった。 1970年代後半、CDCはイリノイ大学と共同でプラズマディスプレイと長距離タイムシェアリング・ネットワークを採用した PLATO system を開発した。PLATOは当時としては極めて革新的で、TUTORというプログラミング言語の共有メモリモデルによってリアルタイム・チャットやマルチユーザー型のグラフィカルなゲームといったアプリケーションが可能となった。 最初期から商用コンピュータを製造していたUNIVACは、EXECという一連のOSを開発した。初期の他のメインフレーム用OSと同様、バッチ処理指向のOSで、磁気ドラムメモリ、磁気ディスク、カードリーダー、ラインプリンターなどを管理する。1970年代になるとUNIVACは大規模タイムシェアリング用に Real-Time Basic (RTB) システムを開発した。これもDTSSとそのダートマスBASICシステムに倣ったものである。 バロースが1961年に発表したB5000では、MCP (Master Control Program) というOSを採用した。B5000は高級言語をサポートするよう設計されたスタックマシンで、OSの中核部でさえ機械語やアセンブリ言語を使わずに書かれている。MCPは全体が高級言語で書かれた世界初のOSで、ALGOLの方言であるESPOLを使っている。ただし、ESPOLはB5000の命令セットに対応した特殊な文を備えていた。MCPには他にも先進的な特徴があり、商用OSとして仮想記憶をいち早く実装している。B5000向けのMCPを書き直したOSが今もユニシスの ClearPath/MCP シリーズで使われている。 GEはGE-600シリーズ向けに GECOS (General Electric Comprehensive Operating Supervisor) というOSを開発した。GEのコンピュータ部門をハネウェルが獲得すると、GCOS (General Comprehensive Operating System) と改名した。 マサチューセッツ工科大学の Project MAC は、GEおよびベル研究所と共同で Multics を開発した。Multics ではリングプロテクションなどの新機能が導入された。 ディジタル・イクイップメント・コーポレーション (DEC) は様々なコンピュータシリーズ向けに多数のOSを開発した。例えば、36ビットのPDP-10向けのTOPS-10とTOPS-20というタイムシェアリングシステムがある。Unixが普及する以前、TOPS-10は大学でよく使われており、初期のARPANETでもよく使われていた。 1960年代後半から1970年代後半にかけてハードウェアの性能が向上すると、複数のシステムで類似のソフトウェアを動作させたり、異機種間でソフトウェアを移植するということが多くなった。初期のシステムではマイクロプログラミングをそのために利用し、基盤となっているアーキテクチャであってもソフトウェアからは同じに見えるようにすることがあった。例えば、IBMのSystem/360では、360/40以降の機種はマイクロプログラム実装となっている（360/165と360/168を除く）。しかし間もなく、他の手段でアプリケーションの互換性を確保する方式が主流となっていった。 1960年代末ごろAT&Tのベル研究所でUnixの開発が始まった。初期の版は無料で容易に入手でき、修正も容易だったため、広く流布することになった。それはまたAT&Tの子会社群での調達要件となった。C言語で書かれていたため、新たなアーキテクチャでもC言語さえサポートすれば、移植は容易だった。この移植性の良さから、第二世代のミニコンピュータや第一世代のワークステーションで広く採用されていった。広く採用されたため、各種ハードウェアプラットフォームをまたがって概念的に同一なオペレーティングシステムを使用するという考え方を例証することになった。現在のUNIXはプロプライエタリソフトウェアであり、ライセンス料を払える企業や組織だけがそれを使っているが、Unixはオープンソース運動の起源のひとつとなった。 また、DECは16ビットのPDP-11向けにいくつかのオペレーティングシステムを開発した。単純な RT-11、タイムシェアリング型の RSTS、リアルタイムオペレーティングシステムの RSX-11 ファミリなどである。32ビットのVAX向けには VMSを開発した。 同時期に発展したシステムとして Microdata Corporation が開発した Pick がある。Pickは元々データベース・アプリケーションのサポートプログラムとして始まり、OSへと進化した例である。 コモドール64、Apple II、Atariの8ビット機、Amstrad CPC、ZX Spectrumといった1980年代の8ビット ホームコンピュータの多くは、CP/MやGEOSといったOSをフロッピーディスクからロードして使うこともできたが、一般にOSなしで使うことが多かった。多くの場合BASICインタプリタをROMに格納した状態で販売され、それが簡単なOSとして機能した。簡単なファイル操作（削除、コピーなど）、ディスクのフォーマット、アプリケーションのロードと実行などが可能だった。 娯楽や教育目的で使われることが多く、商用や科学技術計算にそれらのマシンを使うことは稀で、真のOSが必要とされることはほとんどなかった。 OSが必要とされなかったもう1つの理由は、単一のタスクを実行するシングルユーザーのマシンであって主記憶も小さく（一般に4KBから256KBで、中でも64KBから128KBの場合が多かった）性能の低い8ビットのプロセッサを使っていたため、OSを使うことでかかる余分なオーバヘッドが無視できないからでもあった。 当時のワードプロセッサなどのアプリケーションは自前でハードウェア全体を制御しており、それはテレビゲームでも同様だった。 1980年以降に設計製造されたほとんど全てのゲーム機やアーケードゲーム機は完全なデジタル電子機器で（『ポン』のクローンや派生品はアナログだった）、コレコビジョン、セガ・マスターシステム、SNK ネオジオといった製品には必要最小限のBIOSしか持たなかった。また、ファミリーコンピュータ/Nintendo Entertainment System やそのクローンは全くBIOSを持たない設計で成功を収めている。 PCエンジンを初めとする現代的なゲーム機では、最小限のBIOSを備えるのが一般的となり、メモリーカード管理、CD再生、コピーガードといった機能を備え、時には開発者向けのライブラリを備えるようになった。しかし、これらを真のOSと呼ぶことはほとんどない。 特筆すべき例外としてドリームキャストがある。プレイステーションと同様に最小限のBIOSを備えているが、ゲームディスクから Windows CE オペレーティングシステムをロードでき、PC/AT互換機からのゲーム移植を容易にしていた。Xboxでは、Microsoft Windows に修正を加えたOSがバックグラウンドで密かに動作しており、PCの一種と言えなくもない。ドリームキャストやその後のゲーム機で動作する Linux もある。 ソニーは初代プレイステーション向けのソフトウェア開発キット「ネットやろうぜ!」をリリースしている。通常のPC上で動作する一連の開発ツールと、PCと接続してプログラムをダウンロードして実行できる黒いプレイステーションが含まれていた。これには両プラットフォーム上で動作するOSを必要とする。 1990年代までのゲーム機やアーケードゲームはBIOSのような機能を組み込んでいたが、プレイステーション以降はそれがどんどん洗練されていき、OSと呼んでも差し支えないものになっていった。 マイクロプロセッサが開発されたことで中小企業や趣味で使える低価格のコンピュータが登場し、共通規格化されたハードウェア部品が広く使われるようになった（S100バス、SS-50、Apple II、ISA、PCIといったバス）。すると、それらを制御する「標準」のオペレーティングシステムの必要性が増していった。初期の重要なOSとして、デジタルリサーチが開発した8080/8085/Z80といったCPU向けのCP/M-80がある。DECのいくつかのOS（主にPDP-11用OS）をベースとした設計となっている。マイクロソフトの最初のOSであるM-DOSもPDP-11のOSに倣い、マイクロプロセッサ向けに開発された。IBMのMS-DOSまたはPC DOSは、当初CP/M-80をベースとしていた。このころのマシンには小さなブートプログラムを格納したROMがあり、それがディスクからOS自体をロードする。IBM PCのBIOSはこの考え方を拡張したもので、1981年に最初のIBM PCが登場してから20年間でより多くの機能が追加されていった。 表示装置とプロセッサのコストが低減されてくると、多くのOSでグラフィカルなユーザインタフェース（GUI）を実用的なコストで提供できるようになっていった。Unix向けには汎用的な X Window System が登場し、他にも Microsoft Windows、ラジオシャックの Color Computer 向けの OS-9 Level II/MultiVue、コモドールの AmigaOS、Appleの Mac OS、IBMのOS/2といったグラフィカルなインタフェースを備えたOSが登場した。GUI搭載オペレーティング環境のインスピレーションとなったのは、ゼロックスのパロアルト研究所で1970年代に開発された暫定Dynabookと言われ、それを多くのベンダーが真似ていった。 暫定Dynabook（Smalltalk）の生み出したもう一つの特色であるオブジェクト指向についても、初期のMac OSやMicrosoft Windowsの段階でこそ限定的であったが、マシンパワーに比較的余裕の出てきたネクスト・コンピュータのNEXTSTEPあたりからOSの構築に本格的に取り入れられるようになった｡ 元々、OSはハードウェア上で直接動作し、アプリケーションへのサービスを提供していた。IBM System/360 Model 67 上の CP-67と、System/370上の Virtual Machine Facility/370 (VM/370) が仮想機械の考え方を導入し、OSがハードウェアを直接制御するのではなく、ハイパーバイザの制御下でOSを実行する方式を採用した。このテクノロジーをパーソナルコンピュータ上で広めたのがVMwareである。その後、仮想機械とモニターとOSの境界は徐々にぼやけていった。 ハイパーバイザーはより複雑化していき、自前のAPI、メモリ管理やファイルシステムを持つに至っている。 仮想化はOSの重要な機能の1つとなっている。例えば、Microsoft Windows Server 2008 の Hyper-V、HP-UX の HP Integrity Virtual Machines などがある。 IBMのPOWER5以降のサーバなどのシステムでは、ハイパーバイザーがオプションではなく、標準のファームウェアとして実装されている。 VMモニター上で直接動作するよう再設計されたアプリケーションもある。 最近ではかつてOSが占めていた位置を仮想化ソフトウェアが占めるようになってきており、ハードウェアリソース（プロセッサ、メモリ、周辺機器）の管理機能、スケジューリング機能、システム管理者のためのインタフェースなどを提供している。