Bitcoin Core 維護者角色演變史

作者:Juan Galt

來源:https://bitcoinmagazine.com/print/the-core-issue-the-role-and-history-of-bitcoin-core-maintainers

在最開始的時候,只有中本聰一個人,和一個強大的理念。中本聰最晚從 2007 年開始開發比特幣 1,並且根據我們所知,完全是一個人在開發,一直到 2008 年 10 月 31 日 —— 他發出比特幣白皮書 2 —— 的幾周以後,中本聰為這個項目帶來了第一個貢獻者,Hal Finney(哈爾·芬尼) 3

hal-finney

事後表明,Finney 對於比特幣最初的成功是極為關鍵的。根據最近才披露的郵件 4,中本聰的節點在挖出創世區塊之後,一連好幾天都無法收到 “入站連接”,因此 Finney 的節點成了其他用戶能夠連接的唯一節點。中本聰告訴在一封私人郵件中告訴 Finney:“你的節點收取了入站連接,是整個網絡得以撐過最初一兩天的主要因素。”

Finney 也是已知的第一個比特幣代碼審核人和貢獻者。在把軟件完全公開之前,中本聰把它分享給了 Finney 和少數幾個密碼朋克傳奇人物。甚至早在比特幣這個項目發佈第一個版本以前,Finney 就已經貢獻過代碼了 —— 這是 Ray Dillinger 披露的,他也收到了中本聰分享的還未公開的代碼。

Dillinger 的博客刊載了一份 Nathaniel Popper 對他的訪談 5。他在訪談中說:“那是我們開始討論會計代碼中的浮點數類型的時候,我知道了 Finney 也參與其中。Finney 當時正在審核交易的腳本編程語言,他的代碼、我的代碼,都跟會計代碼交互。“

這段描述跟我們已知 Bitcoin 項目在 Sourceforge 代碼平臺上的最古老的檔案,是大致對得上的 —— 中本聰在 2008 年 12 月 18 日將 Finney 添加到項目中。中本聰的這個決定,標誌著項目的 “維護者(Maintainer)” 級別的權限可能由其他人持有的第一種情形。Finney 可以取得、也很可能取得了 Sourceforge 平臺上 Bitcoin 項目的開發者身份,因此可以下載、修改和上傳新版本到這個項目。

Sourceforge

那麼,除了是一個代碼貢獻者、代碼審核人、節點運營者,Hal Finney 也是比特幣項目的一個維護者嗎?

“維護者” 的最嚴格的定義是,擁有一個軟件項目的主要開發分支的 “commit 權限”(或者說寫入權限)的人。對 Bitcoin 這樣的項目而言,貢獻者可以 “提交” 代碼到項目的開發分支,併發送 “PR(合併請求)”、讓這些代碼整合到主要分支,但是,這些更新只有通過維護者 6 的 “commit 權限”,才能 “合併” 到主分支 ……

根據這個定義,Finney 可以很恰當地稱為中本聰之後的第一位維護者。但是,成為 Bitcoin Core 的一位維護者,可以說僅僅擁有 commit 權限是不夠的;TA 在開發者社區中要有良好的聲望,並且同時也是勤奮的、有能力的貢獻者。

譯者注:粗略地說,中本聰在 Sourceforce 平臺上創建了 “Bitcoin” 項目,這是第一種比特幣節點客戶端;中本聰離開後,已有的代碼遷移到了 Github 平臺,項目名稱也改為 “Bitcoin Core”。從原文可知,作者並不強調這一分別,實際上把兩者當成同一個項目並一直用 “Bitcoin” 一詞來指代它,而不是專指前面那個項目(或者說前面那個時期)。因此,這裡使用 “Bitcoin Core”,只是為了表示後來對維護者的要求提高了。

Bitcoin 項目的維護者,有時候是項目的活躍開發者,對其他維護者來說知根知底、似乎很適合這個角色;但也有一些時候,是積極的代碼審核人,僅僅合併似乎達成了共識的代碼貢獻,並且拒絕合併沒有得到共識的代碼。

反過來,維護者在比特幣行業中變成了有地位的身份,也很容易因為犯錯而敗壞名聲。有時候,著名的維護者會被其他維護者認為已經腐化,其權限也因此被撤銷,比如 Gavin Andresen 7,他擔保騙子 Craig Wright 就是中本聰。也有時候,維護者會為了規避針對性的騷擾而辭去角色,比如 Gregory Maxwell 8

總的來說,貢獻者們期望 Bitcoin 項目的維護者是一位管工程的人,而不是搞政治的人。比如說,在 Github 網站的各 PR 的討論頁面,人們期望討論的是一次具體的代碼提及的技術和實現細節,而不是發起這次提交的人、他們的政治觀點、忠誠度。涉及共識並且有爭議、會引發激烈爭論的討論,通常會轉移到 bitcoin 郵件組和其它論壇,有關政治的話題也是如此。

重點是,在比特幣的歷史上,“維護者” 這個角色所具有的權力 —— 不管具體是哪一些 —— 可以說隨著這個項目從中本聰創始之日起逐漸成長就不斷萎縮。甚至出現了代碼已經合併到了主分支、卻又在後續審核中再次移除的例子 9 —— 表明維護者的決定也不是最終決定了。

在 Bitcoin 項目的歷史上,有時候維護者會被指責充當了攔路人(gate keepers)、拒絕合併社區的一部分人已經支持的更新到項目中 —— 通常有一部分原因是社區的另一部分人反對他們。這時候,維護者角色確實擁有一種難以量化的 “潮流塑造(taste making)” 權力 —— 判斷一項代碼提交有沒有得到共識。

排他性的決定合併(一些代碼)與否的權力,對開源開發的項目來說也許是絕對必要、無法避免的,因為如果任何人都能隨時合併任何代碼,那這個項目就無法被當作是安全的、穩定的。在一個敵對環境中,一個僅僅根據代碼的想法和價值來審核的精英體制,可以說就是我們能夠追求的最好模式了,任何其它選擇都是集權式的政治體制。

不幸的是,關於 Bitcoin 項目開發最初情形的資料非常稀有,使我們只能一窺 Hal Finney 在創世區塊之前扮演的角色。開源軟件開發中,維護者權限的歷史是非常不透明的。Sourceforge 和 Github 這樣的平臺,不會公開行使 commit 權限的歷史和詳細的成員權限。中本聰添加 Finney 到 Sourceforge 這樣的記錄,在 Bitcoin 項目的維護者史上是非常罕見的。

不過,SVN 和 Git 這樣的版本控制系統,雖然是在 Bitcoin 發佈第一個版本的幾周之後實現的,但確實跟蹤了代碼提交和項目分支的歷史,供公眾審核,這給了我們看出發生了什麼的公開信息。結果是,我們對 Bitcoin 項目維護者歷史的知識,常常來自他們對主分支的第一次和最後一次提交、在 Bitcointalk(或其它)論壇上的公告,以及被活躍的維護者撤銷權限的消息(極為罕見)。本文內容的一大部分,都來自 Bitcoin Core 維護者 Ava Chow 對相關歷史的記錄 10

對 commit 權限(或者說維護者)的跟蹤能力,在 2014 年得到了提升:Bitcoin Core 項目加入了 “受信任公鑰” 系統 11,添加了一個可以向主分支 commit 代碼的 PGP 公鑰的白名單。公鑰只有通過活躍維護者合併代碼才能進入或退出這個名單;而所有提交到主分支的代碼都會被(對應的私鑰)簽名,這是任何人都能過公開驗證的 —— 將對軟件的簽名與對應的 PGP 公鑰比對。

受信任公鑰系統是由 Matt Corallo 作為一種安全措施而加入的 12,他告訴 Bitcoin Magazine,這個特性是一套通用的提升和優化過程的結果,並不是對哪一項刺激或者說哪一件事情的反應。

Bitcoin Core 維護者簡史:中本聰時代

在 2009 年 1 月 3 日,中本聰挖出了比特幣網絡的創世區塊 13,事實上將這種電子貨幣推入公開測試階段。他在這個區塊中添加了一段信息 —— 來自英國的全國性日常新聞報的一個標題:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks(泰晤士報 2009 年 1 月 3 日 財政大臣正在第二次救助銀行的邊緣)” —— 將比特幣的誕生與物理世界相錨定並蓋上了時間戳。這個標題永遠地留在比特幣的區塊鏈上,恰是對比特幣的使命的巧妙且永恆的提醒。

在 2009 年 1 月 8 日晚上 14,版本 0.1.0 的 Bitcoin 軟件發佈,並在多個論壇上宣告(也包括 “密碼朋克” 郵件組)。中本聰在公共中寫道:“宣佈 Bitcoin 軟件的第一個發行版本;這是一種新的電子現金系統,使用一個點對點網絡來防止重複花費。它是完全去中心化的,沒有服務端或者中心權威。”

在 Bitcoin 的第一次發行版中,可以在 Windows 系統上安裝的版本是由中本聰編譯的,並且其源代碼也也放在了一個 .rar 壓縮文件中,發佈在 SourceForge.net 上。這個舉動天然讓中本聰成了 Bitcoin 項目的創始人和主要維護者 —— 與開源軟件項目天然相伴相隨的角色。在開發 Bitcoin 的時候,中本聰會取得其他開發者提交的代碼、下載到他自己的及其上、審核以及合併代碼,然後製作處新的發行版本 —— 這最後一項任務,將維護者與貢獻者區別開來,貫穿了 Bitcoin 項目的整個歷史。這套工作流程一直持續到中本聰在 2010 年 10 月消失,影響了 Bitcoin 軟件的 0.1.0 到 0.3.19 版本。

Bitcoin 第一次發行之後,馬上就發佈了多次更新;在 2009 年 1 月底,第三位開發者正式成為這個項目的一位貢獻者。Martti Malmi 使用 “sirius-m” 的用戶名在 Sourceforge 網站上製作了 “第一次提交” 15,將 SVN 源代碼版本控制系統帶到了網上。SVN 跟 git 相似,都是版本控制系統,在那時候比較流行。Malmi 將代碼提交到 “Trunk” 分支,就像 Github 平臺上的 “master” 分支(主分支),所以 Malmi 也成了 Bitcoin 項目開源開發歷史上的第二位正式的維護者。在 2009 年,Malmi 還作出了許多貢獻,包括 Bitcoin 的第一個 Linux 版本,時值 0.2.0 發行版 16

又到 2010 年 8 月,Lazloh Hanyecz —— 沒錯,就是因為在 2010 年花 10000 BTC 買了一張披薩餅 17 而出名的那哥們 —— 才加入成為另一位維護者 18,那是在他為 Bitcoin 的 0.3.0 發行版貢獻了 Bitcoin 的第一個 iOS 版本的一個月後。

作為維護者主管,中本聰的其中一面是(字面意義上的)管理整個網絡。中本聰曾經私下要求 Lazloh —— 第一個使用顯卡(GPU)來挖掘比特幣區塊的人 —— 降低他的挖礦速度以照顧整個網絡。“我們越是推遲 GPU 的軍備競賽,OpenCL 庫就能越成熟,也就有越多人能夠用上兼容 OpenCL 的顯卡”,中本聰在 2009 年跟 Lazloh 這麼說 19,嘗試延長比特幣的 CPU 挖礦時代。那時候比特幣的未來是完全不確定的,挖礦是運行比特幣節點的主要激勵。

2010 年 7 月 17 日,Bitcoin 的 0.3.2 版本發佈 20 21 ,中本聰添加了 “檢查點系統(check pointing system)” 作為一種安全措施,它硬編碼一個哈希值作為某個區塊高度的有效哈希值。它的用意是防止區塊鏈在礦工攻擊下重組、深度極深以至於顛覆 “已被廣泛接受的區塊鏈”(中本聰在公告裡的原話)(理論上是有這種可能)。中本聰還補充了一句:“沒必要保留這種幾個月後還能回頭修改的非零可能性,它不受人歡迎”。

檢查點系統使未來的維護者有了一個新的職責 —— 在未來的發行版中決定硬編碼哪個區塊高度及其勝出哈希值;在 Gavin Andresen 領導 Bitcoin 項目開發的時代就是如此 23 。這個檢查點系統最後唄淘汰了,因為工作量證明已經讓深度重組不可行。

中本聰作為維護者主管和項目創始人的權力之大,在 2010 年 10 月的數值溢出 bug 事件 23 中得到了充分展現:那時候,三筆交易創造出了原本不存在(也不應該存在)的 1840 億 BTC。這筆交易嘗試移動非常巨大的金額,以至於當時的交易驗證代碼 “在加總時產生了溢出”、從而打破了共識。

譯者注:作者在這裡的敘述模糊,而且有誤。實際上是一筆交易創造出了這麼多 BTC,被三個地址接收(其中一個是礦工在 coinbase 交易中的地址);當時的交易驗證代碼只是用輸入的面額總和去減輸出的面額總和,只要結果是正數(表明輸入金額大於輸出金額)就通過;而輸出的面額太大,加起來的和超過了固定長度所能表達的數字,就溢出成了負數,那麼不論輸入的金額大小,都一定會通過驗證。從技術層面看,它並沒有打破共識(導致網絡分裂成互不認可的局部)。詳情可見作者提供的腳註。

這是比特幣歷史上最著名的 bug ,有時候被稱為 “通脹 bug”,可能也是對這個項目的生死存亡最為危險的漏洞。許多社區成員在這筆交易被挖出的幾個小時之後注意到了這筆交易,提醒中本聰採取行動。中本聰,在幾位貢獻者 24(包括 Andresen 25)的幫助之下,創建了 Bitcoin 的一個補丁版本 26,改變了相關的驗證代碼。

中本聰要求礦工們遷移到這個帶有補丁的版本並重新同步區塊鏈 27,結果是整個網絡回滾到了這筆無效交易得到確認以前的狀態。這是一次硬分叉,撤銷了 19 個小時內挖出的比特幣區塊。這可能代表了 Bitcoin 項目在中本聰領導下中心化的巔峰,也是在維護者主管角色上集中的權力的巔峰。

在 “數值溢出 Bug” 事件之後,中本聰在版本 0.3.11 實現了 “警報系統” 28。這個系統 —— 一定程度上也是有爭議的 —— 將讓處於致命風險下的節點顯示一條警告並停用基本功能。這個警報系統只能使用由一個密鑰簽過名的消息來觸發,而這個密鑰只有中本聰掌握。他辯稱:“在你的節點如不暫停便處於風險之中時,被短暫的宕機時間嚇到,總好過讓竊賊已經偷走你所有的投資嚇到。” 幾個月後,中本聰在自己最後一個發佈的版本中禁用了這個警報系統。

根據 SVN 記錄,只有中本聰曾經合併過其他貢獻者的代碼以及推送 Bitcoin 的正式發行版本,至少在 Gavin Andresen 在 2010 年 12 月 19 日成為維護者主管 29 之前是這樣。早在該年的 2 月 30,Andresen 就曾經直接向中本聰貢獻代碼;並且,在該年的 10 月 11 日 31,製作了他向 SVN 的 Trunk 分支的第一個 commit。幾個月後,中本聰發佈了他在 Bitcoin 項目中的最後一個版本:0.3.19 32,然後,消失在了歷史中。

截至本文撰寫之時,超過 1200 個人,曾經給 Bitcoin Core 項目貢獻過代碼。

Gavin Andresen 時代

隨著中本聰不再給這個項目貢獻代碼,Gavin Andresen 成了唯一一個擁有 commit 權限的活躍貢獻者。隨著 Andresen 增加投入,Malmi 已經放慢了速度,所以 Andresen 成了默認的維護者主管。雖然中本聰從來沒有發出公開聲明將這個角色交給 Andresen,他確實給 Mike Hearn(當時的一位活躍貢獻者)發了一封郵件,這就是那句著名的 “我要做別的事情去了。Gavin 和各位會把這件事做好。” 的出處 33

“帶著中本聰的祝福” 34,Andresen 接手了 Bitcoin 項目維護者主管的職責,擴大了維護者團隊,同時開始著手從 Sourceforge 遷移到 Github 35。這個過程花費了不少時間。一直到 2011 年 7 月 14 日,我們看到第一個提交,來自 Andresen 的正式 github 賬戶的一個分支,合併到 Bitcoin 項目中 36,這個過程才算完成。

與中本聰時代不同,這次合併是由 Github 平臺完成的;這樣做等於是交託了一些信任給 Github.com,相信它不會對代碼動手腳;以往,這個過程都是由中本聰手動在自己的機器上完成的。值得指出的是,不管怎鵝模樣,不論是否由 Github 來合併,不同版本的代碼差異是可以審計的,因為項目本身是開源的。在這個時代,代碼合併可以由流程兩端的開發者在 Github 合併之前以及之後審核(大概就是如此),雖然充分的謹慎最終導致受信任公鑰系統的誕生。不過,這還是開啟了一種新的趨勢,決定了 Bitcoin 項目在接下來至少三年時間裡的代碼合併方式。

2011 年 9 月 13 日,Sourceforge 平臺上的 Bitcoin 項目正式關閉,將 Github 作為新的合作平臺,舊的 Bitcoin 項目頁面從此變成了檔案。因為 Malmi 和 Lazloh 主要在 Sourceforge 上貢獻代碼,那時候沒有 Github 賬戶,所以他們的 commit 權限也隨著這次正式的遷移而實際上終結,同時,隨著中本聰的離開,他們的貢獻頻率也下降了。

2011 年 4 月 27 日,0.3.21 版本發佈,這是在 Andresen 領導下的第一個版本。它也是第一個包含了一個 “Readme” 文件的版本,其中包含了一條 PGP 簽名過的消息 37,細數了更新的內容、包含了發佈的安裝文件和哈希值,並向貢獻者們表達了感謝。被提名的 16 位貢獻者中,有一些是廣為人知的 Bitcoin Core 開發者,比如 Luke Dashjr、Matt Corallo、Pieter Wuille 和 Jeff Garzik 。

接下來的幾年裡,也許是為了分散 Gavin 通過維護者角色而獲得的權力和責任、以及填補由中本聰、Malmi 和 Lazloh 離開而留下的空白,出現了一些新的維護者。Chris Moore 38 使用名字 “dooglas”,在 2011 年 1 月 21 日 39 到 3 月 31 日 40 期間擁有 commit 權限;並且此後依然是項目的貢獻者 41

幾個月後,在 2011 年 6 月的第一天,Pieter Wuille 獲得了 commit 權限 42。Wuille 是在 2010 年發現比特幣的,並且很快就開始給這個項目貢獻代碼。獲得 commit 權限之後,Wuille 逐漸成為一位著名的 Bitcoin Core 開發者,因為提供了許多小型的性能提升、累積出用戶體驗上的巨大提升,以及許多其他貢獻,而收穫了尊敬 43。直到今天,Wuille 依然是給 Bitcoin Core 提交代碼次數的第三名,他在 Github 上的用戶名是 “sipa”。

sipa

Jeff Garzik 在幾天後(6 月 6 日)成為維護者 44。Garzik 從當年的 0.3.21 版本就開始給 Bitcoin 項目貢獻代碼,並且後來也成為著名的比特幣開發者。他將來自 Linux 開源生態系統的經驗 45 帶到 Bitcoin 項目中。Garzik 常常被讚譽提高了 Bitcoin 客戶端的穩定性。

多年以後,在 2016 年夏天,在 “連續數月沒有活動” 之後,Garzik 的 commit 權限被撤銷(說法來自 Chow 的文件)。在比特幣的 “區塊體積戰爭” 開始升溫的那些年裡,Garzik 站在擴大區塊的升級那邊 46;區塊體積戰爭導致了許多爭論以及比特幣社區一些成員之間的摩擦,可能也是他的開發活動減少的一個原因。後來,Garzik 還在戰爭爆發一年以後領導了一次失敗的分叉運動,版本號為 “Segwit2x”。

譯者注:為方便讀者理解在上下文中一再出現的 “提交次數” 指標,此處添加一些說明。

Git 和 SVN 這樣的版本控制系統,將一個軟件的代碼基礎(code base)視為一個可以不斷變更狀態的代碼庫(repository),這是它支持分佈式開發的基礎。開發者不斷添加和刪除代碼,就是在不斷變更代碼庫的狀態;而每一次狀態變更,都會以一個 “commit(提交)” 來標記(它是一個哈希值)。

前面已經提到,在開源開發的項目(按照定義就是分佈式開發的)中,人們通過 “復刻(fork)” 代碼庫、在本地修改後(形成新的 commit)之後向原代碼庫發送 “Pull Rrquest(PR,合併請求)”,來推動原代碼庫的更新。

為方便工作並行開展,代碼庫往往會形成多個 “分支(branch)”。並且,這些 PR 在發出之後,可能也要經歷進一步的修改(又形成新的 commit);最終,一個 PR 合格之後,由維護者將它(包含多個 commit)合併(merge)到主分支(這次合併也會形成一個 commit)。

因此,所謂的 “提交次數”,統計的是該用戶參與修改代碼庫狀態的次數,並不等於發送 PR 的次數。也正因此,作者才提到,許多維護者的提交(commit)主要是合併(來自其他人的 PR)。可以說,這個數字統計的是其人參與開發的程度之深,而不是該人最先提議的代碼變更數量多少。

2011 年 7 月 5 日,Mara van der Laan(那時候叫做 “Wladamir”)獲得了 commit 權限,成了 Bitcoin Core 的第八位正式的維護者。Van der Laan 早在 2010 年 11 月就開始在 Bitcointalk 論壇上活躍,從 2011 年 5 月開始給 Bitcoin 項目貢獻,最初關注的是 Bitcoin QT 客戶端的圖形界面,並且帶來了計算機圖形學的深厚學術經驗 48

2011 年 9 月 19 日,Nils Schneider(用名 “tcatm”)在頻繁貢獻、優化了 Bitcoin 客戶端在後臺的工作表現之後,獲得了 commit 權限。在他擔任維護者期間,他為客戶端的國際化作出了重大貢獻:添加了多個與多語言支持相關的更新 49;監督了 “Crypto++” 依賴庫的移除,減少了不必要的依賴項 50。Nils 擔任維護者的時間差不多有一年,他的最後一次提交是在 2012 年 3 月 31 日發出的 15

2012 年 2 月 11 日 52,Gregory Maxwell(用名 “gmaxwell”)第一次合併了代碼。此前他已經貢獻了多項代碼,並且在 Bitcointalk 論壇上發表技術評論、活躍了一整年 53。從此,他開始了作為維護者的三年生涯。在此期間,Maxwell 關注的主要是客戶端的 P2P 聯網層,以及與共識機制和驗證相關的工作。直至今日,他在廣大的比特幣社區中依然享有非常高的尊敬,並且偶爾還會參加在技術討論和辯論。Maxwell 在 2015 年 12 月放棄了 commit 權限:隨著區塊體積戰爭開始升溫,因為他支持小區塊,互聯網上的騷擾隨之而來。

Bitcoin Core 維護者團隊在一年多的時間裡持續擴張。到了 2012 年 9 月 27 日,Gavin 宣佈了他對比特幣的未來的個人願景的下一個階段,“比特幣基金會(Bitcoin Foundation)” 55。這個基金會模仿了 “Linux 基金會” —— Gvain 將 Linux 操作系統視作成功的大型開源項目的一個絕佳案例 —— 吸引了許多關注和支持,也招來了許多批評。在公告中,Gavin 說:“我希望比特幣基金會成為一個開放的、會員驅動的組織,並且希望你和你的組織不僅成為一個會員,也幫助基金會實現它的使命”。接下來幾年時間裡,這個基金會幫助支付了許多 Bitcoin Core 貢獻者和維護者的薪水。

Mara van der Laan 時代

2014 年 4 月,Mara van der Laan 被 Gavin Andresen 選為自己的繼任者,擔任維護者主管,因為 Andresen 已經決定轉型成一個更有學術色彩的角色,他稱為 “首席科學家”。在 Andresen 發佈在比特幣基金會網站的一篇博文 56 中,他說:“迄今,Mara van der Laan 已經接受報酬、為 Bitcoin Core 全職工作幾個月了 —— 再次感謝各位基金會成員挺身而出、資助 Bitcoin Core 的開發 —— 並且一直做得非常出色。他已經同意接替我成為 ‘ Bitcoin Core 維護者’。”

從此,Ven der Laan 使用名字 “Laanwj” 和 “wumpus”,領導 Bitcoin Core 的開發長達 9 年時間,直至今日,依然是向 “bitcoin” 代碼庫 57 提交代碼次數最多的人(根據 Github 網站的統計,共計 7419 次 —— 絕大多數都是合併代碼)。根據 Chow 的記錄,“出於個人原因”,Ven der Laan 在 2023 年 2 月辭去了維護者角色。

laanwj

Ven der Laan 擔任維護者的時候,帶來的第一項變更(也是最重大的變更之一)是實現了前面說的受信任公鑰系統,由 Matt Corallo 在 2014 年 12 月 20 日提交 58。這個系統通過向 “bitcoin” 代碼庫主分支添加包含 PGP 公鑰指紋的文件(以及一系列相關的工具) 59,幫助解決了維護者角色的不透明問題。其中一項工具會確保維護者的提交(commit)是由 PGP 簽名過的,另一個腳本則可用來根據受信任的 PGP 公鑰的清單來驗證提交的簽名。

因為這些公鑰包含在代碼庫的主分支中,所以只有維護者可以(憑藉有效的簽名)向清單添加公鑰和從清單移除公鑰,這就會在 Git 的版本控制系統中留下記錄,同時,我們因此可以用 PR 來添加和移除維護者,貢獻者們都可以在 PR 頁面發表評論。

2015 年 11 月 13 日,Jonas Schnelli 獲得了 commit 權限,他的用戶名是 “jonasschnelli”。Van der Laan 為他授予了 GUI 庫維護者角色,也在 bitcoin 郵件組中宣佈了 60。Schnelli 從 2013 年開始給比特幣貢獻代碼,後來成為了在 Github 上 Bitcoin 項目的前 10 名貢獻者之一;許多提交似乎也是在擔任維護者期間為代碼庫合併代碼。他擔任維護者長達六年,在 2021 年 10 月 21 日放棄 commit 權限;他在 Twitter 社交媒體捧臺上寫了一篇帖子,展示了他的經歷,並表達了對未來的比特幣開發者社區的強烈信心 61

根據 Corallo 的說法,受信任公鑰系統的主要角色是 “避免信任 Github” 來合併開發者的代碼 —— 這是在 Andresen 時代常態化的做法。此後,維護者會在本地合併代碼,然後更新代碼庫。

jonasschnelli

譯者注:從形式上來說,Github 網站上有兩個項目:(1)“Bitcoin” 項目,包含 “bitcoin” 庫(能夠編譯出 Bitcoin Core 軟件的代碼)和 “BIPs” 庫;(2)“Bitcoin Core” 項目,包含上文所說的 “GUI” 庫(可以編譯出 Bitcoin Core 的圖形界面版本 Bitcoin QT),以及其它代碼庫。

2016 年 4 月 13 日,Marco Falke(用戶名為 “maflcko”)獲得了 commit 權限 62。Van der Laan在 bitcoin 郵件組中宣佈了這個決定 63,原話是:“在這裡,我宣佈 Marco Falke 作為 Bitcoin Core 的新的 ‘Testing & QA(測試與質量控制)’ 維護者”。Falke 一直給 Bitcoin Core 貢獻代碼,直到 2023 年,他出於個人原因,放棄 commit 權限和維護者身份 64

不到一個月之後,2016 年 5 月 6 日,Gavin Andresen 的 commit 權限被移除。這個決定是 Van der Laan 作出的 65,在 Andresen 給(現在眾所周知是假冒了中本聰的)Criag Wright 站臺之後。當時,比特幣社區的許多人都已經懷疑 Wright 的說法,而 Andresen 當時的立場也被迅速揭曉是出於 Wright 的欺騙。幾個月前,被視為與 Andresen 來往密切的一個 Bitcoin 項目的貢獻者 Mike Hearn,就在一檔播客裡鼓吹 Andresen 應該撤銷所有其他維護者的 commit 權限,成為 Bitcoin 項目的 “仁慈獨裁者” 66,就像許多其它開源項目已經形成的那樣。Andresen 沒有聽從 Hern 的建議,但這件事情表明了比特幣社區內部的緊張氣氛。隨著區塊戰爭開打,Wright 也參與其中。

多年以後,Andresen 曾經表達對這些事情的後悔,他說:“我現在曉得以前那麼信任 Craig Wright 是錯的了。我後悔自己捲進那個 ‘找找誰是(誰不是)中本聰’ 的遊戲。我再也不玩了。”

又過了許多年,才有另一位貢獻者獲得 commit 權限。2018 年 12 月 4 日,Samuel Dobson(用戶名為 “MeshCollider”)被 Van der Laan 提名為錢包模塊的維護者 67。Dobson 最晚從 2017 年夏天就開始給 Bitcoin 項目貢獻代碼,並且在作為比特幣開發者的生涯中,總計製作了超過 300 次提交,主要關注的是 Bitcoin Core 的錢包模塊。為了拿到博士學位,Dobson 在 2023 年 2 月放棄了自己的 commit 權限和維護者角色 69

2019 年 6 月 7 日,Michael Ford 獲得了 commit 權限;他是至今仍在擔任工作的最新一代維護者中最早加入的。Ford 的用戶名是 “Fanquake”,可能是第一位因為貢獻者內部的共識而獲得 commit 權限的貢獻者(在阿姆斯特丹的一次 Bitcoin Core 開發者會議上被提名) ###70## 71 。在這個時期之後,由貢獻者共識來提米,變成了一種趨勢,表明 Bitcoin 項目的開發走向去中心化;會議會在許多地方和環境下舉行,甚至是通過 IRC(互聯網在線聊天室)。

Ford 從 2012 年 2 月開始給 Bitcoin 項目貢獻代碼 72,因此是 Bitcoin 項目歷史上最資深的維護者之一。根據 Github 網站的統計,Ford 以 4920 次提交,位列迄今為止提交次數最多的第二名;許多提交都是對其他貢獻者工作的合併和維護性更新。

fanquake

貢獻者共識時代

2021 年 1 月 21 日,Van der Laan 發出了一篇博客文章 73,打破了從中本聰和 Andresen 開始的傳統 —— 為 Bitcoin Core 的開發安排維護者主管。在這篇博文中,Van der Laan 說她將逐步委託他人承擔維護者主管的許多工作,並且解釋說:Bitcoin 已經成了一個很大的項目,無法在使用由中本聰和 Andresen 建立的模式了,而且,是時候讓 Bitcoin Core 的開發分散化了。

Van der Laan 列出了其他人需要承擔的一系列責任,併為 Bitcoin 項目的軟件發佈流程更具審查抗性留下了一份路線圖,比如,將 Bitcoincore.org 網站的所有權移交給一個組織,而不是由她控制,同時鼓勵大家制作鏡像網站;新版本的安裝文件通過 torrent(甚至 IPFS)來分發;懷疑 Github.com,呼籲開始尋找替代的代碼貢獻平臺;一種用在維護者之間的門限簽名方案,使得他們可以通過某種密碼學共識來簽名發行版本,而不是讓某個人成為一個版本的最終 PGP 簽名人;等等。

這篇文章實際上標誌著 Van der Laan 作為維護者主管的角色的終結,也是一個里程碑,象徵著 Bitcoin 項目的成熟,就在 0.20.0 版本發佈的幾個月後、0.21.0 版本發佈的幾天前 74

Hannadii Stepanov(用戶名為 “hebasto”)在 2021 年 3 月 19 日獲得了 commit 權限,成為了 Bitcoin 客戶端的 GUI 庫維護者 75。Stepanov 從 2018 年 8 月開始給 Bitcoin Core 貢獻代碼 76,在成為一名維護者之前,積累了超過一千次代碼貢獻,使他位列 Github 的 Bitcoin 項目提交次數排名的第 5 位,截至當前,總計 2070 次。Stepanov 在本文撰寫之時仍在擔任維護者。

hebsto

Ava Chow 在 2020 年 12 月 12 日獲得 commit 權限 77,成為錢包模塊維護者;她從 2016 年 1 月開始貢獻代碼 78。她的用戶名是 “achow101”,是一位著名的貢獻者,對比特幣開發社區的貢獻不僅限於 github 上的提交,還包括許多關於 Bitcoin Core 維護者的大量歷史學研究。Chow 也因為在 Twitch 上直播審核 Bitcoin Core 代碼 79 而知名;這個直播界面吸引了一些活躍的聽眾,也推動了比特幣技術的教育。Chow 在 Github 上以 2198 次提交排名第四,在本文撰寫之時依然擁有 commit 權限。

achow101

Gloria Zhao 在 2022 年 8 月 7 日獲得了 commit 權限,也是由貢獻者共識提名的 80,角色是交易池策略維護者 81。Zhao 從 2020 年 3 月開始貢獻代碼,在獲得 commit 權限之前至少提交了 200 次代碼。現在,她以 777 次提交排名第 9 位。Zhao 在今天依然是維護者。

glozow

Russ Yanofsky 在 2023 年 6 月 10 日獲得了 commit 權限 83,由貢獻者共識提名 84,角色是接口維護者。Russ 專精於模塊化和多線程工作,這使他獲得了維護者角色。他從 2016 年 10 月開始貢獻代碼 85,迄今總計提交 970 次代碼,排名第 7 位。Yanofsky 的用戶名是 “rynofsky”,至今依然是維護者。

rynofsky

參考文獻

1. https://www.metzdowd.com/pipermail/cryptography/2008-November/014863.html

2. https://Nakamoto.nakamotoinstitute.org/emails/cryptography/1/

3. https://web.archive.org/web/20090106201347/http://sourceforge.net/projects/bitcoin/

4. https://www.coindesk.com/markets/2020/11/26/previously-unpublished-emails-of-Nakamoto-nakamoto-present-a-new-puzzle

5. https://www.ofnumbers.com/2018/10/01/interview-with-ray-dillinger/

6. https://bitcoin.stackexchange.com/questions/99674/how-do-devs-decide-who-should-have-commit-access-what-is-the-process/99676#comment112930_99676

7. https://web.archive.org/web/20230406134017/http://gavinandresen.ninja/Nakamoto

8. https://www.reddit.com/r/Bitcoin/comments/3x7mrr/comment/cy29vkx/

9. https://github.com/bitcoin/bitcoin/pull/31908

10. https://bitcointalk.org/index.php?topic=1774750.0

11. https://github.com/bitcoin/bitcoin/blob/master/contrib/verify-commits/README.md

12. https://github.com/bitcoin/bitcoin/commits/master/contrib/verify-commits/trusted-keys

13. https://mempool.space/block/0

14. https://Nakamoto.nakamotoinstitute.org/emails/cryptography/16/

15. https://sourceforge.net/p/bitcoin/code/1/tree/

16. https://bitcointalk.org/index.php?topic=16.msg73#msg73

17. https://en.bitcoin.it/wiki/Laszlo_Hanyecz

18. https://bitcointalk.org/index.php?topic=238.msg2004#msg2004

19. https://www.bitcoin.com/Nakamoto-archive/emails/laszlo-hanec/1/

20. https://bitcointalk.org/index.php?topic=437.msg3807#msg3807

21. https://github.com/bitcoin/bitcoin/commit/4110f33cded01bde5f01a6312248fa6fdd14cc76#diff-118fcbaaba162ba17933c7893247df3aR1344

22. https://github.com/bitcoin/bitcoin/commit/bd7d9140f915d68e0abfdcd7ebdbb681c87d18c7

23. https://en.bitcoin.it/wiki/Value_overflow_incident

24. https://bitcointalk.org/index.php?topic=822.0

25. https://bitcointalk.org/index.php?topic=823.msg9524#msg9524

26. https://sourceforge.net/p/bitcoin/code/139/log/

27. https://bitcointalk.org/index.php?topic=823.msg9531#msg9531

28. https://bitcointalk.org/index.php?topic=898.0

29. https://bitcointalk.org/index.php?topic=2367.0;all

30. https://bitcointalk.org/index.php?topic=383.msg3198#msg3198

31. https://sourceforge.net/p/bitcoin/code/165

32. https://bitcointalk.org/index.php?topic=2228.msg29565#msg29565

33. https://www.bitcoin.com/satoshi-archive/emails/mike-hearn/16/

34. https://github.com/bitcoin/bitcoin/commits?before=a4e96cae7d3db3f7bfffd14a7fb6754ffbbc084e+46430

35. https://bitcointalk.org/index.php?topic=2367.msg31651#msg31651

36. https://web.archive.org/web/20101218045728/http://sourceforge.net/projects/bitcoin/develop/

37. https://web.archive.org/web/20110708091605/http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.21/

38. https://github.com/bitcoin/bitcoin/commit/86c0af514b59971f7a5c3876898165667cbbeb6b

39. https://github.com/bitcoin/bitcoin/commit/86c0af514b59971f7a5c3876898165667cbbeb6b

40. https://www.reddit.com/r/Bitcoin/comments/4hvevo/comment/d2t16mh/

41. https://github.com/bitcoin/bitcoin/commits?author=dooglus

42. https://github.com/bitcoin/bitcoin/commit/fbfbf94deb4224ce65bdbbc9151ddd44a4128753

43. https://businessabc.net/wiki/pieter-wuille

44. https://github.com/bitcoin/bitcoin/commit/62b427ec5532065744f9836e6a7b1676428c3434

45. https://bitcoinwiki.org/wiki/jeff-garzik

46. https://medium.com/@jgarzik/bitcoin-is-being-hot-wired-for-settlement-a5beb1df223a#.qgx99rxpr

47. https://github.com/laanwj?tab=overview&from=2011-05-01&to=2011-12-31

48. https://dl.acm.org/profile/81474651580

49. https://github.com/bitcoin/bitcoin/commit/560078a7685b33bdc8d1a94631633cb2af841976

50. https://github.com/bitcoin/bitcoin/commit/6ccff2cbdebca38e4913b679784a4865edfbb12a

51. https://github.com/bitcoin/bitcoin/commit/50fac686541686191647ddabd87d6dae75c24c52

52. https://github.com/bitcoin/bitcoin/commit/9f3de58d83f54536076be44fe945f56670ef9b60

53. https://bitcointalk.org/index.php?action=profile;u=11425;sa=showPosts;start=6000

54. https://www.reddit.com/r/Bitcoin/comments/3x7mrr/gmaxwell_unullc_no_longer_a_bitcoin_committer_on/cy29vkx/

55. https://bitcointalk.org/index.php?topic=113400.0

56. https://web.archive.org/web/20140915022516/https://bitcoinfoundation.org/2014/04/bitcoin-core-Maintainer-wladimir-van-der-laan/

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論