わかるUNIXの歴史第 1 回 / 系譜の腑分け

第0回の宿題 ── 「Linux は MINIX の子か?」に、はっきり答える

二本の木を、混同しない 「Linux は MINIX から来て、MINIX は BSD から…」── この言い方には、まったく別の二つの木が混ざっている。コードの血統と、思想の再実装。この二本を描き分けると、あの有名な論争まで一気に見通せる。

必要な道具:第0回(自己ホスティングの輪) 種明かし:遺伝子 ≠ 思想

第0回で、鶏と卵の輪を「何が何をコンパイルしたか」でさかのぼりました。でもUNIXの歴史にはもう一本、まったく別の系図があります ── 誰の“ソースコード”を受け継いだかという血統です。初学者が必ずやる誤解「Linux は MINIX の子」「MINIX は BSD の子」は、この血統の木と、思想だけを受け継ぐ再実装の木を、一本に混ぜてしまうことから起きます。今回は二本の木をていねいに描き分け、最後に Tanenbaum–Torvalds 論争を、その二本の木で読み解きます。

01「受け継ぐ」には、二種類ある

ソフトが別のソフトから何かを「受け継ぐ」とき、受け継ぐ中身は大きく二つに分かれます。

今回の急所 ── 遺伝子か、思想か

① コードの血統(遺伝子)実際のソースコードの行を受け継ぐ。親のコードをコピーし、改変して育てる。だから著作権・ライセンスが付いて回る。
② 思想の再実装(設計・API):コードは1行ももらわず、「どう振る舞うか(システムコール・設計思想)」だけを真似て、白紙から書き直す。互換はあっても、遺伝子は無関係。

この二つは直交します。あるソフトが別のソフトと「そっくりに振る舞う」からといって、コードを受け継いでいるとは限らない。逆に、見た目が違っても中身のコードは親ゆずり、ということもある。UNIX一族は、この二本の木がからみ合って森になっています。

02木その一 ── 血統の木(コードが流れる)

まず実コードが流れる本流。1969年、ベル研の AT&T UNIX が源です(その手前の Multics は“反面教師”としての思想的影響で、コードは受け継いでいません ── これは番外編で)。AT&T UNIX のソースコードは、ライセンスされて各所へ渡り、改変されて子孫を残します。

血統の本流(実コードの継承)

AT&T UNIX(1969) → 二つの大きな枝:

枝A:バークレー系(BSD)

大学(UCバークレーCSRG)がAT&Tのソースライセンスを得て改変 → BSD(1978〜)→ 386BSD(1992) → NetBSD / FreeBSD(1993)、のちに OpenBSD。

枝B:AT&T商用系

System III → System V(1983) → 各社の商用UNIX(Solaris など)。

この木が「本当にコードを受け継いでいる」ことの、いちばん強い証拠は ── 裁判になったことです。1992年、AT&T(USL)が「BSDに我々のUNIXコードが入っている」とバークレーを提訴(USL v. BSDi)。1994年の和解で、BSDの18,000ファイル中、削除は3・修正は70だけと判明しました。逆に言えば、コードの出どころを1行単位で法廷が追えるほど、この木には実物のコードが流れているのです。

つなぐ声 ── なぜ NetBSD が Linux の親になれないか 第0回で「NetBSD は Linux(1991) より後(1993)・別の枝」と言いました。血統の木で見ると一目瞭然です。NetBSD は血統の木(BSD側)の若い葉で、Linux は次に見る再実装の木の葉。木が違ううえに、NetBSD のほうが後発。時間的にも系統的にも、親子になりようがありません。

03木その二 ── 再実装の木(思想だけが流れる)

もう一本は、コードを1行も受け継がない木です。「UNIXのように振る舞うが、中身は白紙から書いた」もの ── Unix風(Unix-like)と呼ばれる一族。

再実装の木(思想・APIだけの継承)

MINIX(1987, Tanenbaum):教育用に、UNIX V7 と互換に振る舞うOSを白紙から記述。AT&Tのコードは入れない(授業で配れるように)。

GNU(1983, Stallman):“GNU's Not Unix”。UNIXのユーザーランド(gccbash など)を、自由に使えるよう白紙から作り直す。

Linux(1991, Torvalds):カーネルを白紙から記述。MINIX の上で開発し影響も受けたが、MINIX のコードは受け継いでいない。

「白紙から書く」は例外的な離れ業に聞こえますが、そうではありません。のちに Tanenbaum 自身が挙げたように、OSをゼロから書いた人は歴史上たくさんいます ── 自分(MINIX)、Thompson(UNIX)、Holt(Tunis)、Comer(Xinu)、Williams(Coherent)…。再実装は、UNIX文化の“ふつうの営み”なのです。

04二本の木を、一枚に重ねて見る

では二本を同じ絵に置いてみましょう。下の図は、横軸が年、上半分が血統の木(実線=コードが流れる)、下半分が再実装の木(点線=思想だけ)です。ボタンで木を切り替えて、Linux・MINIX が点線の側に、NetBSD・FreeBSD が実線の側にぶら下がっていることを確かめてください。

図1:UNIX一族の二本の木。実線=実コードの継承(血統)、点線=思想・APIだけの継承(再実装)。Multics は思想的な源(コードは流れない)
実線=コードが流れる(血統) 点線=思想・APIだけ(再実装)
種明かし ── だから「Linux は MINIX の子」は不正確

Linux は MINIX の点線の先にいます。つまり思想(Unixらしさ)は受け継いだが、コード(遺伝子)は受け継いでいない。第0回で見た「MINIX の上で開発した(産室を借りた)」ことと、「MINIX の子ではない(血縁は無い)」ことは、両立します。産室と血統は別の話だからです。

◇ ◇ ◇

05有名な論争を、二本の木で読む

1992年1月29日、Tanenbaum が comp.os.minix に「LINUX is obsolete(Linuxは時代遅れ)」と投稿し、有名な論争が始まりました。ここで大事なのは ── これはコードの盗用をめぐる争いでは、まったくないということです。争点は設計思想でした。

1992年の論争の“本当の争点”

Tanenbaum:カーネルは小さく分割すべき(マイクロカーネル)。Linux のようなモノリシック(全部入り)は「1970年代への逆戻り」。しかも386に密結合で、将来性がない。

Torvalds:モノリシックは実用上まっとうな設計判断だ。「linux は minix より(APIの意味で)ポータブルだ」。── のちに Linux は ARM・POWER・SPARC など多数へ移植され、Tanenbaum の「386は廃れる」予測は外れました。

つまり二人は「どう作るのが良い設計か」を議論していたのであって、「誰のコードか」を争っていたわけではありません。下の図で、論争の“本当の中身”=二つのカーネル設計を切り替えて見てください。

図2:1992年論争の争点。マイクロカーネル(MINIX流:小さな核+部品はユーザ空間)と、モノリシック(Linux流:全部を核に)。争点は設計であって、コードの血統ではない
つなぐ声 ── では「Linux はコピーだ」説は? ずっと後の2004年、ある団体が「Linux は MINIX から違法にコピーされた」という本(Samizdat)を出しました。結果は完全な否定です。依頼を受けた技術者が MINIX と Linux 0.01 のソースを照合してもコピーの証拠はゼロ。そして誰よりも強く反論したのが ── MINIX の作者 Tanenbaum 本人でした。ライバルの作者が「Linus が自分で書いた。コピーではない」と擁護した。これ以上ない、「再実装の木にはコードが流れていない」証言です。

06二本の木は、こずえで葉を交換する

根は別々の二本の木ですが、てっぺん(こずえ)では葉をやりとりします。ここが面白いところ。

根は別、こずえで交わる

GNU + Linux:再実装の木の二枚の葉(GNUのユーザーランド+Linuxのカーネル)が合体して、私たちが日常「Linux」と呼ぶOSになる(だから “GNU/Linux” とも)。

MINIX 3 ← NetBSD:後年の MINIX 3 は、血統の木側の NetBSD のユーザーランドを取り込みました。第0回で触れた「矢印は逆・ずっと後」の正体がこれ。再実装の木が、血統の木から葉を借りたのです。

だから「二本の木」は、根では厳密に分かれているのに、こずえでは互いの葉を貸し借りする。この根は別・こずえで交わる像を持てば、UNIX一族の“ごちゃっとした森”がすっきり見えます。

正直な線 ── 木は固定でも純粋でもない

二本の木は、話を整理するための模型です。現実はもっと連続的です。(1) 血統の木も“純血”ではない ── BSD は初期に AT&T コードを含み、裁判を経て徐々に除去して 4.4BSD-Lite で“実質フリー”になりました。血統は抜いたり足したりされます。(2) 「思想の継承」も程度問題で、POSIX のようにわざと互換をとる標準もあります(番外編で)。(3) Multics→UNIX を「思想」に入れましたが、これは影響であって、はっきりした継承関係ではありません。

要は、「コードが流れたか(遺伝子)」と「振る舞いが似ているか(思想)」を分けて問うという視点が本体で、木の形そのものは目安だと思ってください。

練習問題(今回の二本の木で解けます)
  1. 「コードの血統」と「思想の再実装」の違いを一文で。
    答えを見る
    血統は実際のソースコードの行を受け継ぐこと(ライセンスが付く)、再実装は振る舞い・設計だけ真似てコードは白紙から書くこと(遺伝子は無関係)。
  2. NetBSD が Linux の親になれない理由を、二本の木で説明せよ。
    答えを見る
    NetBSD は血統の木(BSD側)の葉、Linux は再実装の木の葉で、そもそも別の木。しかも NetBSD(1993) は Linux(1991) より後発。木も時代も噛み合わない。
  3. 1992年の Tanenbaum–Torvalds 論争の争点は何だったか。「コード」という語を使わずに答えよ。
    答えを見る
    カーネルの設計思想。マイクロカーネル(分割)か、モノリシック(全部入り)か、そして移植性。設計の良し悪しの議論であって、盗用の争いではない。
  4. 「Linux は MINIX の上で開発された」と「Linux は MINIX の子ではない」は、なぜ両立するのか。
    答えを見る
    前者は開発環境(産室)を借りた話、後者はコードの血統の話で、別の軸だから。産室を借りてもコードを受け継がなければ血縁は生じない。

まとめ遺伝子と思想は、別の木に生えている

UNIX一族には二本の木がある。血統の木は実コードが流れる本流で、AT&T UNIX → BSD → NetBSD/FreeBSD、および → System V。コードの出どころは、USL v. BSDi 裁判が1行単位で追えたほど実在する。もう一本の再実装の木は、思想・APIだけを受け継ぎコードは白紙から書く ── MINIX・GNU・Linux。両者は直交し、「似て振る舞う」ことと「コードを継ぐ」ことは別問題だ。

だから「Linux は MINIX の子」は不正確 ── Linux は MINIX の点線(思想)の先にいて、遺伝子は継いでいない。1992年の論争も、二本の木で読めば設計(マイクロ vs モノリシック)の議論であって盗用の争いではなく、2004年の「コピー説」は、MINIX の作者本人にまで否定された。根は別々でも、GNU⊕Linux や MINIX 3←NetBSD のように、こずえでは葉を交換する。── 遺伝子か、思想か。この一問を分けて問うのが、系譜を読む鍵だ。

この文書は「わかるUNIXの歴史」シリーズ第1回です。史実:AT&T UNIX(1969, ベル研)のソースコードはライセンスを通じて継承され、UCバークレーCSRGはソースライセンスの下で BSD 系を派生させた。USL v. BSDi(1992提訴・1994和解)では、BSD 18,000ファイル中、削除3・修正70に留まり、4.4BSD-Lite が proprietary UNIX コードを含まない版として公開された。System V は AT&T の商用系(1983)。MINIX(1987, Tanenbaum)・GNU(1983, Stallman)・Linux(1991, Torvalds)はいずれも AT&T UNIX のコードを継承しない“Unix風”の独立実装。Tanenbaum–Torvalds 論争は1992年1月29日の comp.os.minix 投稿「LINUX is obsolete」に始まり、争点はマイクロカーネル対モノリシックおよび移植性であって、コード盗用ではない。2004年の Ken Brown / Alexis de Tocqueville Institution による『Samizdat』のコピー主張は、MINIXとLinux 0.01のソース照合で否定され、Tanenbaum・Ritchie・Stallman らが反論した。Multics は UNIX への思想的影響であり、コード継承ではない。「二本の木」は理解のための模型で、血統・思想いずれの継承も現実には程度差がある。 ── 印刷する場合はブラウザの「印刷」から「PDF に保存」を(印刷版では図の操作と解答は静止/非表示になります)。

印刷 / PDF 化:⌘+P(Windows は Ctrl+P)。画面では図1のボタンで二本の木を切り替え、図2で論争の争点(カーネル設計)を切り替えられます。「答えを見る」で解答が開きます。