UnixとLinuxの歴史を1969年から解説
Unixは1969年のBell Labsで始まり、AT&Tのライセンス、Berkeley BSD、1992年の訴訟を経てLinuxへ。なぜサーバーではBSDよりLinuxが選ばれたのかを解説します。
Unix と Linux の歴史の概要
Unix と Linux の歴史は、誰がソースコードを所有できるのかをめぐる長い論争です。Unix は 1969 年に Bell Labs で始まりました。Linux は 1991 年に Helsinki で始まり、Unix の元のコードは一切共有していません。両者の間で受け継がれたのは、設計と公開されたインターフェースです。そこには、ファイル、プロセス、パイプ、小さなプログラムを組み合わせるシェルが含まれます。Unix は 1970 年代に大学へ広まりました。1956 年の独占禁止法に関する和解により、AT&T (American Telephone and Telegraph) はソフトウェアを販売できなかったため、Bell Labs は代わりにソースコードのライセンスを安価に提供しました。Unix は AT&T 以外の誰にも所有されないまま、あらゆる場所で使われるようになりました。その後のライセンスをめぐる争いによって、最終的にサーバーラックへ導入される free Unix-like system が決まりました。
1969: 予備の PDP-7 と、定着したアイデア
Bell Labs は 1969 年に Multics プロジェクトから撤退しました。Multics(multiplexed information and computing service)は、MIT および General Electric と共同で開発していた大規模なタイムシェアリングシステムです。しかし Labs は、完成させるには規模が大きすぎると判断しました。Ken Thompson は気に入ったアイデアだけを残し、それ以外を捨てて、払い下げの PDP-7 ミニコンピューター上に小規模なタイムシェアリングシステムを書きました。Dennis Ritchie も加わりました。Unix という名前は、Multics をもじった冗談でした。
1970 年、このシステムは、Labs が特許部門のタイピスト向けに購入した PDP-11 へ移されました。オペレーティングシステムよりも、テキスト処理ツールのほうが予算を通しやすかったためです。そのマシンのコアメモリは 24 KB で、システムとユーザープログラムに分けて使われました。この予算上の偶然があったため、1971 年 11 月付けの最初の Unix マニュアルは、整形済み文書の集合になりました。また、そのため現在でも man 5 crontab と入力します。あのマニュアルのセクション番号が、現在のマニュアルのセクション番号になっています。
設計を定着させた変更は 2 つあります。1973 年の Version 3 では、Doug McIlroy が、プログラムを端から端まで接続できるようにすべきだと何年も主張していたことを受け、パイプが導入されました。Thompson は | 演算子を追加し、あるプログラムの出力を次のプログラムの入力にできるようにしました。その後、1973 年の Version 4 は C で書き直されました。移植性のある言語で書かれたオペレーティングシステムは、開発対象ではなかったハードウェアにも移植できます。これが、Unix が最初に動作したどのマシンよりも長く存続した理由です。
Unix が広まった理由: AT&T は販売を認められていませんでした
1956 年の同意判決により、AT&T に対する反トラスト訴訟が決着しました。AT&T は電話事業の独占を維持する代わりに、通信以外の事業には進出しないという制限を受け入れました。ソフトウェアもその対象でした。そのため、大学が Unix を求めても、Bell Labs は製品として販売できませんでした。Bell Labs は、サポートも保証も付けず、わずかな料金でソースコードの使用を許諾しました。
その影響は大きく、AT&T が意図したものではありませんでした。1975 年にリリースされた Sixth Edition Unix は、完全なソースコード付きで数百のコンピューターサイエンス学科に広まりました。University of New South Wales の John Lions は、そのカーネルソースに行ごとの解説を付けて印刷し、それを教材にしました。1 世代の学生が、実際のオペレーティングシステムを読むことで、その仕組みを学びました。
その後、ライセンスが変更されました。1979 年の Seventh Edition のライセンスでは、授業でソースコードを使用することが禁じられたため、Lions の解説はコピーのコピーとして出回りました。これが、全体の経緯を表しています。Unix は同時に、どこにでも存在し、自由に使えるものではありませんでした。そのため、誰かが行った改良はすべて、別の誰かが所有するプロプライエタリコードへの改良でもありました。
Berkeley: 実際に入力する Unix の構成要素
Ken Thompson は 1975 年から 1976 年の年度を University of California, Berkeley で過ごし、非常に活発な Unix グループを残しました。Berkeley の Computer Systems Research Group (CSRG) は、現地で加えた改良をテープでリリースし、そのテープが BSD、つまり Berkeley Software Distribution になりました。初期の作業の多くは Bill Joy が担当しました。1978 年には 1BSD、1979 年には vi エディターと C shell を収録した 2BSD をリリースしました。
C shell は !! と !$ の由来です。Bash はこの構文を継承しました。そのため、40 年以上たった現在でも、二重引用符内で感嘆符を入力する人は bash の履歴展開に驚かされることがあります。
DARPA (the US Defense Advanced Research Projects Agency) はその後、Berkeley に資金を提供し、新しいインターネットプロトコルを Unix に組み込ませました。1983 年 8 月にリリースされた 4.2BSD は、TCP/IP (transmission control protocol over internet protocol) と socket application programming interface を収録していました。現在でも、サーバー上のすべてのネットワークサービスは socket()、bind()、listen()、accept() をこの順序で呼び出します。これは、Berkeley が 1983 年にこれらの名前を選んだためです。
1 つの点が、その後の 10 年を決めました。BSD のテープは完全なシステムではありませんでした。AT&T の Unix に追加する一連のプログラムであり、合法的に実行するには有効な AT&T のソースライセンスが必要でした。Berkeley は数年をかけて、ファイル単位で AT&T の部分を独自のコードに置き換えました。その置き換えが本当に完了していたかどうかが、後に裁判で争われることになります。
1984年:分裂と、その後のUnix戦争
Bell Systemは1984年1月1日に分割され、それとともにAT&Tをソフトウェア事業から締め出していた同意判決もなくなりました。AT&TはUnixを製品として販売できるようになり、実際に販売しました。商用のソースライセンスは高額になったため、Unixは大学が学生に提供する安価なものではなくなりました。
ベンダーはすでにUnixを分岐させていました。各ワークステーション企業が自社ハードウェア向けに独自のUnixを出荷していたため、1980年代後半には、あるシステム向けに書かれたプログラムを別のシステムへ移植する必要がありました。業界は1988年に2つの標準化陣営へ分裂しました。一方はOpen Software Foundation、もう一方はUnix Internationalです。その後数年間、どのUnixが本物なのかをめぐって議論しながら、互換性のないシステムを出荷し続けました。
POSIX(portable operating system interface)は、この混乱から生まれました。IEEE 1003.1は1988年に公開され、Unix系システムが実装すべき内容を定めました。そこにはシステムコール、シェルの動作、標準ユーティリティ、Cライブラリのインターフェースが含まれます。これは見た目以上に重要です。標準は仕様であり、ライセンスの対象ではないためです。その3年後、ある学生がその文書に基づいてカーネルを書きました。
Minix と、それによって生じた空白
Andrew Tanenbaum は 1987 年、オペレーティングシステムの教科書に掲載する教材用システムとして Minix をリリースしました。Minix は小規模な Unix 系システムで、ソースコードは書籍に付属し、学生が実際に所有していた安価な PC で動作しました。Seventh Edition Unix と異なり、教室で合法的に読むことができました。
Minix は、書籍で説明できる規模にする必要があったため、意図的に小さく保たれました。Tanenbaum は、実運用システムにできるようなパッチも採用しませんでした。ライセンスも自由ではありませんでした。書籍を購入する必要があり、変更した Minix を再配布するかどうかを自由に決めることもできませんでした。そのため 1991 年までには、学生は動作する Unix 系カーネルを読めても、その上に長く維持できるものを構築することはできませんでした。
GNU にはカーネル以外のすべてがそろっていました
Richard Stallman は、完全に自由な Unix 系システムを目指して、1983 年 9 月に GNU プロジェクトを発表しました。1991 年までに GNU は、カーネルを取り巻く主要な部分のほとんどを開発していました。GCC コンパイラー、GNU C ライブラリ、バイナリユーティリティ、そして Brian Fox が 1989 年に作成したシェルであり、現在もサーバーがユーザーを起動する bash です。GNU カーネルの Hurd だけが、完成を先送りし続けていました。
GNU General Public License version 2 は、1991 年 6 月に公開されました。その規定は簡潔です。コードを使用・改変できます。ただし、その結果を配布する場合は、同じ条件でソースコードも配布する必要があります。この規定が、この物語の 2 つ先のセクションで重要な転換点になります。
1991年8月: comp.os.minix への投稿
1991年8月25日、ヘルシンキの学生が Usenet グループ comp.os.minix に次の投稿を行いました。
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones.Version 0.01 は1991年9月にリリースされました。Unix とも Minix ともコードを共有していませんでした。これは386向けの新しいカーネルで、Minix マシン上で開発され、POSIX インターフェースに準拠して記述され、すでに存在していた GNU ツールと組み合わせて使われました。Tanenbaum は1992年1月、モノリシックカーネルは時代遅れの設計だと Torvalds に伝えました。設計についての指摘には確かな根拠がありましたが、Torvalds が答えていたのは別の問いでした。学生が所有する安価な1台のコンピューターで、何が適切に動作するのかという問いです。
1992年2月、Version 0.12 は GPL の下で再ライセンスされました。Torvalds はその後、これが自分の最良の判断だったと述べています。初期の Linux ライセンスでは金銭のやり取りが禁止されていたため、その後に登場した CD ベンダーやサポート企業の活動が妨げられていたでしょう。GPL は商業利用を認める一方、配布した変更を同じ共有ツリーへ戻すことを義務付けました。
訴訟:1992 年 4 月から 1994 年 2 月まで
Berkeley は 1991 年 6 月に Networking Release 2 (Net/2) をリリースしました。これは、AT&T 由来のファイルを除いた、ほぼ完全な BSD システムでした。ただし、カーネルファイル 6 個が欠けていました。Bill と Lynne Jolitz はその代替実装を作成し、1992 年 3 月に 386BSD 0.0 を、続いて 1992 年 7 月 14 日に 386BSD 0.1 をリリースしました。Linux がまだ趣味のカーネルだった同じ時期に、386 向けの無料で完全かつ成熟した BSD が登場したのです。Berkeley Software Design, Inc. (BSDi) は、サポート付きの商用ビルド BSD/386 を販売し、電話番号 1-800-ITS-UNIX を広告に使用しました。
1992 年 4 月、当時 Unix を所有していた AT&T の子会社 Unix System Laboratories (USL) は、企業秘密と Unix の商標をめぐり、ニュージャージー州の連邦裁判所で BSDi を提訴しました。その後、訴状が変更され、University of California の Regents も被告に加わりました。University は 1993 年にカリフォルニア州で反訴し、AT&T が自社のライセンスで求められていた帰属表示なしに、Berkeley のコードを System V に組み込んで出荷したと主張しました。
法的な争点は 1993 年に崩れ始めました。Judge Dickinson Debevoise は USL による仮差し止め命令の申立てを退けました。AT&T が古い 32V コードを長年にわたり著作権表示なしで配布していたため、そのコードに対する USL の著作権主張はおそらく無効だと判断したのです。1993 年半ば、Novell は AT&T から USL を買収し、Novell の経営陣はこの争いを終わらせることを望みました。訴訟は 1994 年 2 月に和解しました。Berkeley の配布物に含まれるおよそ 18,000 個のファイルのうち、3 個が削除され、約 70 個に USL の著作権表示が追加されました。
Berkeley は 1994 年 6 月に 4.4BSD-Lite を出荷し、法的な問題のない状態になりました。1993 年に、争点となった Net/2 のコードを基盤として設立された FreeBSD と NetBSD は、新しい基盤上でシステムを再構築する必要があり、その作業には 1994 年の残りの大部分が費やされました。Linux 1.0 は、その再構築の最中である 1994 年 3 月にリリースされました。
Linux が BSD ではなくサーバーを担うようになった理由
訴訟が原因だという説明が一般的ですが、それだけではありません。1992 年 4 月から 1994 年 2 月までの間、製品に使う無償の Unix を選ぶ人は、AT&T の弁護士が提起した係争中の主張と、誰からも訴えられる心配のないフィンランドの学生によるカーネルを比較する必要がありました。これは、Web が登場し、最初の Linux ディストリビューションが公開された時期と一致します。Slackware は 1993 年 7 月、Debian は 1993 年 8 月に登場し、その後に Red Hat と SUSE が続きました。Red Hat はこの先行期間を商用標準へと発展させました。Red Hat Linux から CentOS、さらに Rocky と AlmaLinux へ至る経緯を見れば、1993 年に始まったディストリビューションが、現在も多くの業務用サーバーで何が動くかを決めている理由が分かります。
裁判以外にも、同じ程度に重要な要因が 4 つありました。
- ハードウェア。Linux は最初のコードから普及価格帯の 386 PC を対象にしていました。そして、そのハードウェアが安価になりました。BSD の中心は VAX とワークステーションであり、386 への移植は 2 人による外部の取り組みでした。
- ライセンス。GPL では、変更したカーネルを提供する企業に変更内容の公開を求めます。そのため、ベンダーの成果が 1 つのツリーへ戻されました。BSD ライセンスでは、企業が変更内容を非公開にできます。実際に、企業は変更内容を非公開にしました。
- 開発モデル。Torvalds は外部の開発者から送られたパッチを迅速に取り込み、継続的にリリースしました。386BSD のリリースは遅く、1993 年にはユーザー自身が 2 回フォークし、NetBSD と FreeBSD が生まれました。さらに 1995 年には OpenBSD もフォークしました。
- 勢い。開発者は、すでに他の開発者が集まっているシステムへ移ります。ドライバーも、最も多くのユーザーがいるシステム向けに開発されます。
技術的な問いについては、正確に評価する必要があります。1994 年の BSD は、より完成度の高いシステムでした。基盤に一貫性があり、開発の経緯が文書化され、ネットワークコードも Linux が追いつくまでに何年もかかる水準でした。1994 年に Linux が優れていたから選ばれたわけではありません。利用可能で、法的な制約がなく、すでに所有していたハードウェアで動作し、毎週のように改善されていたから選ばれたのです。
BSD が維持したものと、現在の運用場所
BSD は存続しました。失ったのは、標準的な選択肢としての地位です。そのことを示す最も明確な証拠は、皆さん自身のマシンにあります。OpenBSD プロジェクトは 1999 年に OpenSSH を開発し、現在出荷されているほぼすべての Linux システムで SSH サーバーとして使われています。そのため、両方の系統で 学ぶ価値のある SSH key の扱いは同じです。
Netflix は FreeBSD appliance から動画を配信しています。Juniper router の operating system である Junos は、内部で FreeBSD を使用しています。PlayStation の system software も FreeBSD に由来します。Apple の macOS と iOS には、kernel 内部および userland 全体に BSD code が組み込まれています。BSD が共有 server tree で主流の座を失う要因となった寛容な license により、BSD に言及しない多数の hardware に BSD code が組み込まれました。
現在選ぶのであれば、問題は歴史ではなく実用性です。Linux と FreeBSD を server として比較することは、ZFS、jails、ports tree、そして third party software がどの程度 Linux を前提としているかに集約されます。server としての FreeBSD 15は、博物館の展示物ではなく、現在も保守されているシステムです。また、Linux と Windows Server の比較は別の問題であり、答えは application stack によって異なります。
現在 VPS で使う 1969 年の設計
これらはどれも、利用者の大半が生まれる前から存在します。
- パイプ。
who | wc -lはログイン中のユーザー数を数えます。1973 年の Version 3 Unix で、あるプログラムの出力を別のプログラムの入力にできるようになったためです。 - マニュアルのセクション。
man 1 lsとman 5 crontabは、1971 年 11 月版のマニュアルで採用された番号体系を使っています。 - ファイルシステムの分割。
/usrが存在するのは、1971 年にその PDP-11 の root ディスクが満杯になり、開発者がファイルを 2 台目のディスクパックへ移したためです。その後、ディストリビューションではこの分割が元に戻されました。Ubuntu 24.04 または Debian 13 でls -ld /binを実行すると、usr/binへのシンボリックリンクが得られます。 - socket 呼び出し。Berkeley が 1983 年の 4.2BSD 向けに実装して以来、現在もすべてのネットワークデーモンが使用しています。
- POSIX。標準に準拠して書かれた
#!/bin/shスクリプトは、Linux、FreeBSD、macOS、Solaris のいずれでも変更せずに動作します。これらすべてが標準を実装しているためです。
この移行で受け継がれなかったものが 1 つあります。Linux が System V から受け継いだシェルスクリプトによるブートシーケンスは、現在ではほぼすべてのディストリビューションからなくなりました。そして、それを systemd に置き換えた根拠は、Unix 系システムのあるべき姿をめぐる最近の論争です。
仮想プライベートサーバーを借りてログインすると、24 KB のメモリを搭載し、特許部門にも対応する必要があったマシン向けに設計されたインターフェースへ入力することになります。このインターフェースが残ったのは、仕様が公開され、議論され、標準化され、その後、元のコードを見ることを許されなかった人々によってゼロから再実装されたためです。
FAQ
Linux にはオリジナルの Unix コードが含まれていますか?
いいえ。Linus Torvalds は 1991 年に、AT&T のソースコードではなく POSIX インターフェースを対象として、kernel をゼロから作成しました。Unix から受け継いだのは設計と公開インターフェースです。具体的には、ファイル、プロセス、パイプ、system call の名前などです。kernel 周辺の GNU tools も、1983 年からゼロから作成されました。この独立性があったため、BSD code をめぐる AT&T の訴訟は Linux にまったく影響しませんでした。
AT&T による BSD への訴訟はいつ起き、BSD を終わらせましたか?
Unix を所有していた AT&T の子会社 USL は、1992 年 4 月に BSDi を提訴し、その後 University of California も被告に加えました。1993 年、裁判官は予備的差止命令を退けました。古い 32V code に関する copyright の主張は、無効である可能性が高いと判断したためです。Novell は 1993 年半ばに USL を買収し、1994 年 2 月にこの訴訟を和解で終結させました。約 18,000 個のファイルのうち 3 個を削除し、約 70 個に新しい copyright 表示を追加する内容でした。BSD を終わらせたわけではありません。ただし、世界が無償の Unix を選んでいた 2 年間、BSD の導入は停滞しました。
Linux が BSD ではなくサーバーを席巻したのはなぜですか?
理由の 1 つは法的な確実性です。1992 年から 1993 年にかけて、Linux には訴訟がなく、BSD には訴訟がありました。そのほかの理由は、最初から 386 を対象としていたこと、GPL によって vendor の変更が 1 つの tree に取り込まれたこと、そして 386BSD が 3 方向に fork する中でも、contributor の関心を維持できるほど merge の進行が速かったことです。決定要因は技術的な優位性ではありません。1994 年時点では、BSD のほうが完成度の高い system でした。
FreeBSD は現在でも運用する価値がありますか?
はい。具体的な理由があります。base system に統合された ZFS、成熟した隔離モデルである jail、1 つの一貫した単位として開発される base system、そして正確さが維持されている documentation です。代償は互換性への対応です。third party の server software、container tooling、vendor support の多くは Linux を前提としているためです。古い系譜への忠誠心ではなく、storage と networking の利点がその代償に見合う場合に FreeBSD を選んでください。