2008 年初,澳大利亞一對兄弟 Simon Zerner 和 Toby Zerner 開始了 esoTalk 的開發。不幸的是, esoTalk 尚處于 Alpha 階段,主力開發人員哥哥 Simon 就在 2009 年年中去世。
接替 Simon 維護和更新 esoTalk 的,是他弟弟 Toby。在 README.md 文件,寫著這么一句話:“esoTalk 是 Toby Zerner 為紀念他的兄弟 Simon 而開發的。”最終,兩兄弟留下了一個采用 PHP+MySQL 開發的,具有非常簡單、快速、現代特性的開源論壇系統。
esoTalk 的延續是那么地順其自然。
這就引出了一個話題,如果開源項目的作者去世了,代碼由誰來繼承?這實際上是兩個問題。一是,版權由誰來繼承;二是,代碼由誰來維護?
通常來說,繼承版權和維護代碼的不會是同一個人。畢竟,不是每個開源大佬都像 Simon一樣,有個會寫代碼的弟弟。
版權問題其實并不那么棘手。如果開源軟件只有一個作者,那么版權完全歸他所有。如果有多個作者,那么每個代碼部分的作者,都擁有該部分的版權。
有遺囑就按遺囑執行,沒有遺囑還有著作權法、繼承法這樣的法律來管。不管由誰繼承,都不會過多影響用戶使用開源軟件。因為開源本身就具有特殊性,項目作者已經通過開源許可證,許可他人任意使用、復制、修改、分發代碼,這已經包含了大部分版權所涉及到的權利。
一般來說,作者在貢獻之前會已經與項目維護的法律實體,比如基金會、企業,簽訂貢獻者許可協議,將版權分配出去。簽了這類協議,別說作者去世了,就是還活著,對交出去的代碼,想做些什么也做不了。(詳情可查看:貢獻者許可協議(CLA),是開源開發者的保護傘還是枷鎖?)
所以問題就集中在,項目維護。其實很早就有人想要答案。
“如果 Guido 被公交車撞了?”1994 年 6 月,有人在新聞組提出了一個假設。Guido van Rossum 是 Python 語言的發明者,同時也是 Python 社區的領導者。而這里的“公交車”,是許多可能的意外場景之一。
之所以會有這么一個問題,是因為 Python 對 Guido 過于依賴。對于想要使用 Python 的企業來說,就不得不考慮這樣一個風險:如果 Guido 消失了,Python 還能活下來嗎?商業產品有供應商基于利益繼續支持,因此風險較低,但像 Python 這樣的學術研究項目,如果開發人員的興趣發生變化,或者開始了新工作,不久之后該項目可能會消失。
這個問題不僅讓企業用戶擔心,同時也在 Python 社區引起了討論和重視。之后,雖然 Guido 仍然扮演核心角色,但社區一步步地通過成立基金會、指導委員會等方式來監督 Python 的未來。
這一討論影響范圍甚廣。幾年后,有人在 Ruby 社區提出了一樣的問題,“如果創始人 Matz 被公交車撞了該怎么辦”。
Matz 表示:“因為 Ruby 是我的快樂之源(至少在計算機領域是這樣),只要我活著,我就不會放棄對 Ruby 的控制。”并且他還進行了“提名”:“如果我發生了什么事,歡迎開源。所有的源代碼都在那里,我希望 Shugo Maeda、Guy Decoux 和其他人會繼續開發這個解釋器。我相信,Dave Thomas 會告訴社區該走向何方。他和我一樣理解 Ruby 哲學。”
Debian 社區在 2005 年就認識到,在任何關鍵職位上,至少應該有兩個活躍的人。“多少人被公交車撞到才會導致項目停止,我稱之為公交車指數。指數≤1 是非常糟糕的。”開發人員 Petter Reinholdtsen 表示,對 Debian 來說,確保特權職位有良好的冗余非常重要。
此外,Debian 還主張將權力分散,而不是集中于領導者一人身上。比如,Debian 負責人可在特定的領域做出決定,但是須將之交付給另外的技術負責人;民主程序可以罷免項目負責人和推翻負責人的任何決定等等。(詳情可查看:開源長老 Debian 就是這么硬氣!)因此當 Debian 的創始人 Ian Murdock 去世時,社區實現了平穩過渡。
可見,對于貢獻者眾多,還有基金會、委員會等組織護航的開源項目來說,核心人員的離去并不會帶來太大的打擊。沒有某個特定人物長期把持決策,也就沒有人能在社區引起動蕩。
這個問題最終被延伸為,如果社區中某一個人擁有的特權過多,在他出現意外之前,應該做些什么來保證項目正常運轉。
鑒于 Linus 在 Linux 社區的獨裁統治,所以大家關心的問題也就變成了:如果 Linus 被公交車撞了?
不是所有項目都像 Python、Ruby 一樣這么幸運。對于較為小眾的開源項目來說,創始人去世后,想要續命并不容易。
web.py 是一個用于 Python 的輕量級 web 框架,2013 年初,創始人 Aaron Swartz 自殺身亡。在此后的三年間,該項目幾乎陷入了停滯。GitHub 上的 web.py 倉庫雖然有少量的代碼提交記錄,但再也沒有發布新版本。
之后幾年,雖有開發者相繼接棒進行維護,但 web.py 的前景也難掩頹意。web.py 的命運,會迎來轉機嗎?或許很難。不論是 GitHub 上最新的提交記錄,還是社區網站上最新的郵件討論,都停留在 2020 年。一年多了,它們仍然靜悄悄。
像 web.py 這樣由于主要開發者去世而導致項目擱淺的事情并不鮮見。就連在 Ruby 社區頗有名望的貢獻者Jim Weirich 去世后,他創建的兩個最受歡迎的項目—— Rake 和 Builder,在兩年之內都沒有新版本發布記錄。不過好在最終被人注意到了,Weirich 開發的多個開源工具都有了繼任者。
還有更多少為人知的開源項目,湮沒在時間的長河之中。
這其實跟創始人主動拋棄一個項目面臨著一樣的問題:代碼給交給誰。但又有很大不同,主動意味著有的是時間討論或計劃給它找個好下家。
而沒有人維護,那就意味著,如果其他開發人員提交錯誤修復、安全補丁或其他改進,將沒有人批準更改,這個項目很快就會因為代碼過時,或者與新技術不兼容而被用戶放棄。
一位 web.py 用戶說,將不會在新項目使用 web.py,因為它沒有得到積極維護。Flask/Werkzeug、Bottle 和 Tornado 基本上填補了相同的“微框架”細分市場,它們明顯更好、更現代。
有人認為,應該任其自生自滅,因為如果一個開源項目有價值,那么它自然有人繼承。但事情并沒有這么簡單。
一個項目被放棄,尤其是一些被高度使用的底層關鍵庫被放棄,可能會導致數十萬個軟件應用程序受影響。像Linux 或深度學習框架 TensorFlow 等著名的大項目,都依賴于較小的開源代碼庫,而這些庫又依賴于其他庫,從而形成了一個復雜、龐大的軟件依賴網絡。Libraries.io 的分析顯示,用于超過 1000 個其他程序的開源庫多達 2400 多個,但它們很少受到開源社區的關注。
Debian 10 buster 服務器軟件包依賴關系
因此,為那些因開發者突遭變故而被拋棄的開源項目找到繼任者是很有必要的。在接手 Weirich 遺留的 Rspec-Given 項目之后, Justin Searls 就為自己的開源項目制定了遺囑和繼任計劃。WIRED雜志的撰稿人 Klint Finley 認為,將版權轉讓給開源組織,比如 Apache 基金會,也是一個明智的選擇。
即使有能力有意愿維護開源項目,但在實際操作中可能會遇到不少麻煩。Klint Finley 記錄了 Searls 在這個過程中有多難。“GitHub 拒絕讓 Searls 控制 Rspec-Given,因為 Weirich 沒有為他提供權限。所以 Searls 不得不創建一個新的代碼副本,并將其托管在其他地方。他還必須說服 Ruby Gems(一個用于分發代碼的“包管理系統”)的運營商使用他的 Rspec-Given 版本,而不是 Weirich 的版本,以便所有用戶都可以訪問 Searls 的更改。GitHub 拒絕討論關于轉移項目控制權的政策。”
無獨有偶,Luacheck 的繼承也因為所有權轉移的問題,拉鋸了兩三年。Luacheck 是一個用于對 Lua 代碼進行 linting 和靜態分析的工具,創建者 Peter Melnichenko 去世之后,GitHub 上的倉庫就一直處于懸而未決的狀態。之后,盡管社區創建了分支,但在 Google 搜索“luacheck”,Peter 創建的倉庫仍然是第一個結果,直到今天,人們仍在向舊的倉庫發布 issue。
幾年前,Searls 曾建議 GitHub 和 Gems 等包管理器可以在他們的平臺上添加類似“亡者開關”的東西,萬一創建者長時間沒有登錄或者修改,系統可以自動將項目或帳戶的所有權轉移給其他人。
“亡者開關”沒有在 GitHub 實現。不過, GitHub 在 2020 年 5月新增了一項功能:添加賬戶的繼任者。它允許倉庫所有者在無法管理的情況下,邀請同平臺的其他用戶作為繼任者。繼任者雖然不能直接登錄原帳戶,但他們可以將公共倉庫進行存檔以及轉移。
GitLab 也正在討論賬戶繼承這一事項。GitLab 表示,這主要是為了應對賬戶所有者去世的情況。盡管初衷是為了解決由于賬戶長期不使用可能出現的身份盜用或其他與安全相關的問題,不過同時也明確了開源倉庫官方繼承的流程。如果能夠提前指定繼任者,Searls 曾經面臨的問題不會再出現。
“添加繼任者”這一功能不過是掃清了些許障礙,但會讓開發者或者開源社區更早地認識到,未雨綢繆是很有必要的。
話說回來,最難的還是找到合適的繼任者。倒也不必灰心,不妨把更多的視線拉回到開源這件事情上來。代碼開源之后,它就有了無限續命的可能。假以時日,會出現有能力有意愿的開發者將它們撿起來并變成自己的。正如 WhiteSource 的首席執行官兼聯合創始人 Rami Sass 所言:“它不屬于任何人,它屬于每個人。”