開源項目的所有者去世了怎麼辦?

【CSDN編者按】GitHub是全世界最流行的代碼託管網站,上面託管了6700萬個項目。但是各個開源項目之間所隱藏的複雜軟件依賴關係網,帶有很大的安全和性能隱患——特別在開源項目的所有者去世之後,很有可能會因為項目缺乏維護而帶來其他應用性能的崩潰。本文的作者曾經希望繼承某一“孤兒”項目的維護權,卻因為客觀原因而不了了之。在他看來,開發者應該給大批的“孤兒”開源項目以新生。

開源項目的所有者去世了怎麼辦?

以下為譯文:

也許你從未聽說過Jim Weirich或他的軟件,但你肯定用過基於他的軟件構建的應用。

Weirich參與創建了流行編程語言Ruby的幾個關鍵工具,許多流行的網站如Hulu、Kickstarter、Twitter和數不清的其他網站都是用Ruby編寫的。他的代碼是開源的,意味著任何人都可以使用並修改。“他是Ruby西方世界裡的精英成員。”Ruby開發者、軟件公司Test Double聯合創始人Justin Searls說。

開源項目的所有者去世了怎麼辦?

Jim Weirich

在2014年Weirich去世後,Searls發現沒人再維護Weirich的一個軟件測試工具了。也就是說,沒有人再審查其他開發者提交的bug修改、安全補丁或其他任何改進。任何依賴於該工具的測試最終都會失敗,因為代碼總有一天會過時,並且與新的技術不再兼容。

這件事引發了開源軟件社區越來越多的擔心——在程序員逝世後,他的代碼該怎麼處理?

1.安全和性能問題

人們討論過許多人死後的社交賬號如何處理的問題,部分原因是因為許多公司和政府機構都依賴於各個團隊維護的商業軟件產品。但是今天,越來越多的程序都依賴於模糊卻非常關鍵的軟件,比如Weirich的軟件。

一些開源項目很有名,如Linux操作系統和Google的人工智能框架TensorFlow,但這些項目也都依賴其他更小的開源庫,而那些更小的庫也會依賴於其他的庫,最終造就了一個複雜且非常隱蔽的軟件依賴關係網。

這會帶來非常大的問題。比如2014年在OpenSSL里程序出了個著名的“Heartbleed”安全漏洞。幾乎全世界每個需要處理信用卡或借記卡支付的網站都會使用OpenSSL這個開源軟件,但實際上它的維護團隊只有寥寥幾名志願者,而且他們也沒有足夠的時間或資源來進行所有的安全審查。在Heartbleed出現後不久,另一個著名開源軟件Bash中也發現了安全問題,導致世界上無數的Web服務器和其他設備面臨被攻擊的風險。

肯定還有更多尚未發現的問題。一個名為Libraries.io的組織分析了軟件項目之間的聯繫,發現超過2400個開源項目庫都使用了1000多個其他的程序,但這1000多個程序幾乎沒有受到開源社區的任何關注。

而安全問題僅僅是問題的一部分。

如果軟件庫不能經常更新,那麼總有一天會無法在最新的軟件上運行。也就是說,所有依賴於過期軟件庫的軟件都不能再運行。如果開發者去世,或者放棄一個項目,那麼所有依賴於該項目的軟件都會受到影響。去年,程序員Azer Koçulu從互聯網上刪掉了一個名為Leftpad的很小的軟件庫,結果連鎖反應使得Facebook、Netflix和許多其他人都大為頭疼。

2.公交車指數

一份軟件的所有者越少,被孤立的風險就越高。開發者們甚至給它起了個名字:公交車指數——意思是說,多少人被公交車撞死會導致項目無人維護。Libraries.io發現,大約3000個常用的開源軟件庫只有少數幾個維護者。

儘管商業軟件廠商在停止支持舊軟件時也會給用戶造成類似的困擾,但總的來說,使用孤立的開源軟件風險非常高。有時候,熱情的程序員會收養孤立的開源代碼。

Searls的Weirich項目就是類似的情況。Weirich最流行的項目在他去世時都有其他的管理者。但Searls發現其中一個項目——測試工具Rspec-Given並沒有人接手,因此他想接過該項目並負責更新。但他遇到了一些困難。

Rspec-Given的代碼放在了GitHub上。GitHub是全世界最流行的代碼託管網站,上面託管了6700萬個項目。Weirich的在GitHub上的Rspec-Given頁面是人們報告bug或幫助改進代碼的主要場所,但GitHub拒絕為Searls提供該頁面的訪問權,因為Weirich並沒有在去世前指定他為管理者。因此,Searls不得不復制了該項目並放在了其他地方。他還必須說服Ruby Gems(一個用來分發軟件的“包管理系統”)的管理者使用他的Rspec-Given版本,而不是使用Weirich的版本,這樣所有Ruby用戶才能訪問到Searls的修改。GitHub拒絕討論關於移交項目權限的政策。

這樣就解決了與Rspec-Given有關的問題,但也讓Searls意識到,許多事情都可能會出錯。他說,“開源可以很容易地看成純粹的技術問題。但一旦項目啟動並被幾百人使用之後,它就成了社會問題。”

絕大多數包管理系統的維護者都有一個臨時的庫權限移交流程,但這個流程僅在有人注意到某個項目已經被孤立,並且自願收養的時候才會啟動。Ruby Gems新項目的Evan Phoenix說:“我們並沒有正式的政策,因為這個流程很少發生。但我們有個委員會來針對每件類似情況進行討論。”

現在,一些包管理器會自動監視軟件庫,並對廣泛使用但很久沒有更新的軟件做出標記。協助維護Perl編程語言的包管理器的Neil Bowers說,有時候他會尋找志願者來收養孤立的項目。Bowers說,他的團隊會找出被遺棄的項目,然後由其他人申請接管。

3.亡者開關

接管Rspec-Given啟發了Searls,年僅30歲的他決定為他自己的開源軟件項目立下遺囑和後繼的計劃。開發者們也可以做一些事情來讓軟件包的未來更安全,比如,可以將版權轉交給基金會,如Apache基金會。但許多開源項目都是作為個人興趣開始的,所以很多程序員根本沒有想過轉移所有權。

Searls建議GitHub和Gems等包管理器能在各自的平臺上加個“亡者開關”功能,以便在所有者很長時間不上線或不做修改後,自動將項目的所有權或所有者賬號轉移給他人。

但移交的計劃遠遠不止允許別人訪問代碼這麼簡單。流行的數學庫Matplotlib的創立者John Hunter於2012年逝世後,Michael Doroettboom接管了該項目,他指出,後繼者必須能夠理解代碼。“有時候代碼庫裡會有一部分只有一個人才能看懂的代碼。”他說,“那些知識保存在了那個人的大腦中。”

總而言之,我們應當讓別人儘早參與項目,最好是在別人一開始使用代碼的時候。Searls指出,這樣做還有其他的好處,比如可以分擔維護的工作量,防止開發者過於疲勞。

原文:https://www.wired.com/story/giving-open-source-projects-life-after-a-developers-death/

作者:Klint Finley Business


分享到:


相關文章: