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