計算機の歴史を、鶏と卵でさかのぼる読み物シリーズ

わかるUNIXの歴史

Linuxカーネルは、Linux上の gcc / clang でコンパイルする。では最初のLinuxは、何がコンパイルしたのか? この鶏と卵を、C言語とUNIXの歴史をさかのぼって、初代UNIX、そして“最初の1バイト”まで降りていく。すべてのソフトは、自分より前のソフトが作った ── その連鎖の、いちばん下に何があるか。

合言葉:鶏が先か卵が先か ── 最初の卵は、手で彫った。

本編11+最終1+番外6 = 全18話・完結 各話:日常語 → 事実 → 種明かし → 正直な線 動く図つき/印刷・PDF化対応
公開済みファイルを一括ダウンロード 下のボタンで、公開済みの回を1つの ZIP にまとめて保存できます(回が増えると対象も増えます)。
本編 ── 階段を、上から下へ降りていく
第 0 回動く図つき
鶏と卵 ── Linuxは、何がコンパイルしたのか

今のコンパイラは、過去の自分がコンパイルした(自己ホスティング)。ではループはいつ始まった? 最初のLinux(1991)は MINIX 上の gcc で生まれた。ここから階段を降りる全体像。gcc ← gcc ← gcc ← ?

第 1 回動く図つき
二本の木を、混同しない

「血統(コードの継承)」と「再実装(思想の継承)」は別の木。Linux は MINIX の子ではなく、産室を借りて育った。Tanenbaum–Torvalds 論争。遺伝子 ≠ 思想

第 2 回動く図つき
最初のLinux ── MINIX上のgccで生まれた

v0.01 は MINIX がないとコンパイルできなかった。Torvalds は gcc と bash を MINIX に移植。v0.11 で初めて Linux が Linux をコンパイルし、自立する。v0.01 → v0.11(自立)

第 3 回動く図つき
GCCは、何がコンパイルした?

Cコンパイラは C で書かれている。最初はマシンの既存 cc で1回だけ持ち上げ、以後は自分で自分を作る。stage1→stage2→stage3 の3段ブートストラップ。stage2 == stage3 で検算

第 4 回動く図つき
MINIXとACK ── 教育用Unixのコンパイラ

MINIX(1987) の純正コンパイラは Tanenbaum 製の ACK。EM という中間バイトコードを挟んで移植性を稼ぐ。後年 MINIX 3 は NetBSD 側へ寄っていく。前段 → EM → 後段

第 5 回動く図つき
Cコンパイラの誕生 ── 自分で自分を

Ritchie は B から C へ、コンパイラを少しずつ C で書き直し、ついに C コンパイラが自分自身をコンパイルできる地点まで“育て”た。自己ホスティングの原点。B → NB → C

第 6 回動く図つき
BとBCPL ── 中間コードという逃げ道

B は BCPL の子。BCPL は O-code、ACK は EM ── 「中間コード」を挟むと、機種が変わっても後段だけ書き直せばいい。移植とブートストラップの発明。BCPL → O-code → 機械

第 7 回動く図つき
最初のUnix ── アセンブリで書かれたOS

1969年、Thompson が PDP-7 のアセンブリで最初の Unix を書いた。C はまだ無い。カーネルもシェルもエディタも、機械語に近い言葉で。PDP-7 assembly

第 8 回動く図つき
アセンブラは、何が作った?

最初は別のマシン(GE-635/GECOS)のクロスアセンブラでアセンブルし、結果を紙テープに穴で刻み、物理的に PDP-7 へ運んだ。やがて自己ホスティングへ。別マシン → 紙テープ → PDP-7

第 9 回動く図つき
最初の1バイト ── 手で入れる

アセンブラも無い最初の最初。人間が命令表を見て機械語の数値を手で作り(ハンドアセンブル)、トグルスイッチで1語ずつ入れる。それがブートストラップローダ。手 → スイッチ → メモリ

第 10 回動く図つき
底 ── ハードウェアという本当の種

機械語を“意味”にするのは、論理ゲートで配線された命令デコーダ。それを設計したのも人間。ソフトの連鎖のいちばん下には、配線された物理がある。命令 → 論理ゲート → 物理

最終回
最終回動く図つき
鶏と卵の答え ── 種は手で彫られた

階段の底で分かるのは、鶏も卵も無から湧かなかったということ。人間の手が最初の種を彫り、配線された機械がそれを意味に変え、あとはソフトがソフトを作るループが回り続けた。bootstrap = 靴ひも

番外編(本編を前提に、脇道を深掘り)
信頼のブートストラップ ①動く図つき
Trusting Trust ── 種は信用できるか

Thompson の1984年チューリング賞講演。ソースを消してもコンパイラのバイナリに潜んで生き延びるトロイ。「手で彫った種」を、そもそも信用できるのかという究極の問い。source ≠ trust

信頼のブートストラップ ②動く図つき
Bootstrappable Builds ── 種を極小化する

Trusting Trust への現代の答え。GNU Mes / stage0 は、信用しなければならない“最初の種”を数百バイトの人間可読なバイナリまで小さくする試み。①と握手。seed → 全ツールチェーン

クロスコンパイル動く図つき
鶏なしで、卵を作る

新しいCPUには、まだ何も動いていない(鶏がいない)。別のマシンでそのCPU向けの卵を焼くのがクロスコンパイル。第8回の紙テープ運搬の、現代版。host ≠ target

二本の木の続き動く図つき
BSD訴訟・System V・POSIX

コードの血統をめぐる法廷闘争(AT&T vs BSD)と、System V、そして「Unixらしさ」を仕様で固定した POSIX。第1回「二本の木」の深掘り。遺伝子の所有権

なぜGNUだったのか動く図つき
自由なツールチェーンを持つために

Stallman が gcc・bash を書いた動機。ツールチェーンが自由でないと、種を自分で撒けない。Linux が gcc で立ち上がれたのは、この再実装があったから。free toolchain

Multics → Unix動く図つき
Unixは、何への反動だったか

系譜の最上流。巨大で野心的だった Multics から降りた Thompson と Ritchie が、小さく簡潔な Unix を作った。「小さいことは正しい」という設計思想の源流。大 → 小