7.1 2005 年林納斯因 BitKeeper 撤資而花兩週寫出 Git:分散式版本控制的極致美學#
前情:核心開發的「版本控管之痛」#
1991–2002 年,Linux 核心協作的方式是「tarball + patch 郵件」——需要的人自己合併,混亂可想而知。2002 年,Linus 決定採用BitKeeper——BitMover 公司的分散式版本控制工具,並以免費授權作為交換。
問題的本質在於:Core developer(即 Linus 本人)需要「分散式」的工作方式:他有數十個「 lieutenant」分居全球自維護分支,而當時流行(CVS/SVN)都是集中式的單一想像。BitKeeper 的分散式模式恰好合適。
導火線:2005 年 4 月的撤資#
免費授權並非無條件:BitMover 要求使用者不得反工程、不得開發競爭性工具。2005 年 4 月,Samba 開發者 Andrew Tridgell 等人對 BitKeeper 的協議做了逆向分析並另寫了一個能互通的工具;BitMover 認定此舉違反授權契約。
結果:BitMover 撤回了 Linux 社群的免費使用權。數千開發者的核心工程一夕之間失去基礎設施——這正是 Linus 日後描述的「當工具被單一公司掌握時,社群毫無主權」的教訓。
十天寫出 Git,與三條設計哲學#
Linus 於 2005 年 4 月初動手,約十天後就跑出了可用版本(他著名的自嘲:「我是個自大狂,所以我用自己命名專案——先 Linux,後 git」——git 在英國俚語中有討厭鬼之意)。三條核心目標:
- 速度:Linux 核心每次合併都要處理數萬個 patch,工具必須毫秒級;
- 簡單:把版本儲存建模成「快照 + DAG(有向無環圖)」——commit 永遠不可改,歷史就是一條資料結構,組合(merge)成為一階操作;
- 完全分散:每個 clone 都是一個完整倉庫,離線可commit、歷史可查——沒有中心伺服器的單點。
內容定址的精妙#
Git 的底層設計借鑑了檔案系統的先驅(以及與 IPFS 這類系統共享同一思想):
hashCode = SHA-1(content)
commit / tree / blob 均為 immutable object
branch = 指向某一 commit 的可移動指標
意義:資料的完整性由密碼學保證(內容一旦被改,雜湊不匹配),歷史天然并行(各分支自動是 DAG 節點)。這是 Linus 將「資料結構即真相」的設計哲學推演到版本控制。
影響:開源的協作基礎設施被重寫#
Git 的普及速度快得驚人:
- 2005–2008 年:Git 迅速擴散,libgit2、各種前端與自建伺服器層出不窮;
- 2008 年:GitHub 上線,Git 的「社交化」將開源開發帶入新紀元(下一節);
- 版本控制的文化意義:Git 讓「Fork → Branch → Pull Request → Merge」成為全球標準作業——版本控制從開發者的內部工具,變成協作文明的通用語言;
- 分散式的思維外溢:Git 的內容定址與快照思想,也影響了資料管理、科學重現性(如 datapackage)、乃至法律文件的版本治理。
前因後果的因果鏈#
回顧這段歷史的機遇:
BitKeeper 免費授權 → Tridgell 等逆向協議 → 授權撤回
→ Linus 失去工具 → 2005 年十天寫出 Git
→ Git 有卓越的分散能力 → 2008 年 GitHub 應運而生
→ GitHub 讓「點 Fork 就能參與」的社交編程可行
→ 2020 年代成為全球最大的程式碼托管平台
一個版本控制工具之爭意外改變人類寫代码的歷史——「工具的意義在於打開哪一種社會組織的可能」。
小結#
Git 的誕生是開源史上的黑色幽默:一次授權糾紛,以十天工期,重寫了全球軟體協作的基礎設施。它證明了開源的一大特徵:一旦關鍵工具開放,生態的潛力可放大數個數量級。下一節,看 GitHub 如何把這個工具變成全世界最大的軟體社交平台。