1991 - Linux 0.01 誕生(一個學生的暑假)#
案件摘要#
1991 年 9 月 17 日,芬蘭赫爾辛基大學 21 歲學生 Linus Torvalds 把 Linux 0.01(約 10,264 行 C 與組語)上傳到 FTP 伺服器。 8 月 25 日他在 comp.os.minix 發出那封著名的信:
「我正在做一個(自由的)作業系統,只是嗜好……」
史上第一個靠網路協作、從零開始的自由 Unix 核心——今天全球伺服器、手機、超級電腦的基礎。
前因 -- 為什麼會有這個案子#
- MINIX 的限制:Torvalds 買了 MINIX(1987,見 UNIX 書)學習,但 Tanenbaum 不接受 patch、不許商用——彌補的缺陷:MINIX 不許成長。
- 386 PC 的硬體契機:Intel 80386 有保護模式與分頁——Torvalds 想學 386 的多工與虛擬記憶體,學硬體逼出了作業系統(與 1969 年 Thompson 玩遊戲逼出 Unix 如出一轍)。
- GNU 的拼圖:GCC、bash、glibc 已齊備,獨缺可用核心——Linux 補上最後一塊。
線索與推理 -- 0.01 版的技術面貌(1991)#
| 技術 | 0.01 版狀態 | 彌補的缺陷 |
|---|---|---|
| 行程 | 386 TSS 任務切換、無 fork 系統呼叫(用內部呼叫) | MINIX 訊息傳遞太慢 |
| 檔案系統 | Minix 檔案系統(14 字元檔名上限) | 沒有磁碟,一切從零 |
| 記憶體 | 386 分頁(4KB 頁) | 286 的分段無法彈性 |
| 網路 | 無 | 0.01 版完全沒有網路! |
| 授權 | 自訂(禁止商用)→ 1992.2 改為 GPL | BSD 式授權會讓修改不回饋 |
C 範例:Linux 0.01 的排班(極簡實證)#
/* kernel/sched.c (0.01):時間片最大的先跑 */
void schedule(void) {
int i, next = 0, c = -1;
for (i = 0; i < NR_TASKS; i++)
if (task[i] && task[i]->state == TASK_RUNNING &&
task[i]->counter > c) {
c = task[i]->counter;
next = i;
}
switch_to(next);
}
Shell 範例:0.01 版的真實啟動#
# 1991 年 9 月:在 386 PC 上用軟碟啟動
$ make # 用 GCC 1.40 編譯
$ dd if=Image of=/dev/fd0 # 寫入軟碟
$ # 重開機後:
Keyboard driver ok
Memory: 4032k/4096k available
Linux version 0.01
結案 -- 後果與影響#
- 1991.11:0.10 版;1992.1:0.12 版改用 GPL——copyleft 讓核心以最快速度演化。
- 1992 年 Tanenbaum–Torvalds 辯論:微核心理論 vs 巨核心務實——務實贏了市場。
- 網路協作模式:郵件列表 + patch——後來演進為 Git(2005)。
- 歷史教訓:一人專案 + 網路協作 + copyleft = 史上最快的軟體演化機器。
關鍵人物與文獻#
- L. Torvalds:Linux 0.01 (1991);《Just for Fun》(2001)。
- A. S. Tanenbaum:1992 年辯論。
- 相關案件:
../UNIX/1991-Linux誕生.md、../UNIX/1987-MINIX微核心.md。