オペレーティングシステムの歴史
コントロール・データ・コーポレーション (CDC) は1960年代にバッチ処理用の SCOPE オペレーティングシステムを開発し、その後タイムシェアリング用の MACE オペレーティングシステムを開発。MACEは後の KRONOS のベースとなった。1970年代にはミネソタ大学と共同でKRONOSと後継のNOSオペレーティングシステムを開発した。NOSはバッチ処理とタイムシェアリングを同時にサポートしていた。多くの商用タイムシェアリングシステムと同様、そのインタフェースは黎明期のタイムシェアリングシステムであるDTSSのインタフェースを拡張したものだった。
1970年代後半、CDCはイリノイ大学と共同でプラズマディスプレイと長距離タイムシェアリング・ネットワークを採用した PLATO system を開発した。PLATOは当時としては極めて革新的で、TUTORというプログラミング言語の共有メモリモデルによってリアルタイム・チャットやマルチユーザー型のグラフィカルなゲームといったアプリケーションが可能となった。
最初期から商用コンピュータを製造していたUNIVACは、EXECという一連のOSを開発した。初期の他のメインフレーム用OSと同様、バッチ処理指向のOSで、磁気ドラムメモリ、磁気ディスク、カードリーダー、ラインプリンターなどを管理する。
マサチューセッツ工科大学の 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を除く)。しかし間もなく、他の手段でアプリケーションの互換性を確保する方式が主流となっていった。
元々、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が占めていた位置を仮想化ソフトウェアが占めるようになってきており、ハードウェアリソース(プロセッサ、メモリ、周辺機器)の管理機能、スケジューリング機能、システム管理者のためのインタフェースなどを提供している。
世界初の実用化されたOSといわれるのは、ゼネラルモーターズの研究部門が IBM 704 向けに1956年に開発した GM-NAA I/O である。他の多くの初期のIBMメインフレーム用OSも顧客が自ら開発した。
初期のオペレーティングシステムは非常に多彩で、ベンダーや顧客が特定のメインフレーム向けに様々なOSを生み出していた。同じベンダーであってもコマンド体系や操作手順、デバッグ用ファシリティなどが全く異なるOSを複数作っていた。一般に、メーカーが新たな機種を開発する度に新たなオペレーティングシステムも開発され、その度にアプリケーションを人力で修正し、再コンパイルし、評価し直していた。