第2回の問い ── なぜ Linux が使える gcc・bash が、あらかじめ存在したのか
gcc・bash で立ち上がりました。ではなぜ、その自由な道具が Torvalds の手元にすでにあったのか。Stallman が1980年代を丸ごと使って、自由なツールチェーンを作り続けていたからです。道具が自由でなければ ── 種を、自分で撒けない。
第2回で、Linux は MINIX 上の gcc で生まれ、GNU の道具(gcc・bash)と合体して1つの OS になった、と見ました。ここで自然な疑問 ── なぜ1991年の時点で、自由に使える C コンパイラやシェルが、ちょうど揃っていたのか? 偶然ではありません。Richard Stallman が1983年から、Unix を白紙から作り直す「GNU プロジェクト」で、自由なツールチェーンを黙々と積み上げていたからです。今回は、その動機 ── なぜ自由でなければならなかったか ── を、本編の鶏と卵とつなげて読みます。
1983年9月27日、Stallman は「Unix 互換の、しかし完全に自由な OS を作る」と宣言します。名前は GNU ── “GNU's Not Unix!”(GNU は Unix にあらず)という再帰的頭字語。設計は Unix に倣うが、コードは白紙から(第1回の再実装の木そのもの)。1985年の GNU 宣言で、その哲学 ── ソフトは使い・調べ・改変し・再配布する自由を持つべきだ ── を掲げました。
OS を白紙から作るなら、まず何が要るか ── 道具(ツールチェーン)です。コンパイラが無ければ、何も書けない。だから GNU は、エディタ Emacs(1984頃)から始め、GCC(1987, 第3回)、そして bash・ls・grep・make・ld といった Unix ユーティリティ群を、次々に自由なソフトとして作りました。1987年ごろには、アセンブラ・ほぼ完成した GCC・Emacs・各種ユーティリティが揃っていた。
本編の合言葉「最初の卵は、手で彫った」。でも誰が彫れるのか。第0回の輪を回す道具(gcc)や、第9回の種を用意する自由が、特定の会社に握られていたら? あなたのソフトの起源は、他人の許可と料金に依存します。GNU がやったのは ── 鶏と卵の連鎖を、誰でも自由に回せるようにすること。輪を回す道具そのものを自由にした。だから1991年、一人の学生が、誰の許可もなく gcc で自分の OS を立ち上げられたのです。
1992年ごろには、GNU は OS のほぼ全部品を自由に揃えていました。エディタ、コンパイラ、シェル、ユーティリティ ── でも、一枚だけ欠けていた。心臓部のカーネルです。GNU 自身のカーネル GNU Hurd(1990〜、Mach マイクロカーネル上)は、なかなか完成に至らなかった。GNU システムは、あと一枚のピースで完成しない状態が続きます。下の図で、GNU の部品が埋まっていき、最後にカーネルの穴が残る様子を見てください。
1991年、Torvalds のカーネル(第2回)が登場し、1992年の v0.12 で GPLv2 になります。Linux は GNU プロジェクトの一部ではありません。でも gcc など GNU の道具で作られ、同じ GPL で公開された ── だから、GNU のユーザランド + Linux のカーネルで、初めて完全に自由な OS が動きました。これが “GNU/Linux” と呼ばれる所以です。第1回「二本の木は、こずえで葉を交換する」の、いちばん大きな実例。
GNU(再実装の木)はユーザランドを持ち、カーネルを欠いていた。Linux(同じ再実装の木の別の若葉)はカーネルだけを持っていた。二つが GPL の下で合わさって、一枚の完全な自由 OS になった。どちらも AT&T のコードを継がず、思想(自由・Unix互換)だけを共有していた ── だから摩擦なく噛み合ったのです。
本編は「鶏と卵の連鎖が、種から回り始める」話でした。GNU が足したのは、その連鎖に “誰でも” を書き込むこと。下の図で、輪を回す道具が独占か自由かで、誰がソフトを立ち上げられるかが変わることを見てください。
(1) 「GNU/Linux か Linux か」は長年の呼称論争です。Stallman らは GNU の貢献を反映して “GNU/Linux” を求め、慣用では単に “Linux” と呼ばれます。技術的な事実は「Linux カーネル+(多くの場合)GNU ユーザランド」で、本稿はどちらの立場も断定しません。(2) GNU の “free” は自由(freedom)であって無料(gratis)ではありません。「自由に使い・調べ・改変・再配布できる」の意です。
(3) GNU Hurd は「失敗」ではなく、今も開発が続くプロジェクトです。「カーネルが未完だった」は当時の状況の話。(4) 自由な Unix 系は GNU だけではありません ── BSD 系も(別のライセンスで)自由を提供しました(番外④)。(5) Torvalds 自身は自由の哲学より実用を重んじた面があり、GPL 採用(第2回)も実利的判断を含みます。「自由の思想」と「実用」は、歴史では絡み合っています。
第2回で Linux が gcc・bash で立ち上がれたのは偶然ではない。Stallman が1983年から GNU プロジェクト(“GNU's Not Unix”、Unix 互換だが白紙から・完全に自由)で、自由なツールチェーンを積み上げていたからだ。まず Emacs、次に GCC(1987)、そして bash・coreutils・make・ld…。OS を作るにはまず道具が要る ── その道具を、GNU は自由に用意した。
1992年ごろ GNU は部品をほぼ揃えたが、カーネルだけが欠けていた(GNU Hurd は未完)。そこへ Linux(同じ再実装の木の別の若葉)がはまり、GPL の下で GNU/Linux=完全に自由な OS が成立した(第1回「こずえで葉を交換」の最大の実例)。本編の鶏と卵に GNU が足したのは “誰でも” ── 輪を回す道具そのものを自由にしたから、一人の学生が誰の許可もなく OS を生めた。種は手で彫れる。ただし、彫る道具が自由であれば。
印刷 / PDF 化:⌘+P(Windows は Ctrl+P)。画面では図1のスライダーで GNU の部品が揃い最後にカーネルの穴に Linux がはまる様子を、図2のボタンで「独占/自由」で輪を回せる人が変わることを見られます。「答えを見る」で解答が開きます。