わかるUNIXの歴史 / 番外編 ⑤道具が自由でなければ、種は撒けない

第2回の問い ── なぜ Linux が使える gcc・bash が、あらかじめ存在したのか

なぜGNUだったのか ── 自由なツールチェーン 第2回で、最初の Linux は GNU の gccbash で立ち上がりました。ではなぜ、その自由な道具が Torvalds の手元にすでにあったのか。Stallman が1980年代を丸ごと使って、自由なツールチェーンを作り続けていたからです。道具が自由でなければ ── 種を、自分で撒けない。

前提:第2回(Linuxの産声)・第3回(gcc) 種明かし:輪を回す道具そのものが、自由であること

第2回で、Linux は MINIX 上の gcc で生まれ、GNU の道具(gccbash)と合体して1つの OS になった、と見ました。ここで自然な疑問 ── なぜ1991年の時点で、自由に使える C コンパイラやシェルが、ちょうど揃っていたのか? 偶然ではありません。Richard Stallman が1983年から、Unix を白紙から作り直す「GNU プロジェクト」で、自由なツールチェーンを黙々と積み上げていたからです。今回は、その動機 ── なぜ自由でなければならなかったか ── を、本編の鶏と卵とつなげて読みます。

011983年の宣言 ── GNU's Not Unix

1983年9月27日、Stallman は「Unix 互換の、しかし完全に自由な OS を作る」と宣言します。名前は GNU ── “GNU's Not Unix!”(GNU は Unix にあらず)という再帰的頭字語。設計は Unix に倣うが、コードは白紙から(第1回の再実装の木そのもの)。1985年の GNU 宣言で、その哲学 ── ソフトは使い・調べ・改変し・再配布する自由を持つべきだ ── を掲げました。

// 1983-09-27, Stallman の最初のアナウンス(要旨) "Free Unix!" I am going to write a complete Unix-compatible software system called GNU (for Gnu's Not Unix), and give it away free ... "free" は無料ではなく「自由」の意

02なぜ、まず「道具」から作ったのか

OS を白紙から作るなら、まず何が要るか ── 道具(ツールチェーン)です。コンパイラが無ければ、何も書けない。だから GNU は、エディタ Emacs(1984頃)から始め、GCC(1987, 第3回)、そして bashlsgrepmakeld といった Unix ユーティリティ群を、次々に自由なソフトとして作りました。1987年ごろには、アセンブラ・ほぼ完成した GCC・Emacs・各種ユーティリティが揃っていた。

今回の急所 ── 道具が自由でなければ、種を自分で撒けない

本編の合言葉「最初の卵は、手で彫った」。でも誰が彫れるのか。第0回の輪を回す道具(gcc)や、第9回の種を用意する自由が、特定の会社に握られていたら? あなたのソフトの起源は、他人の許可と料金に依存します。GNU がやったのは ── 鶏と卵の連鎖を、誰でも自由に回せるようにすること。輪を回す道具そのものを自由にした。だから1991年、一人の学生が、誰の許可もなく gcc で自分の OS を立ち上げられたのです。

◇ ◇ ◇

03欠けていた、最後の一枚 ── カーネル

1992年ごろには、GNU は OS のほぼ全部品を自由に揃えていました。エディタ、コンパイラ、シェル、ユーティリティ ── でも、一枚だけ欠けていた。心臓部のカーネルです。GNU 自身のカーネル GNU Hurd(1990〜、Mach マイクロカーネル上)は、なかなか完成に至らなかった。GNU システムは、あと一枚のピースで完成しない状態が続きます。下の図で、GNU の部品が埋まっていき、最後にカーネルの穴が残る様子を見てください。

図1:GNU システムのジグソー。Emacs→GCC→bash…と自由な部品が埋まるが、最後の「カーネル」の一枚が空いたまま。そこへ、別の木の若葉 Linux がはまる

04Linux が、その穴を埋めた ── GNU/Linux

1991年、Torvalds のカーネル(第2回)が登場し、1992年の v0.12GPLv2 になります。Linux は GNU プロジェクトの一部ではありません。でも gcc など GNU の道具で作られ、同じ GPL で公開された ── だから、GNU のユーザランド + Linux のカーネルで、初めて完全に自由な OS が動きました。これが “GNU/Linux” と呼ばれる所以です。第1回「二本の木は、こずえで葉を交換する」の、いちばん大きな実例。

二つの木の若葉が、合わさる(第1回の回収)

GNU(再実装の木)はユーザランドを持ち、カーネルを欠いていた。Linux(同じ再実装の木の別の若葉)はカーネルだけを持っていた。二つが GPL の下で合わさって、一枚の完全な自由 OS になった。どちらも AT&T のコードを継がず、思想(自由・Unix互換)だけを共有していた ── だから摩擦なく噛み合ったのです。

05種明かし ── 自由は、鶏と卵の“誰でも”を保証する

本編は「鶏と卵の連鎖が、種から回り始める」話でした。GNU が足したのは、その連鎖に “誰でも” を書き込むこと。下の図で、輪を回す道具が独占か自由かで、誰がソフトを立ち上げられるかが変わることを見てください。

図2:輪を回す権利。ツールチェーンが独占なら、輪を回す(ソフトを作る)には門番の許可が要る。自由なら、誰でも回せる ── だから一人の学生が Linux を生めた
正直な線 ── 呼び名も、動機も、ていねいに

(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回)も実利的判断を含みます。「自由の思想」と「実用」は、歴史では絡み合っています。

練習問題(今回の話だけで解けます)
  1. なぜ1991年に、Linux が使える自由な gcc・bash が既に存在したのか。
    答えを見る
    Stallman が1983年からの GNU プロジェクトで、自由なツールチェーン(gcc・bash・各種ユーティリティ)を積み上げていたから。Torvalds はそれを使って立ち上げられた。
  2. GNU が「まず道具から」作ったのはなぜか。
    答えを見る
    OS を白紙から作るには、まずコンパイラ等の道具(ツールチェーン)が要るから。道具が無ければ何も書けない。
  3. 1992年ごろの GNU に欠けていた一枚は何か。それを何が埋めたか。
    答えを見る
    カーネル(GNU Hurd が未完だった)。Linux カーネルが埋め、GNU ユーザランド+Linux=GNU/Linux として完全に自由な OS が動いた。
  4. 「道具が自由であること」は、本編の鶏と卵に何を足すか。
    答えを見る
    連鎖に「“誰でも”回せる」を足す。輪を回す道具が独占なら起源は他人の許可に依存するが、自由なら誰でもソフトを立ち上げられる。GNU はそれを保証した。

まとめ道具を自由にした人が、いたから

第2回で Linux が gccbash で立ち上がれたのは偶然ではない。Stallman が1983年から GNU プロジェクト(“GNU's Not Unix”、Unix 互換だが白紙から・完全に自由)で、自由なツールチェーンを積み上げていたからだ。まず Emacs、次に GCC(1987)、そして bash・coreutils・makeld…。OS を作るにはまず道具が要る ── その道具を、GNU は自由に用意した。

1992年ごろ GNU は部品をほぼ揃えたが、カーネルだけが欠けていた(GNU Hurd は未完)。そこへ Linux(同じ再実装の木の別の若葉)がはまり、GPL の下で GNU/Linux=完全に自由な OS が成立した(第1回「こずえで葉を交換」の最大の実例)。本編の鶏と卵に GNU が足したのは “誰でも” ── 輪を回す道具そのものを自由にしたから、一人の学生が誰の許可もなく OS を生めた。種は手で彫れる。ただし、彫る道具が自由であれば。

この文書は「わかるUNIXの歴史」番外編⑤です。史実:GNU プロジェクトは Richard Stallman が1983年9月27日に発表した、Unix 互換で完全に自由なオペレーティングシステムを作る計画。GNU は “GNU's Not Unix” の再帰的頭字語。1985年に GNU 宣言。1984年ごろから GNU Emacs、1987年に GCC(第3回)、以降 bash・coreutils・make・binutils(ld) などを自由ソフトとして開発。1990年から Mach マイクロカーネル上で GNU Hurd を開発したがカーネルは長く未完のままだった。Linus Torvalds の Linux カーネル(1991、v0.12/1992 で GPLv2)が GCC 等 GNU のツールで開発され、GNU のユーザランドと組み合わさって完全に自由な OS(GNU/Linux と呼ばれる)が成立した。Linux 自体は GNU プロジェクトの一部ではない。「free」は自由(freedom)の意で無料(gratis)ではない。「GNU/Linux」対「Linux」の呼称、Hurd の評価、GNU 以外の自由な Unix 系(BSD 等)については立場・見解が分かれる。 ── 印刷する場合はブラウザの「印刷」から「PDF に保存」を(印刷版では図の操作・解答は静止/非表示になります)。

印刷 / PDF 化:⌘+P(Windows は Ctrl+P)。画面では図1のスライダーで GNU の部品が揃い最後にカーネルの穴に Linux がはまる様子を、図2のボタンで「独占/自由」で輪を回せる人が変わることを見られます。「答えを見る」で解答が開きます。