你可能從來沒有聽說已故Jim Weirich或他開發(fā)的軟件。但是你幾乎必定會使用過在他研究基礎上開發(fā)出的各種應用程序。
Weirich為面向對象(面向對象程序設計)腳本語言Ruby創(chuàng)建了幾個關鍵工具,Ruby是Hulu,Kickstarter,Twitter和其他無數主流網站代碼的編程語言。Ruby的代碼是開源的,這意味著任何人都可以使用它并對其進行修改。 Ruby開發(fā)人員兼軟件公司Test Double聯合創(chuàng)始人Justin Searls說:“Weirich是西方世界Ruby社區(qū)的創(chuàng)始人之一。
當Weirich于 2014 年去世時,Searls注意到沒有人再去維護Weirich的一個軟件測試工具。這意味著如果其他開發(fā)者再向Ruby社區(qū)提交關于Ruby語言的錯誤修復,安適補丁或其他改進,就不會有人批準更改。任何依賴該工具的測試最終都會失敗,因為代碼會隨著時間推移變得過時,而且與新技術不再兼容。
事件凸顯了開源軟件社區(qū)日益關注的一個問題。當程序員過世后他們所編寫的代碼會怎么樣?關于在用戶死后其社交媒體賬戶會發(fā)生什么的文章已經寫得很多了。但關于程序員過世這個問題沒有那么嚴重。部分原因是因為大多數公司和政府所運行的都是商業(yè)軟件,都有專人維護。但現暫,更多的程序依賴于像Weirich這樣的程序員所開發(fā)的晦澀難懂但卻重要的開源軟件。
一些開源項目是眾所周知的,如Linux操作系統(tǒng)或Google的人工智能框架TensorFlow。但是這些項目中都依賴于更小的開源代碼庫。而這些開源代碼庫又是基于另一個代碼庫。結果構成了一個復雜的,不為人知的彼此依存的軟件網絡。
這可能會帶來很大的問題,如 2014 年,在OpenSSL中發(fā)現了一個被稱為“Heartbleed”的安適漏洞,幾乎每個處理信用卡或借記卡支付過程的網站都會使用這個開放源代碼程序。該軟件與大多數Linux版本綁縛在一起,但由幾個志愿者維護,他們沒有時間或資源進行廣泛的安適審計。在Heartbleed安適漏洞被發(fā)現后不久,在另一個常見的開源應用程序Bash中也發(fā)現了一個同樣的安適問題,這使得無數的Web辦事器和其他設備很容易受到攻擊。
必定還有更多未發(fā)現的漏洞。 Libraries.io是一個分析軟件項目之間關系的團隊,其已經確定了超過2, 400 個開源代碼庫在其他 1000 個程序中使用,但是很少受到開源社區(qū)的關注。
安適問題只是這個問題的一部分。如果軟件庫無法及時更新,軟件升級后也就無法運行。這意味著在用戶在更新了相應軟件之后,那些依賴于過期庫的應用程序可能無法工作。當維護代碼庫的開發(fā)人員離世或放棄一個項目時,使用該軟件的每個人都會受到影響。去年,當程序員AzerKo ulu從互聯網上刪除了一個叫做Leftpad的代碼庫后時,它造成了漣漪效應,據說在Facebook,Netflix和其他很多地方都引起了令人頭痛的問題。
大巴系數
一個開源軟件的維護者越少,其被孤立的風險就越大。開發(fā)商甚至有這樣一個病態(tài)的名字:大巴系數,這意味著在沒有人維護開源項目的情況下會受到影響的人數。 Libraries.io已經確定了大約 3000 個開源庫,在許多其他程序中使用,但只有極少數的人在默默貢獻。
項目孤立是使用開源軟件的風險,但商業(yè)軟件制造商也可能會停止支持或更新舊程序,從而給用戶帶來同樣的麻煩。在某些情況下,醉翁之意的程序員會采用孤立的開源代碼。
這就是Searls在處理Weirich開源項目中遇到的一個問題。 Weirich最受歡迎的項目在他去世的時候有共同辦理者。但是Searls注意到一個測試工具Rspec-Given沒有被移交出去,他有意負責更新,但一路上遇到了不少麻煩。
Rspec-Given的代碼托管在代碼托管和協作站點GitHub上,后者目前擁有 6700 萬個代碼庫。 Weirich在GitHub上的Rspec-Given頁面是其他Ruby用戶陳訴錯誤或自愿幫手改進代碼的主要地方。但GitHub不會讓Searls控制這個頁面,因為Weirich在他去世之前還沒有進行命名。所以Searls必需創(chuàng)建一個新的代碼副本,并將其轉移到其他地方。他還必需說服分發(fā)代碼的“包辦理系統(tǒng)”Ruby Gems運營商使用他的Rspec-Given版本,而不再是Weirich的版本,,以便使所有用戶都能拜候的變換。 GitHub拒絕討論其關于轉移項目控制的政策。
相關方法能夠解決與Rspec-Given有關的潛在問題,但是它也讓Searls看到了許多可能出潛在問題。 Searls說:“我們很容易將開源看作一種純粹的技術現象。但是,一旦有些事情產生,而且被其他人所依賴,這也是一種社會現象。”
大多數軟件包辦理系統(tǒng)的維護人員至少有一個專門的流程來轉移對庫的控制權,但是這個過程通常取決于是否有人能夠注意到項目已經被孤立,然后自愿接管它。 Ruby Gems項目的Evan Phoenix說:“我們沒有官方政策,主要是因為它不會經常出現。 “我們有一個顧問委員會,用來逐個處理這種類型的事情。”