- 八卦通常是道家及其思想的象徵-
過去幾年來,比特幣擴容問題引發熱議,史無前例地將大眾的目光聚焦在了比特幣協議演進背後的開發流程上。雖然開源軟件項目歷來都要承受來自利益競爭的重壓,並應對不同開發團隊所推崇的不同願景,但是,在比特幣這個項目上,這個系統關係到的利益的範圍和種類,以及人們對開發流程發表意見的動機,凝結成了一種完全獨一無二的情形。
在應對這些挑戰時,大型開源項目有小心定義的宗旨、使命和原則,以指導貢獻者的工作。互聯網工程任務組(Internet Engineering Task Force,IETF)的《IETF 之道:互聯網工程任務組新手入門》就是一個廣為人知的例子。作為成員遍布全球的最大標準化組織之一,IETF 有著數十年志願者開發工作的組織經驗。更重要的是,IETF 的“大致共識” 與比特幣開發的決策流程驚人的相似。
過去,社區內部沒能理解影響比特幣協議方向的正確做法,形成了不必要的衝突。現在,這一問題再度製約了比特幣的發展,儘管相關參與者都懷有最大的善意。我們應該記住,開源項目的發展需要大家齊心協力。如何讓社區中的每個人都有機會凝聚來自各方的正能量,更高效地產出成果,這是我們當下需要應對的挑戰。
本文旨在以IETF 的指南作為範本來促成比特幣社區成員的相互理解。除瞭如何為比特幣做貢獻之外,本文還概述瞭如何在這一過程中達成共識。文中所述概念只是我這個門外漢的個人淺見,不代表官方意見和正式標準。
比特幣開發領域
目前,Bitcoin Core 項目是比特幣開發活動中最活躍、最高產的主打項目。它擁有一個較為鬆散的開發團隊,聚集了數百名來自世界各地的志願者,共同為比特幣實現做貢獻。他們的成果都保存在Github.com/Bitcoin 庫裡。
Bitcoin Core 項目不設管理機構,也沒有成員制度:面向所有人開放,任何人都可以成為貢獻者,並基於以往的貢獻質量獲得影響力(類似同行評審)。為了促進開發工作,首席維護者會任命專門的維護者負責監督發布週期,來推動項目的進展。這種等級劃分和相關頭銜反映的是客觀情況,不附帶任何形式的特權或權力。如果有任何實體濫用了對Bitcoin Core 項目代碼庫的控制權,其餘成員可以自由fork 該項目並繼續展開工作。
雖然Bitcoin Core 項目從未正式定義過自己的使命,但是我們可以從過去的交流中推斷出一些具體目標。 Bitcoin Core 致力於:
維護網絡的健康發展達到最高的性能標準為所有用戶保障比特幣的安全性出於用戶的考慮維護並發布面向比特幣社區的軟件支持向後兼容的升級,以便用戶保留當前選擇保護網絡的核心特徵:去中心化、安全性和免許可創新
雖然大多數貢獻者都是志願參與,但是也有一些實體通過資助或直聘等方式提供資金支持,以確保開發工作的可持續性。這些實體包括但不限於Blockstream、ChainCode Labs、Ciphrex、MIT DCI 和Purse.io。這些實體幾乎都會制定具體的合同條款和協定來維護開發者的獨立性,並幫助他們避免與比特幣及其用戶產生利益衝突。
Bitcoin Core —— 2016 年的開發活動報告:https://www.youtube.com/watch?v=eK1gfMV2Tqw
經年累月的協作、高水平的資深開發團隊和可信的成就記錄使得Bitcoin Core 成為了比特幣領域最值得信賴的實現。但是,Bitcoin Core 項目之所以能成為比特幣協議的技術骨幹,只是因為全世界比特幣用戶的自發行為。 Bitcoin Core 既不能控制比特幣,也不能單方面強行改變其共識規則。很多用戶和企業都運行自己的Bitcoin Core 軟件。其他開發者則創建了自己的實現,有的基於Bitcoin Core 代碼庫,有的是使用另一種語言從頭創建的。知名的例子有btcd、Libbitcoin、 Bcoin 和NBitcoin。
然而,整個比特幣開發領域遠不止Bitcoin Core 項目和這些個人開發者。已經有成百上千名學者對比特幣及其生態系統和相關技術進行了研究,並發表了共計1150 多篇論文。 2015 年起舉辦的比特幣擴展性研討會(Scaling Bitcoin Workshop)為開發者和研究者提供了不可多得的機會,他們就協議開發事宜進行合作,並從學術角度探討比特幣技術的演進。另外,斯坦福(Stanford)、普林斯頓(Princeton)和蘇黎世聯邦理工學院(ETH Zurich)等機構在比特幣研究方面也有著豐富的資源。
如何作貢獻?
目前有幾種方式可以為比特幣開發做貢獻。凡是了解當前流程並尊重多年來形成的標準和慣例的人都可以參與進來。
新的貢獻者面臨的最大挑戰之一是代碼庫的廣度和相關技術的複雜性。具體來說,新人常常會發現所謂的新想法鮮少具有創新性,十有八九是之前就已提出或思考過的。
為使開發者做出卓有成效的貢獻,避免在錯誤的道路上越走越遠,開發者也被鼓勵在提出正式的建議之前先查閱下文列出的各種在線資源。
自由及開放源代碼軟件(FOSS)的開發注重開放式交流。迄今為止,已有各式各樣的平台建立,為貢獻者提供提案反饋渠道。
參與前須知
比特幣開發以bitcoin-dev 郵件列表為核心。 bitcoin-dev 列表對待所有實現一視同仁,目前由Linux 基金會打理。有意參與比特幣開發的貢獻者應當查閱郵件列表中的歸檔文件,一來提前熟悉開發流程,二來挖掘與其工作有潛在關聯的內容。
為了將焦點放在技術討論和提案上,該郵件列表內的討論有少許刪減。原始討論可以在bitcoin-discuss 郵件列表中找到。
貢獻者如有任何關於比特幣開發的想法或問題,還可以在其它平台上尋求意見和解答,例如IRC 免費節點上的#bitcoin-dev、#bitcoin-core-dev 和#bitcoin-wizards 等頻道。這些頻道的歷史日誌還包含大量可能對貢獻者有價值的信息,可點擊下方鏈接查看:
#bitcoin-dev#bitcoin-core-dev#bitcoin-wizards(點擊此處,查看更早期的內容)
此外,很多由個人維護的網站上都收集並歸檔了各個圈子裡多年來討論的想法。其中,開發者Bryan Bishop 的wiki 收錄的信息最全面,儘管理解起來確實很難。另外還有一些社區資源包括Bitcoin Wiki 和Bitcointalk 的“開發和技術討論板塊(Development & Technical Discussion section)”。
最後,近年來還出現了一些線下集會,通過另一種社交場景支持技術合作並宣傳新的想法。這類例子包括但不限於SF Bitcoin Devs 見面會、NYC Bitcoin Devs、Bitcoin Milano 見面會、Paralelni Polis Bitcoin 見面會、Scaling Bitcoin 大會和S3ND 圓桌會議。
提議和實現
對貢獻代碼和參與代碼評審感興趣的開發者請閱讀這篇指南。考慮到對整個生態的影響,如果有開發者想要改變比特幣的共識規則,或者引入需要標準化的功能,需要付出極大的努力。
比特幣採用的比特幣改進提案(BIP)機制類似IETF 的Request For Comment (RFC)。 RFC 被用來記錄與互聯網背後的核心系統相關的新標準、方法或技術。開發者Amir Taaki 將這一概念應用於比特幣。比特幣BIP 的初始規範主要改編自Python 的PEP-0001,後由開發者Luke-Jr 進行修訂。
我們的目的是讓BIP 成為提議新功能、收集社區對某項議題的意見和記錄已採納的比特幣設計決策的主要機制。 BIP 的作者有責任在社區內部建立共識,並記錄反對意見。 ——BIP2,BIP 流程(修訂版)
BIP2 的“BIP 工作流程” 部分強調了BIP 流程本質上是一種協作工具。
鑑於比特幣的分佈式信任特徵和開源原則,開發者需要嚴格遵守科學的同行評審模型。對於任何提案的成功乃至良性比特幣開發來說,透明性和開放對話都至關重要。新加入的貢獻者在參與開發流程時應保持謙虛的心態,切勿在初期因提案被拒絕而氣餒,因為比特幣社區沉澱多年的知識和經驗絕非一人之功。
這一嚴格的審查流程需要盡可能多的參與者加入,才能就某項提案建立起共識。涉及到更改比特幣系統共識規則的提案尤其重要。雖然有些人可能覺得這一慣例很繁瑣,但是不尊重它很有可能導致不信任和內鬥,從而阻礙開發進程。即使某項技術提案非常合理,也有可能因其作者試圖繞過既定流程而被質疑動機不純,遲遲未能通過。為避免這類情況,貢獻者應積極加入比特幣生態的相關組織並進行交流,尤其是與其他開發者的交流。如果你想了解不同參與者的職責以及達成共識的要求,可以閱讀BIP0002 的“基本原理(Rationale)” 部分。
如果你決定嘗試編寫一份IETF 標准文檔,請做好心理準備:雖然每個步驟都非常簡單,但是整個流程可能會很繁瑣。儘管如此,還是有很多人毫髮無傷地成功了,而且還有大量文字指南幫助作者或多或少地保留自我。 —— 《IETF 之道:互聯網工程任務組新手入門》,2012
一旦某個新想法滿足了上述要求,它的支持者就會編寫一個可行的、與當前的規範兼容的實現。此舉旨在保持向後兼容性,並儘可能降低破壞性。為了實現互操作性,開發者Eric Lombrozo 提出了BIP123,基於與提案交互的網絡層對提案進行分類。
大致共識和運行代碼
在很多方面,IETF 都是基於參與者的信念運行的。 “最根本的信念” 之一就像David Clark 早期提及IETF 時所言:“我們不要國王、總統和投票。我們相信的是大致共識和運行代碼。” ——《IETF 之道:互聯網工程任務組新手入門》,2012
多年來,已經有很多文章探討了比特幣的治理模型(及其缺陷)。中本聰在2010 年銷聲匿跡時,並沒有給後人留下任何關於如何做出重要共識決策的指示或指導。
縱觀比特幣的發展史,這沒有造成什麼問題。對協議的技術修改很少引起爭議,用戶也信任同行評審過程。評審參與者會根據技術優點對提案進行評估,一旦認定某項提案達到“最低採納標準(the minimum standards for inclusion)”,就會將其合併到比特幣的代碼庫中。
久而久之,隨著生態系統中參與者多樣性增加以及參與者之間在利益和預期上分歧加劇,建立共識的潛在挑戰浮出水面,這是意料之中的結果。許多人認為,比特幣系統的社會復雜性阻礙了它的技術演進。在沒有權威機構的情況下,不同利益相關者如何在關於比特幣協議基本規則的爭論中達成可接受的結果?
缺乏耐心的參與者倡導正式的治理模式,即,授予高調的參與者特權,讓他們來把控比特幣協議的方向。遺憾的是,這類治理模式與比特幣的共識機制背道而馳,因為比特幣系統的規則是由用戶驅動的共識(user-driven consensus)維護的。一旦公眾人物被賦予了過多的權力,就會成為敵對勢力脅迫和施壓的目標。
大致共識有很多定義;一個簡單的版本是,對於很強烈的反對意見,人們必須持續討論下去,直到絕大多數人都認可這些反對意見是錯誤的為止。 —— 《IETF 之道:互聯網工程任務組新手入門》,2012
更完善的決策流程可以從IETF 採用的“大致共識” 模式中得到。 《論IETF 的共識和分歧》的部分章節提供了深刻的見解,幫助比特幣開發者正確看待以共識驅動的開發。
沒有分歧比一致認同更重要
推動比特幣開發的一個重頭戲是讓某個協議獲得支持。可惜人們常常錯把廣泛支持的表象當作共識。即使某個想法達到了認同的衡量標準,可能也只是得到了社區的青睞,只要有人明確提出異議,就不能判定社區就該想法達成了共識。即使只有一個貢獻者在技術層面上提出了有效的反對意見,也要集體解決,如果這個反對意見的分量足夠重,甚至可以阻止提案的實現。
因此,開發者在考慮提案時應本著“最小分歧” 原則。雖然讓所有人都達成一致意見是不切實際的,但是我們可以通過權衡所有分歧並確定它們屬於不可調和問題還是工程偏好問題來達成“大致共識”。
只要考慮到了一切問題,即可達成大致共識,不一定要全部解決
透徹地思考提案的潛在問題固然重要,但也要承認,工程上總是存在取捨,需以最務實的方法處理。另一種方法是不要讓“完美成為優秀的敵人”。
開發團隊應不帶有任何偏見地權衡每個反對意見,對評審過程持開放態度,並確定最終決策。如果每個人的擔憂都能得到徹底審視,讓開發團隊更好地理解潛在的替代方案,並論證替代方案的優越之處,開發流程就能取得重大進展。
如果只是絕大多數人都不認同反對意見,還不足以稱之為大致共識。團隊必須真誠思考反對意見,並評估其是否會導致其它問題。如果無法進行論證或評估,就不能算作真正的共識。 —— 《論IETF 的共識和分歧》,2014
不同的問題在性質和重要性上不盡相同,但是只要團隊承認所有潛在權衡都得到了妥善處理,就更有可能實現最佳技術成果。團隊應該警惕任何試圖通過“討價還價” 的方式不顧合理的反對意見而作出讓步來加速開發流程的行為。開源開發不容許任何為了內鬥而在工程上做出妥協的行為,尤其是在比特幣系統中,利益團體不應凌駕於用戶安全之上。
共識是道路而非終點
雖然IETF 在大致共識方面不可能有完美的原則,但是如果我們無法警醒自己堅守這些原則,未來只會越來越難堅守它們,最後導致技術成果滑坡。 —— 《論IETF 的共識和分歧》,2014
在討論共識問題時,最常見的問題之一是,如何評估共識是否已經達成。典型的做法通常是數人頭和其它容易被誤解或受到操控的社會信號。這些做法過分關注結果而忽視了過程,可謂因小失大。
更準確地來說,建立共識是一種實現開放式協作的系統方法,即,一種基於生態中每個參與者的輸入得到最佳技術成果的迭代過程。只要生態中的每個參與者都認可一套最佳規則,並共同遵守基本的開源原則,得到滿意結果的可能性就會提高。這背後的透明度至關重要,以便沒有直接參與其中的用戶可以判斷他們想要採用的變更的合法性。
我之所以要強調這一點,是因為系統的共識最終取決於用戶運行的代碼以及用戶通過自己的驗證節點執行的規則。雖然某些變化無需經歷漫長而繁瑣的生態審查過程就可以實行,但是那些涉及共識層的變化需要相關參與者之間進行大量協調。一旦操之過急,隨之而來的時間壓力會讓部分參與者覺得自己的意見沒有得到應有的考慮,最終導致一無所獲。
對於新手來說,還有一點非常重要:IETF 絕不會“管理互聯網”,儘管有些人可能有這種誤解。雖然IETF 制定的自願性標準常被互聯網用戶採用,但是IETF 絕不會控制,甚至審查互聯網。如果你是因為想要成為審查者而對IETF 產生興趣,那IETF 要讓你失望了。 —— 《IETF 之道:互聯網工程任務組新手入門》,2012
就協調各方利益和維護協議的去中心化性質而言,比特幣的社會經濟影響帶來了獨特的挑戰。幸好這是有先例可循的,互聯網協議標準的發展史為我們提供了應該如何應對這些挑戰的寶貴信息。本文強調的IETF 準則並非憑空出現,而是經過長期磨礪得到的。如今,很少有用戶記得,互聯網也經歷過要解決自身擴容問題、各方欲爭奪其控制權的階段。 IETF 對於開放式開發的堅持在維護系統的自願性及技術完整性上發揮了關鍵作用。
-MIT 的David Clark 在1992 年的IETF 會議上的重要演講節選-
翻譯:隨著互聯網及其社區發展,我們如何管理變革和發展流程?
開放式流程—— 讓所有聲音都能被聽到。封閉式流程—— 取得進展。快速流程—— 與現實接軌。慢速流程—— 留出思考時間。市場驅動流程—— 通往商業時代。擴容驅動流程—— 通往互聯網時代。
如今,我們的社區正面臨20 多年前互聯網遇到的相同困境。在不久的將來,我們做出的集體決策有可能對比特幣的演化產生深遠影響。雖然商業利益對整個生態的發展來說至關重要,但是我們應該盡量避免讓它們干預開發流程,不能讓短期利益阻礙協議實現長期抗逆性所需的工程。
歸根結底,比特幣網絡由全球成千上萬名自願運行該軟件實例的獨立用戶支持。在這種情況下,任何破壞開源開發流程的行為必然會導致用戶之間的不信任。雖然某些用戶可能認為自上而下的舉措會加速比特幣技術的進步,但是更有可能阻礙它。更糟糕的是,對加速開發的強烈慾望有可能對比特幣協議造成無法修復的損害。
我們可以合理地假設,很多參與者都以自己的利益為重,可能會擔心這種緩慢的漸進式進程會影響到自己的業務。因此,我們要讓每個相關方都參與開放式交流和合作,以確保在解決短期問題時不會犧牲比特幣技術的長期願景。比特幣技術有希望比我們這代人走得更遠。
畢竟,比特幣就是未來。
(完)
(文內有許多超鏈接,可點擊左下”閱讀原文“ 從EthFans 網站上獲取)
原文鏈接:
https://medium.com/@bergealex4/the-tao-of-bitcoin-development-ff093c6155cd
作者:Alex B.
翻譯&校對:
閔敏& 阿劍