- +1
創(chuàng)造無(wú)數(shù)價(jià)值的開(kāi)源程序員們,竟是在為愛(ài)發(fā)電?
開(kāi)源正在面臨崩塌。
這是從1987年到2020年,世界上最大的開(kāi)源開(kāi)發(fā)者平臺(tái)Github上的項(xiàng)目活躍度和貢獻(xiàn)者人數(shù)變化趨勢(shì)。

你很容易發(fā)現(xiàn),從2012年起,兩個(gè)指標(biāo)都出現(xiàn)了斷層式下滑,現(xiàn)在已經(jīng)掉回了本世紀(jì)初的水平。
讓我們從一個(gè)開(kāi)發(fā)者的故事中,來(lái)看看這一切發(fā)生的原因。
一、崩塌的理想
九年前的一晚,俄羅斯開(kāi)發(fā)者Denis Pushkarev發(fā)布了Core-js。
五年之后,他卻面臨牢獄之災(zāi)。
2014年,當(dāng)時(shí)的JavaScript(一種在Web開(kāi)發(fā)中具有非常重要地位的腳本語(yǔ)言)缺乏一個(gè)足夠龐大的標(biāo)準(zhǔn)庫(kù),也就是編程語(yǔ)言的常用功能和工具集合,而且有著嚴(yán)重的兼容性問(wèn)題。
開(kāi)發(fā)人員必須要自己編寫(xiě)一些數(shù)據(jù)結(jié)構(gòu)和算法,或者使用第三方庫(kù)才能夠完成自己的工作。而有些代碼在不同瀏覽器之間存在差異,經(jīng)常無(wú)法運(yùn)行。
世界各地的互聯(lián)網(wǎng)公司和程序員屢次嘗試,但都沒(méi)有很好地解決這些問(wèn)題。
那一晚,Denis讓這些問(wèn)題成為了過(guò)去式。為了讓無(wú)數(shù)的開(kāi)發(fā)者更加方便地使用JavaScript,他將自己的Core-js作為開(kāi)源項(xiàng)目發(fā)布了出去。
但是如今,Denis卻將這一決定稱為“一生中最大的錯(cuò)誤”。
Core-js是一個(gè)全面的JavaScript標(biāo)準(zhǔn)庫(kù),可以在很大程度上讓開(kāi)發(fā)者們避免JavaScript之前一直存在的問(wèn)題。
用一個(gè)簡(jiǎn)單的比喻,Core-js對(duì)于Java開(kāi)發(fā)者而言就像一把瑞士軍刀,易攜而且能夠很快解決他們此前頗為棘手的各項(xiàng)問(wèn)題。它的出現(xiàn)意味著開(kāi)發(fā)者們可以更快速、便捷地開(kāi)發(fā)和部署Web應(yīng)用程序。這給開(kāi)發(fā)者們帶來(lái)了曙光。
得益于此,Core-js一經(jīng)開(kāi)源就深受開(kāi)發(fā)者們的歡迎,初期傳播便呈指數(shù)級(jí)增長(zhǎng)。下面的第一張圖表示的是Core-js的每月下載量的變化趨勢(shì),而第二張則表示下載量累加值的變化趨勢(shì)。你會(huì)很快發(fā)現(xiàn)它的下載量是多么驚人,并且長(zhǎng)期以來(lái)處于增長(zhǎng)態(tài)勢(shì)。
時(shí)至今日,Core-js的下載量累加值已經(jīng)超過(guò)了76億次,相當(dāng)于地球上每個(gè)人都人均下載一次。當(dāng)然,考慮到前端程序員在我們生活中占比少數(shù),可想而知它在代碼世界中的重要性。

“我可以肯定地說(shuō),大多數(shù)流行網(wǎng)站都在使用Core-js。而且不僅僅是關(guān)于網(wǎng)站前端,幾乎所有使用JavaScript的地方都有Core-js的身影?!盌enis說(shuō)。
這句話展現(xiàn)了他的能力非凡,但帶有一絲自嘲的味道。
原因在于:如此高的下載量卻沒(méi)有給他帶來(lái)一分錢(qián)的收入,只因?yàn)檫@是一個(gè)開(kāi)源庫(kù)。進(jìn)一步的,這個(gè)開(kāi)源庫(kù)的維護(hù)工作還將他拖入了深淵。
Core-js并不是一個(gè)可以寫(xiě)完就丟在一邊的項(xiàng)目,它和Web的狀態(tài)綁定,需要時(shí)刻更新維護(hù)。出于對(duì)項(xiàng)目的負(fù)責(zé),Denis身陷于此。他漸漸發(fā)現(xiàn),自己沒(méi)有精力同時(shí)兼顧本職工作和對(duì)它的維護(hù)。
一開(kāi)始,Denis希望能夠找到與他志同道合的其他開(kāi)發(fā)者加入維護(hù)項(xiàng)目,但均以失敗告終。沒(méi)有人愿意和他完成這項(xiàng)沒(méi)有任何報(bào)酬的工作。
于是,他最終選擇辭掉原本的高薪工作,全職從事開(kāi)源——那時(shí)候的他以為“金錢(qián)不是第一要義”。
之后的幾年,雖然Denis失去了工作,但靠著一些短期合同,還能夠保持體面的生活。
直到2019年的那場(chǎng)車禍。
那年,Denis因摩托車禍致人傷亡,被判入獄18個(gè)月。這意味著,在一年半的時(shí)間里,這個(gè)對(duì)世界互聯(lián)網(wǎng)如此重要的Core-js將無(wú)法被維護(hù)。
Denis試圖與受害者和解,但高昂的賠償和律師費(fèi)讓他無(wú)力承擔(dān)。他在開(kāi)源平臺(tái)上募集贊助,結(jié)果一個(gè)月間,只收到了57美元。與此同時(shí),Denis聯(lián)系了很多開(kāi)源開(kāi)發(fā)者,希望對(duì)方能夠在他服刑期間幫助維護(hù)Core-js,但乏人響應(yīng)。
最終,Denis籌措不到和解資金,認(rèn)罪入獄,并在十個(gè)月后提前出獄。在此期間,Denis只能委托一位不搞開(kāi)源的朋友負(fù)責(zé)項(xiàng)目基礎(chǔ)維護(hù)。
出獄后,Denis仍在堅(jiān)持維護(hù)Core-js。但一個(gè)月400美元的微薄收入,讓已經(jīng)成為父親的他力不從心。他正在重新考慮自己的選擇和努力是否真的正確。
“我受夠了以犧牲我和家人的幸福為代價(jià),來(lái)幫助無(wú)數(shù)大公司了。我想要確保我家人的生活,想讓我兒子有一個(gè)光明的未來(lái)?!?/p>
二、無(wú)名的英雄
在萬(wàn)千開(kāi)源工作者的生涯中,這樣的故事不是個(gè)例。他們?yōu)榱烁篮玫幕ヂ?lián)網(wǎng)世界作出貢獻(xiàn),但現(xiàn)實(shí)很難報(bào)之以歌。
開(kāi)源項(xiàng)目,指的是開(kāi)放源代碼、公開(kāi)使用且非盈利的項(xiàng)目。它們可以是完整可用的應(yīng)用程序,而有一些項(xiàng)目是用于組成其他程序的模塊。程序員們使用這些開(kāi)源模塊來(lái)構(gòu)建自己的應(yīng)用程序、網(wǎng)頁(yè)等。
用最簡(jiǎn)單的話說(shuō),開(kāi)源等于你將自己的軟件工作贈(zèng)予了世界。
這樣做的意義是什么?在于它打破了大公司的技術(shù)壟斷,讓平民能夠用上便宜的技術(shù)。
傳統(tǒng)的商業(yè)軟件通常需要支付昂貴的許可證費(fèi)用才能夠使用,這是小企業(yè)和個(gè)人無(wú)法承受的。但開(kāi)源的出現(xiàn)打破了這一局面,讓小型組織獲得以往難以想象的創(chuàng)新和發(fā)展機(jī)會(huì)。開(kāi)源者在其中謀求的,是精神上的富足。
此外,開(kāi)源項(xiàng)目的開(kāi)發(fā)模式與人們此前理解的軟件開(kāi)發(fā),有著很大的區(qū)別。
你可以把開(kāi)源程序看做積木,在一個(gè)開(kāi)源程序的生命周期中,它們會(huì)參與成千上萬(wàn)個(gè)應(yīng)用程序的構(gòu)建,就像一塊塊積木可以搭建成不同的城堡。也正因如此,開(kāi)源程序必須時(shí)刻保持更新,使其能夠兼容最新版本應(yīng)用程序的開(kāi)發(fā)。
當(dāng)人們想要開(kāi)發(fā)一個(gè)開(kāi)源項(xiàng)目時(shí),他們一般會(huì)先提出問(wèn)題和建議,這些問(wèn)題和建議由一個(gè)或一組維護(hù)者來(lái)管理。接著,維護(hù)者與開(kāi)發(fā)者討論開(kāi)發(fā)的方向和實(shí)現(xiàn)方法,并規(guī)劃好每個(gè)階段的目標(biāo)和時(shí)間表。
開(kāi)發(fā)者根據(jù)討論和規(guī)劃編寫(xiě)代碼,并定期將代碼提交到Github上的倉(cāng)庫(kù)中。每個(gè)提交的代碼都對(duì)應(yīng)一個(gè)特定的功能或修復(fù),這些功能和修復(fù)可能由多個(gè)開(kāi)發(fā)者完成。開(kāi)發(fā)者通常采用分支開(kāi)發(fā)模式,每個(gè)分支對(duì)應(yīng)一個(gè)特定的功能或修復(fù)。
當(dāng)一個(gè)功能或修復(fù)完成后,開(kāi)發(fā)者會(huì)提交一個(gè)合并請(qǐng)求到倉(cāng)庫(kù)中,請(qǐng)求維護(hù)者審核并合并代碼。維護(hù)者會(huì)審核合并請(qǐng)求中的代碼,并提出修改意見(jiàn)或建議。開(kāi)發(fā)者再根據(jù)維護(hù)者的反饋進(jìn)行修改,再次提交請(qǐng)求。維護(hù)者最終審核通過(guò)后,會(huì)將代碼合并到主分支中。這樣,開(kāi)源項(xiàng)目就能不斷地得到更新和改進(jìn),更好地滿足用戶的需求。
簡(jiǎn)單來(lái)說(shuō),做開(kāi)源項(xiàng)目就像是很多人一起蓋房子,維護(hù)者是這座房子的總設(shè)計(jì)師,但是其他開(kāi)發(fā)者也都可以一起完善這座房子,根據(jù)自己的想法提出意見(jiàn)并改建。久而久之,這座房子在眾人的加工下變得日益精美、完善。最后,不僅是開(kāi)發(fā)者,任何人都可以拷貝這套房子的圖紙,用它來(lái)修繕自己的家。
開(kāi)源開(kāi)發(fā)者們也有自己的生活和工作,但是為了更好的互聯(lián)網(wǎng)、更好的世界,他們成為了志愿者,無(wú)償?shù)胤窒碜约旱募夹g(shù)和天才般的想法,為社區(qū)和用戶提供更好的產(chǎn)品和服務(wù)。
而在這樣的共建過(guò)程中,開(kāi)發(fā)者們可以自由坦誠(chéng)地相互交流和學(xué)習(xí)。遇到不懂的難題,總會(huì)有“大佬”伸出援手,帶領(lǐng)更多的后輩繼續(xù)探索無(wú)垠的代碼世界。這樣的模式與環(huán)境培養(yǎng)了可觀的技術(shù)人才。
因此,你可以從這樣的模式中理解,開(kāi)源開(kāi)發(fā)者們很難獲得收益。一般來(lái)說(shuō),一個(gè)開(kāi)源項(xiàng)目也提倡捐款,或者由開(kāi)源基金會(huì)統(tǒng)一收集捐贈(zèng)款項(xiàng)。但作為一個(gè)非強(qiáng)制性的政策,捐款得來(lái)的收益自然就聊勝于無(wú)了。
下面是Github歷史上最熱門(mén)的開(kāi)源項(xiàng)目。

你還會(huì)看到那些提交了最多代碼的開(kāi)源貢獻(xiàn)者們,他們對(duì)于今天的世界互聯(lián)網(wǎng)搭建舉足輕重。但他們的名字卻鮮為人知,就像是黑夜里的英雄,無(wú)法被人關(guān)注。

“每天擠時(shí)間持續(xù)維護(hù)了8年,不僅累,而且不賺錢(qián),也沒(méi)幾個(gè)人用,純靠興趣,但還是會(huì)繼續(xù)維護(hù)下去?!?/strong>國(guó)內(nèi)知名開(kāi)源開(kāi)發(fā)者Ruki表示。盡管面臨重重困難,但他仍舊打算繼續(xù)自己的開(kāi)源之路。
2021年,知名軟件包管理平臺(tái)Tidelift發(fā)布的開(kāi)源維護(hù)者調(diào)查報(bào)告顯示,開(kāi)源維護(hù)者們最在意的事情是通過(guò)自己的努力讓世界更美好,只有很少的人會(huì)在意獲得的報(bào)酬。

同樣的,Tidelift也調(diào)查了這些開(kāi)源開(kāi)發(fā)者們每年的收入。發(fā)現(xiàn)近半數(shù)開(kāi)發(fā)者并不能從他們的開(kāi)源工作中獲得一分錢(qián)的收入,而只有約13%的開(kāi)發(fā)者能夠僅憑開(kāi)源項(xiàng)目維持生計(jì)。

三、困獸的牢籠
“為愛(ài)發(fā)電”很難持續(xù)。Github社區(qū)因此面臨了我們開(kāi)頭提到的衰落。
尤其是,停止維護(hù)的開(kāi)源項(xiàng)目數(shù)量也在逐年增加。截至2021年,可獲取的數(shù)據(jù)顯示,絕大多數(shù)開(kāi)源項(xiàng)目已處于廢棄(超過(guò)一年不再更新)狀態(tài)。

到了現(xiàn)在,GitHub上有近半的代碼已經(jīng)無(wú)法使用(無(wú)法適配其依賴內(nèi)容),可以預(yù)見(jiàn),這樣的比例還會(huì)繼續(xù)上升。

而是什么導(dǎo)致了這一現(xiàn)象?
首先,開(kāi)源開(kāi)發(fā)的志愿者基數(shù)正在減少。隨著免費(fèi)開(kāi)發(fā)開(kāi)源項(xiàng)目的志愿者的數(shù)量減少,有償?shù)拈_(kāi)源開(kāi)發(fā)工作并未增加到足以填補(bǔ)這個(gè)空缺。就像一塊大蛋糕被削掉了一大塊,但我們又沒(méi)有足夠的奶油去填滿這個(gè)大洞。越來(lái)越多的開(kāi)源項(xiàng)目因此慢慢被放棄維護(hù)。
其次,公司的資源管理模式也影響了開(kāi)源開(kāi)發(fā)。現(xiàn)在,比起無(wú)償?shù)闹驹复a貢獻(xiàn),有償?shù)拇a貢獻(xiàn)變得越來(lái)越常見(jiàn)。公司希望程序員們將更多時(shí)間用于開(kāi)發(fā)公司需要的功能,縮減了他們的空閑時(shí)間,影響他們無(wú)償開(kāi)發(fā)自己想要的開(kāi)源功能。
此外,參與開(kāi)源項(xiàng)目的行為正在發(fā)生變化。越來(lái)越多的人選擇偶然性地參與,比如修復(fù)一些小錯(cuò)誤或提出一些建議,而非長(zhǎng)期貢獻(xiàn)。這就好比過(guò)去的志愿者愿意長(zhǎng)期在公園做環(huán)保清潔工作,現(xiàn)在則更多的人只是路過(guò)時(shí)順手撿起一片垃圾。
最后,開(kāi)源項(xiàng)目的質(zhì)量正在逐年下降。越來(lái)越多參與者提交的代碼質(zhì)量低,讓開(kāi)源項(xiàng)目擁有者的審核工作量加大,負(fù)擔(dān)加重。就像在一個(gè)篩選果子的過(guò)程中,如果我們發(fā)現(xiàn)大部分的果子都有病蟲(chóng)害,那么這個(gè)篩選過(guò)程就會(huì)變得更加繁重和復(fù)雜。
不僅如此,開(kāi)發(fā)者們開(kāi)源的目的正在悄然改變。開(kāi)源曾經(jīng)是純粹的集體志愿服務(wù),現(xiàn)在則更多地被看作是個(gè)人職業(yè)發(fā)展的方式。這就像過(guò)去人們?yōu)榱斯娑驹钢矘?shù),現(xiàn)在則是為了積攢履歷和提高職業(yè)技能。
隨著技術(shù)的不斷進(jìn)步,代碼變得越來(lái)越復(fù)雜,對(duì)開(kāi)發(fā)人員的技能要求也越來(lái)越高。對(duì)于初學(xué)者來(lái)說(shuō),這就好像他們剛剛學(xué)會(huì)了游泳,卻被要求跳進(jìn)一個(gè)無(wú)底深淵。
以下是一些具體的例子,它們能進(jìn)一步揭示開(kāi)源領(lǐng)域的問(wèn)題和挑戰(zhàn)。
第一個(gè)案例是James,他曾參與一個(gè)名為Apache的開(kāi)源項(xiàng)目。然而,他很快就遇到了困境。他表示:“治理問(wèn)題對(duì)我來(lái)說(shuō)遠(yuǎn)比提交的補(bǔ)丁更為復(fù)雜,讓我感到束手無(wú)策?!本拖褚粋€(gè)家庭主婦在整理一堆雜亂無(wú)章的衣物,不知道從哪里開(kāi)始,這種情況無(wú)疑讓人感到挫敗。
第二個(gè)例子是一個(gè)開(kāi)發(fā)者遇到了一種新的編碼風(fēng)格,也就是每一位開(kāi)發(fā)者寫(xiě)代碼時(shí)所獨(dú)有的特殊風(fēng)格,他在此前的編程工作中從未接觸,因此他對(duì)此并不認(rèn)同。他需要將自己的模塊修改到這種規(guī)范格式上,他感到既無(wú)意義又無(wú)聊。這就像讓一個(gè)藝術(shù)家在畫(huà)布上需要嚴(yán)格按照他不贊同的風(fēng)格創(chuàng)作,創(chuàng)作過(guò)程自然乏味。
最后一個(gè)例子是一個(gè)項(xiàng)目的糟糕維護(hù)。該項(xiàng)目的一位貢獻(xiàn)者表示,他搞不清楚自己做的事情是否符合項(xiàng)目的要求。當(dāng)他向項(xiàng)目維護(hù)者提出這個(gè)問(wèn)題時(shí),維護(hù)者的回復(fù)是讓他自己找方法解決。這就好像一個(gè)廚師正在準(zhǔn)備一道復(fù)雜的菜肴,卻發(fā)現(xiàn)菜譜描述得太糟糕,而當(dāng)他向?qū)懖俗V的人詢問(wèn)時(shí),卻被告知需要自己去摸索。這種情況無(wú)疑令人感到沮喪,最終他選擇了放棄。
四、最后的吶喊
上面的數(shù)據(jù)在冷酷無(wú)情地告訴我們:開(kāi)源正在逐漸消失。早晚有一天,它可能會(huì)不見(jiàn)蹤影。充滿熱情與自由的互聯(lián)網(wǎng)世界,恐怕真的會(huì)離我們遠(yuǎn)去。
那么,我們能為開(kāi)源做些什么呢?
或許我們并不懂編程,但是我們可以打開(kāi)Github,看看那些開(kāi)源作者們都做了哪些貢獻(xiàn),要是看到比較欣賞的,可以點(diǎn)個(gè)星標(biāo)或者關(guān)注。是的,對(duì)于開(kāi)源開(kāi)發(fā)者們而言,精神上的鼓勵(lì),比金錢(qián)更能讓他們滿足。
如果手頭有點(diǎn)閑錢(qián),我們可以很方便地找到一些開(kāi)源基金會(huì),給它們一些資金上的支持。這些資金可謂雪中送炭,會(huì)幫助開(kāi)源開(kāi)發(fā)者們讓他們渡過(guò)難關(guān),繼續(xù)堅(jiān)持自己的理想,為這個(gè)世界做出更多貢獻(xiàn)。
或許你也學(xué)過(guò)一點(diǎn)編程,也有時(shí)間和興趣繼續(xù)在這個(gè)領(lǐng)域鉆研。那么歡迎你加入開(kāi)源共建,和廣大的開(kāi)源開(kāi)發(fā)者們一起,成為這個(gè)世界的英雄。不用擔(dān)心自己技術(shù)不夠好,能力不夠強(qiáng),因?yàn)槟銜?huì)發(fā)現(xiàn)身邊的每一個(gè)開(kāi)源作者都會(huì)耐心地指導(dǎo)你,你的疑問(wèn)和困難總是會(huì)有人給你意見(jiàn)。
直到有一天你也成了他們。
作者:池光耀,沈巖松,梁子平,趙靖文
指導(dǎo)老師:趙鹿鳴
本文為上海外國(guó)語(yǔ)大學(xué)新聞傳播學(xué)院《數(shù)據(jù)可視化》(本科)課程作品
參考資料:
[1]知乎:如何看待國(guó)內(nèi)開(kāi)源項(xiàng)目的不可持續(xù)性https://www.zhihu.com/question/355691918/answer/2076173699
[2]差評(píng):坐擁千萬(wàn)用戶的大佬,竟然窮到刪庫(kù)跑路?https://mp.weixin.qq.com/s/gZkyKtzPD4RsXS7DVl-Vpw
[3]2021_Tidelift_Maintainer_Survey_FINAL.pdf https://tidelift.com/subscription/the-tidelift-maintainer-survey#form
[4]白開(kāi)水不加糖: 開(kāi)源如此火熱,但研究表明該領(lǐng)域已不再增長(zhǎng) - OSCHINA https://www.oschina.net/news/118100/open-source-is-not-growing-anymore
[5]CSDN:入獄 10 月、網(wǎng)暴不斷,并掙扎在溫飽線!超 90 億次下載的開(kāi)源項(xiàng)目,背后是這樣的9年 https://mp.weixin.qq.com/s/TSY5_ZWzkaaS0obhFfs3Vg
[6]Michael Dornera, Maximilian Caprarob, Ann Barcombc, Krzysztof Wnuka:A Replication Study on Measuring the Growth of Open Source https://arxiv.org/pdf/2008.07753.pdf
[7]michaeldorner:Quo Vadis, Open Source? - GitHub https://github.com/michaeldorner/quo-vadis-open-source
本文為澎湃號(hào)作者或機(jī)構(gòu)在澎湃新聞上傳并發(fā)布,僅代表該作者或機(jī)構(gòu)觀點(diǎn),不代表澎湃新聞的觀點(diǎn)或立場(chǎng),澎湃新聞僅提供信息發(fā)布平臺(tái)。申請(qǐng)澎湃號(hào)請(qǐng)用電腦訪問(wèn)http://renzheng.thepaper.cn。





- 報(bào)料熱線: 021-962866
- 報(bào)料郵箱: news@thepaper.cn
滬公網(wǎng)安備31010602000299號(hào)
互聯(lián)網(wǎng)新聞信息服務(wù)許可證:31120170006
增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:滬B2-2017116
? 2014-2025 上海東方報(bào)業(yè)有限公司




