1994 - Linux 1.0 與發行版(從玩具到系統)#
案件摘要#
1994 年 3 月 14 日,Linux 1.0 發布——約 176,250 行程式碼,支援 TCP/IP 網路、X Window System、SCSI。 同年 Slackware 1.0(1993.7)已先行、Red Hat(1994.10)隨後——「發行版」讓 Linux 從「核心+手工拼裝」變成可安裝的完整系統。
\[ \text{Linux 1.0(核心)} + \text{發行版(工具+安裝器)} = \text{可用的作業系統}. \]
前因 -- 為什麼會有這個案子#
- 1.0 的門檻:0.01–0.99 期間經過 2 年的社群演化,1991 年還沒有網路的 0.01,到 1.0 已有完整 TCP/IP——網路支援是「玩具→系統」的分水嶺。
- 彌補的缺陷:1992–93 年裝 Linux 要自己湊 GNU 工具、自己 mount 磁碟、自己編譯——安裝體驗極差。發行版把「核心+工具+安裝器+套件」打包。
- Red Hat 的 RPM(1995):Red Hat Package Manager——二進位套件 + 依賴聲明,使用者不用再自己編譯原始碼。
線索與推理 -- 1.0 版的技術面貌(1994)#
| 技術 | 1.0 版狀態 | 版本與年份脈絡 |
|---|---|---|
| 網路 | TCP/IP、SLIP、PPP | 0.96 版(1992.7)首次加入初步 TCP/IP |
| 檔案系統 | Minix FS、ext FS、Xia FS | ext(1992,Remy Card)突破 14 字元檔名 |
| 行程 | fork/exec、訊號、管線 | 與 0.01 相比完備 |
| 圖形 | X11R5 支援 | 透過 XFree86(1992) |
| 程式碼量 | 176,250 行 | 0.01 的 17 倍——網路協作的兩年成果 |
C 範例:1.0 版的 ext 檔案系統突破#
/* ext (1992):突破 Minix FS 的 14 字元檔名與 64MB 檔案上限 */
struct ext_dir_entry {
__u32 inode; /* 檔案的 inode 號 */
__u16 rec_len; /* 目錄項長度 */
__u8 name_len; /* 檔名長度(最長 255) */
char name[EXT_NAME_LEN]; /* 檔名本體 */
};
Shell 範例:發行版的安裝革命#
# 1992 年(無發行版):自己拼裝
$ fdisk /dev/hda
$ mke2fs /dev/hda1
$ mount /dev/hda1 /mnt
$ # 手動解壓 GNU 工具、手動設定 lilo...
# 1995 年(Red Hat + RPM):一個指令
$ rpm -ivh gcc-2.7.2-1.i386.rpm # 安裝二進位套件
$ rpm -q --requires gcc # 查依賴聲明
Python 範例:RPM 依賴聲明的模型#
# RPM (1995):套件帶著依賴聲明——安裝器可檢查
rpm_gcc = {
"name": "gcc", "version": "2.7.2",
"requires": ["glibc >= 2.0", "binutils >= 2.6"],
}
def can_install(pkg, installed):
return all(any(dep_name in p for p in installed)
for dep_name in [r.split()[0] for r in pkg["requires"]])
結案 -- 後果與影響#
- RPM → YUM(2003)→ DNF(2014):依賴解決從「聲明」進化到「自動求解」。
- Debian(1993.8)+ dpkg/APT(1998):另一支發行版傳統(見
../UNIX/1993-發行版與FreeBSD誕生.md)。 - 1.2(1995):加入 Alpha、SPARC 平台支援——Linux 第一次跨出 x86(可移植性的勝利)。
- 歷史教訓:核心與發行版是兩件事——核心要自由,發行版要好用。
關鍵人物與文獻#
- L. Torvalds:Linux 1.0 (1994)。
- R. Card:ext 檔案系統 (1992)。
- M. Ewing:RPM (1995, Red Hat)。
- 相關案件:
1991-Linux0.01誕生.md、1996-Linux2.0與SMP.md。