跳轉到

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);
}
(0.01 版核心僅 10,264 行——一個學生一個暑假可以讀完。)

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。