《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 開(kāi)源社區(qū)的暗面

開(kāi)源社區(qū)的暗面

2021-07-10
來(lái)源:CSDN
關(guān)鍵詞: 開(kāi)源社區(qū)

  “How to Use Open Source and Shut the Fuck Up At the Same Time”

  去年在用 Node.js 編寫(xiě)一個(gè) side project 的過(guò)程中,因?yàn)樾枰刹煌谌骄W(wǎng)站的 OAuth 登陸,所以接觸到了 passport.js 。雖然各類(lèi)渠道都表明它似乎是 OAuth 解決方案的不二之選,但是在實(shí)際集成的過(guò)程中發(fā)現(xiàn)問(wèn)題頗多,在前往 GitHub 上查看有沒(méi)有相關(guān)的 issue 時(shí),驚訝的發(fā)現(xiàn) passport-github (passport 下允許使用 GitHub 進(jìn)行 OAuth 登陸的子模塊 )已經(jīng)至少有兩年沒(méi)有新的代碼提交了。正在我納悶這個(gè)項(xiàng)目還會(huì)不會(huì)繼續(xù)維護(hù)時(shí),在主項(xiàng)目 passport 的 issue 里也找到了提出了相同問(wèn)題的人:Library still mantained?這則 issue 的討論非常簡(jiǎn)短,很快就能閱讀完畢。在我看來(lái)最能體現(xiàn)項(xiàng)目維護(hù)者對(duì)于這個(gè)問(wèn)題的答復(fù),是他直接對(duì)于這則文章的引用:

  “

  ”How to Use Open Source and Shut the Fuck Up At the Same Time“

  ”

  你甚至不用讀完整篇文章,光是看標(biāo)題就大致明白他的態(tài)度如何了。這篇文章含標(biāo)題在內(nèi)一共使用了 fuck 這個(gè)單詞8次。它所表達(dá)的是作者對(duì)于開(kāi)源社區(qū)目前“衣來(lái)伸手,飯來(lái)張口”和“端起碗吃肉,放下筷子罵娘”現(xiàn)象的不滿:作者認(rèn)為項(xiàng)目維護(hù)者完全是無(wú)償在貢獻(xiàn)出自己的時(shí)間,且從中沒(méi)有絲毫的獲利,也就沒(méi)有義務(wù)滿足任何人提出的任何需求;作者還認(rèn)為使用開(kāi)源項(xiàng)目完全是各位自己的決定,不愛(ài)用就滾——雖然“滾”這個(gè)詞在是我提煉出來(lái)的,但用來(lái)表達(dá)作者的態(tài)度一點(diǎn)都不夸張。

  這篇文章的作者可不是名不見(jiàn)經(jīng)傳的無(wú)名小輩,他是 Eran Hammer,是 Node.js 社區(qū)中赫赫有名的 web 框架 hapijs 和數(shù)據(jù)驗(yàn)證類(lèi)庫(kù) joi 的核心貢獻(xiàn)者之一,在 GitHub 上有超過(guò) 2k 的關(guān)注者。

  過(guò)去一年因?yàn)楣ぷ鞯年P(guān)系,我需要和越來(lái)越多的開(kāi)源項(xiàng)目打交道,自然就被動(dòng)地接觸到了開(kāi)源社區(qū)中各種討論甚至爭(zhēng)吵。雖然這些內(nèi)容最終只不過(guò)淪為我和朋友們茶余飯后的談資, 但聯(lián)想到幾年前 event-stream 被植入惡意代碼 以及 antd 的圣誕節(jié)彩蛋 等一系列事件,不得不承認(rèn)這些“八卦”已然讓我對(duì)開(kāi)源社區(qū)的信心產(chǎn)生動(dòng)搖。終于, passport.js 作者的這則令我不適的回復(fù)則徹底點(diǎn)燃了我的好奇心:

  我們究竟應(yīng)該以怎樣的姿態(tài)與開(kāi)源項(xiàng)目相處?

  這個(gè)時(shí)候我才發(fā)現(xiàn)似乎我們每個(gè)人都置身其中,但實(shí)際上我們每個(gè)人也都置身事外:你可能下載過(guò) lodash 這個(gè)類(lèi)庫(kù)成千上萬(wàn)次,但是卻對(duì)它背后的維護(hù)團(tuán)隊(duì)、演進(jìn)路線和發(fā)布節(jié)奏一無(wú)所知;你會(huì)在antd 的圣誕節(jié)彩蛋事件的 issue 下會(huì)看到很多大跌眼鏡的評(píng)論,但仔細(xì)想來(lái)你也無(wú)法對(duì)其擲地有聲地反駁;拋開(kāi) Eran Hammer 文章中情緒化的文字,他所想表達(dá)的觀點(diǎn)也并不無(wú)道理:項(xiàng)目消費(fèi)者的權(quán)利和貢獻(xiàn)者的義務(wù)是否具有天然正當(dāng)性的?

  這篇文章不會(huì)對(duì)上述的任何一個(gè)問(wèn)題予以解答,它只不過(guò)是一個(gè)旁觀者在碎碎念中表達(dá)出來(lái)的個(gè)人意見(jiàn)而已,充其量豐富了你的認(rèn)知。你所認(rèn)可的答案,要靠你自己去探索才行,但它并非完全沒(méi)有意義——借用賈樟柯2013年在接受《三聯(lián)生活周刊》采訪時(shí)說(shuō)過(guò)一段話:我拍《天注定》就是想從中跳出來(lái)告訴大家,我們正在經(jīng)歷的時(shí)代到底是怎樣的,只有把我們正在經(jīng)歷什么搞清楚,可能接下來(lái)才能知道將來(lái)要怎么辦——同樣地,開(kāi)源社區(qū)也值得被審視和反思。落到我們的個(gè)人利益上,如果你正有打算發(fā)布開(kāi)源項(xiàng)目的沖動(dòng)或者回饋開(kāi)源社區(qū)的想法,這篇文章在這些方面都能給你一些建議。

  當(dāng)我們?cè)谶@篇文章中將自己抽離出來(lái)重新認(rèn)識(shí)開(kāi)源社區(qū)時(shí),我們審視的并不是空氣,而是實(shí)實(shí)在在的人和真真切切的事。所以文章選取了大量開(kāi)源社區(qū)中的事例,來(lái)對(duì)觀點(diǎn)進(jìn)行說(shuō)明,這些事例的選取是有傾向性的——我們當(dāng)然可以暢想如果沒(méi)有 Richard Stallman 或者 Linus Torvalds 開(kāi)源社區(qū)會(huì)怎么樣;如果沒(méi)有 GitHub 的話 mailing list 的協(xié)作方式會(huì)比現(xiàn)在更好嗎?但很多時(shí)候與其追求宏大敘事,不如隨手截取一些開(kāi)源社區(qū)的剖面展示在大家面前,這些接地氣的例子始終會(huì)比 那些高高在上的假設(shè)更具有說(shuō)服力一些。

  “On whose authority?”

  Chris Zheng 在2017年發(fā)表了一篇名為 _On whose authority? _的文章,在這篇文章中他敘述了他個(gè)人從加入Clojure社區(qū)到失望離開(kāi)的經(jīng)歷,并且著力痛斥了導(dǎo)致他離開(kāi)的主要原因 1. 迷信明星程序員;2. 忽略社區(qū)的聲音;他認(rèn)為這些問(wèn)題是由 Clojure 背后的商業(yè)贊助公司 cognitect 一手造成的。

  這篇文章中頻繁提到的明星程序員之一 Rich Hickey 在 Reddit 上對(duì)文章里提到的問(wèn)題一一進(jìn)行了回應(yīng),在回復(fù)的最后,他也毫不客氣地指出對(duì)于開(kāi)源社區(qū)的攻擊等同于對(duì)所有無(wú)償付出的貢獻(xiàn)者的否定:

  “

  ……In the end it's about people. You can't say fk XYZ and deny that it is an attack on the people who work on XYZ…… it's a bunch of people with families trying to make a living, pay their mortgages and send their kids to college. And, if you are talking about Clojure, you are talking to me. The indirection doesn't mask the attack on people, their work and their choices.

  ”

  咨詢行業(yè)中的金句“不管一開(kāi)始看起來(lái)什么樣,它永遠(yuǎn)是人的問(wèn)題”(溫伯格《咨詢的奧秘》)在這里也同樣成立——雖然我們?nèi)湓掚x不開(kāi)“社區(qū)”,離不開(kāi)“項(xiàng)目”,但我們談?wù)摰谋举|(zhì)都是人的問(wèn)題。

  事件背后的孰是孰非暫且擱置,不過(guò)這個(gè)“On whose authoirty?”(誰(shuí)說(shuō)的算?)實(shí)在是一個(gè)再經(jīng)典不過(guò)的問(wèn)題了:當(dāng)一個(gè)開(kāi)源項(xiàng)目發(fā)布到開(kāi)源社區(qū)之后,項(xiàng)目的擁有者是依然享有“統(tǒng)治”它的權(quán)力,還是應(yīng)該交由另一類(lèi)人群來(lái)管理,是一個(gè)經(jīng)久不衰的話題。

  大部分真實(shí)情況沒(méi)有那么復(fù)雜:誰(shuí)擁有代碼倉(cāng)庫(kù)提交權(quán)限,誰(shuí)就有最后的決策權(quán),甚至是生殺大權(quán):所以 Linus Torvalds 才得以排除眾議堅(jiān)持 Linux 應(yīng)該使用 GPL-2.0 而非 3.0 的開(kāi)源協(xié)議;而 Dave Gamache 可以選擇從2014年開(kāi)始不再維護(hù) skeleton,哪怕這個(gè)項(xiàng)目在 GitHub 上的收藏?cái)?shù)量已經(jīng)達(dá)到了 18.2k 次。

  但現(xiàn)實(shí)是作為項(xiàng)目的維護(hù)者,你很難忽略社區(qū)發(fā)出的聲音。或者準(zhǔn)確來(lái)說(shuō),阻止社區(qū)發(fā)出聲音。當(dāng)我們承認(rèn)這個(gè)無(wú)法避免的事實(shí)之后問(wèn)題就變成了,應(yīng)該如何對(duì)待社區(qū)的這些聲音。

  讓我們看一個(gè)實(shí)際的例子。

  prettier 是一個(gè)將前端代碼格式化的工具,去年中旬開(kāi)發(fā)者 Vadorequest 以 issue 的方式向社區(qū)提出了一則建議,他認(rèn)為目前 pretttier 格式化過(guò)于追求格式美觀,而忽略了代碼的可讀性,他希望工具在設(shè)計(jì)格式化規(guī)則時(shí),能夠?qū)⒏袷交蟠a的可讀性也考慮其中。

  如果你是項(xiàng)目的維護(hù)者你會(huì)怎么看待這則建議?獨(dú)立來(lái)看它的目的只是改善愿景,甚至不存在代碼改動(dòng)的成本,采納也未嘗不可。但如果我們把它歸納到 feature request 的標(biāo)簽下整體看這一類(lèi)需求的話,恐怕盡善盡美滿足每一則提議是不現(xiàn)實(shí)的,一方面因?yàn)椋ㄎ以谙乱还?jié)會(huì)談到)維護(hù)者的精力有限,另一方面有的建議在提出時(shí)并非是經(jīng)過(guò)深思熟慮的,甚至不同建議之間當(dāng)中還會(huì)存在互相矛盾的情況。這種體驗(yàn)和你作為 leader 在團(tuán)隊(duì)中進(jìn)行技術(shù)決策非常相似:在項(xiàng)目架構(gòu)演化過(guò)程中會(huì)面臨太多的誘惑和方向以供選擇,我相信每一個(gè)給出這些建議的人都是出自真心,我也相信每一則建議都有它的道理,但你才是最終為決策負(fù)責(zé)的人。

  即便這樣的技術(shù)決策并非出自于個(gè)人之手,但也只可能出自于人數(shù)有限的小團(tuán)體之中。因?yàn)榧w的決策成本太高,它絕非是最佳實(shí)踐?!秷F(tuán)隊(duì)協(xié)作的五大障礙》一書(shū)中指出的協(xié)作障礙之一就是欠缺投入,而欠缺投入的其中一個(gè)最重要原因就是追求絕對(duì)一致?;叵肽隳壳八诠緝?nèi)網(wǎng)上的熱門(mén)討論,任何被提出的觀點(diǎn),大到制度改革小到文化衫投票,反對(duì)聲音總是存在。在處理這些問(wèn)題時(shí)我的意見(jiàn)正如我上一段所說(shuō),辨別聲音的分量比感知聲音的大小更重要,向結(jié)果邁進(jìn)比盡如人意更有意義。請(qǐng)放心,無(wú)論是這樣的團(tuán)體還是個(gè)人都不應(yīng)該是隨機(jī)挑選出來(lái)的,他們應(yīng)該符合某種資質(zhì),這種資質(zhì)的合法性來(lái)源于多個(gè)方面,有來(lái)自于對(duì)于業(yè)務(wù)知識(shí)的長(zhǎng)年積累,也有來(lái)自于對(duì)技術(shù)的深刻見(jiàn)解,這些沉淀有助于他們來(lái)把握架構(gòu)的發(fā)展方向,并從容應(yīng)對(duì)業(yè)務(wù)上的變化。

  類(lèi)似的觀點(diǎn)早在《人月神話》一書(shū)中就提出過(guò),在書(shū)中“外科手術(shù)”一章中作者指出_“需要協(xié)作溝通的人員的數(shù)量影響著開(kāi)發(fā)成本,因?yàn)槌杀?的主要組成部分是相互的溝通和交流,以及更正溝通不當(dāng)所引起的不良結(jié)果(系統(tǒng)調(diào)試)”_。在軟件應(yīng)該由盡可能少量人員開(kāi)發(fā)的前提下,作者認(rèn)為軟件開(kāi)發(fā)的團(tuán)隊(duì)模式類(lèi)似于外科手術(shù)的方式進(jìn)行組建,由一人拆解問(wèn)題,其余人負(fù)責(zé)實(shí)施。當(dāng)觀點(diǎn)發(fā)生沖突時(shí),由外科醫(yī)生單方面進(jìn)行統(tǒng)一。并且為了追求系統(tǒng)中的概念的完整性,專(zhuān)制統(tǒng)治也是可取的。

  歸根結(jié)底,我的結(jié)論是技術(shù)決策不應(yīng)該是直接民主的。蘇格拉底之所以否定雅典城邦實(shí)現(xiàn)的直接民主制度,是因?yàn)樵谒J(rèn)為既然我們生病的時(shí)候會(huì)去找醫(yī)生看病,那為什么當(dāng)城邦的健康出現(xiàn)問(wèn)題的時(shí)候,卻會(huì)認(rèn)為應(yīng)當(dāng)求助于普通人的意見(jiàn)呢?技術(shù)決策也是同理,對(duì)于開(kāi)源社區(qū)而言,核心維護(hù)團(tuán)隊(duì)或者個(gè)人擁有對(duì)于整個(gè)項(xiàng)目最完整的上下文。長(zhǎng)時(shí)間傾聽(tīng)社區(qū)的聲音,使得他們對(duì)于項(xiàng)目的現(xiàn)狀,消費(fèi)者的訴求有全面的了解。在掌握更完整的信息的前提下,我相信他們理應(yīng)比個(gè)體做出更理性的決策。

  開(kāi)源社區(qū)中剛好有一個(gè)概念描述了這類(lèi)角色的存在:仁慈的獨(dú)裁者(Benevolent Dictators)或者是終身仁慈獨(dú)裁者( Benevolent Dictator For Life),簡(jiǎn)稱為BDFL。

  顧名思義,獨(dú)裁者一言九鼎,他擁有對(duì)項(xiàng)目社區(qū)中爭(zhēng)議問(wèn)題的最終決定權(quán)。你大可不必?fù)?dān)心他成為一名濫用權(quán)力的“暴君”,因?yàn)橐环矫孢@個(gè)稱謂只是一個(gè)榮譽(yù)頭銜,是對(duì)退居二線曾經(jīng)常年為開(kāi)源社區(qū)付出努力的貢獻(xiàn)者的認(rèn)可(比如 Guido van Rossum 之于 Python);另一方面他并非是開(kāi)源社區(qū)中唯一的決策者,而是當(dāng)作解決爭(zhēng)議問(wèn)題的終審裁判。在問(wèn)題觸達(dá)他之前,社區(qū)的公共事務(wù)通常由少數(shù)人組成的委員會(huì)負(fù)責(zé)解決,也就是我們熟知的 TSC (Technical Steering Committee)。

  比如在 Node.js 的社區(qū)治理章程中,就詳細(xì)說(shuō)明了 nodejs/node 是由核心協(xié)作者(Core Collaborators)來(lái)維護(hù) 。任何一則 pull request 都需要兩位協(xié)作者的批準(zhǔn)才能合入到代碼中。協(xié)作者負(fù)責(zé)社區(qū)的日常運(yùn)營(yíng),例如貢獻(xiàn)代碼、完善文檔以及解決疑問(wèn)等等;其中一小部分人組成的 TSC 則負(fù)責(zé)決定技術(shù)的演化方向,制定社區(qū)章程等更高層次的議題。

  而開(kāi)源項(xiàng)目 SciPy 的治理方式則是委員會(huì)(Steering Council)與獨(dú)裁者并存。委員會(huì)的候選成員在過(guò)去的一年中對(duì)項(xiàng)目的貢獻(xiàn)必須有質(zhì)量和數(shù)量上的保證,由現(xiàn)有委員會(huì)提名產(chǎn)生。委員會(huì)負(fù)責(zé)項(xiàng)目的日常運(yùn)營(yíng)工作,包括但不限于項(xiàng)目方向的制定,社區(qū)問(wèn)題的解決,文檔的更新等等。而當(dāng)前的 BDFL Pauli Virtanen 則只在委員會(huì)處理問(wèn)題發(fā)生“死鎖”時(shí)做出決策。為了防止權(quán)力被濫用,項(xiàng)目還鼓勵(lì)任何與 BDFL 意見(jiàn)相左的人 fork 一份屬于自己 SciPy 代碼庫(kù)。

  如果以 GitHub 誕生之日為一個(gè)起點(diǎn)開(kāi)始算起,開(kāi)源社區(qū)至少已經(jīng)經(jīng)過(guò)了數(shù)十年的發(fā)展,其中很多實(shí)踐已經(jīng)相當(dāng)成熟了。https://opensource.guide/ 是 GitHub 官方發(fā)布的一個(gè)站點(diǎn),來(lái)指導(dǎo)大家如何參與和維護(hù)開(kāi)源項(xiàng)目,上面描述幾種社區(qū)治理形態(tài)幾乎就是在 Leadership and Governance 一章中的全部了。抽象看,運(yùn)營(yíng)一個(gè)開(kāi)源社區(qū)和運(yùn)營(yíng)其他形態(tài)的實(shí)體社區(qū)(比如大學(xué)社團(tuán))需要解決的問(wèn)題沒(méi)有太大不同,你同樣要面臨拉新,提高留存率,發(fā)展第二梯隊(duì)等問(wèn)題;甚至你還需要想方設(shè)法拉取贊助(對(duì)應(yīng)于給項(xiàng)目建立贊助頁(yè)面),為社團(tuán)制定活動(dòng)規(guī)范(對(duì)應(yīng)于社區(qū)的 Code of Conduct)等等。

  最后,我認(rèn)為無(wú)需擔(dān)心開(kāi)源社區(qū)中“掌權(quán)”的個(gè)人和小團(tuán)體會(huì)演變成僭主(一個(gè)人統(tǒng)治且為了私人利益)或者寡頭(少數(shù)人統(tǒng)治且為了私人利益)。因?yàn)樵谙乱还?jié)中我會(huì)談到,維護(hù)開(kāi)源項(xiàng)目無(wú)利益可言:與社交網(wǎng)絡(luò)恰恰相反,你無(wú)法將日益增長(zhǎng)的“粉絲”流量?jī)冬F(xiàn),它越受歡迎,你心力交瘁的感受越是強(qiáng)烈。

  現(xiàn)在我們已經(jīng)回答了一個(gè)問(wèn)題,那就是在開(kāi)源社區(qū)中應(yīng)該由誰(shuí)說(shuō)的算。如果說(shuō)這場(chǎng)歸宿是有關(guān)開(kāi)源項(xiàng)目終點(diǎn)的話,別忘了我們還沒(méi)有回答另一個(gè)更關(guān)鍵的問(wèn)題,那就是開(kāi)源項(xiàng)目的起點(diǎn)在哪:為什么要有開(kāi)源項(xiàng)目。

  “Pay Me or Fork This”

  如果一則頗受歡迎的開(kāi)源項(xiàng)目的維護(hù)者突然宣布停止維護(hù)項(xiàng)目,你會(huì)作何感想?我猜你第一反應(yīng)情緒大多是負(fù)面的:疑惑、不解、失望、擔(dān)心——至少你肯定不會(huì)為他感到高興。

  但為什么不呢?為什么他要長(zhǎng)達(dá)數(shù)年的無(wú)償?shù)臑槌汕先f(wàn)人貢獻(xiàn)出他的業(yè)余時(shí)間?

  首先我們要承認(rèn)一個(gè)這樣的事實(shí):絕大部分開(kāi)源項(xiàng)目成立的初衷大都出自于程序員的個(gè)人需求,比如愛(ài)好、學(xué)習(xí)、市面上還沒(méi)有這樣的輪子等等,絕非為了什么遠(yuǎn)大的目標(biāo)。Linus Torvalds 創(chuàng)造 Linux 當(dāng)初的目的“只是想作為一個(gè)愛(ài)好而已”(just a hobby, won't be big and professional ),他發(fā)布 Git 系統(tǒng)也只是“想用一些腳本來(lái)更高效的追蹤代碼”(some scripts to try to track things a whole lot faster)。甚至這兩者的命名都是極個(gè)人化的。

  甚至有的人只是為了好玩——event-stream 在被曝出安全問(wèn)題之后,項(xiàng)目的原維護(hù)者 Dominic Tarr 對(duì)于他為什么創(chuàng)造和離開(kāi)這個(gè)項(xiàng)目給出了這樣的解釋?zhuān)?/p>

  “

  I didn't create this code for altruistic motivations, I created it for fun. I was learning, and learning is fun. I gave it away because it was easy to do so, and because sharing helps learning too.

  ”

  “

  If it's not fun anymore, you get literally nothing from maintaining a popular package.

  ”

  在我個(gè)人代碼倉(cāng)庫(kù)中,收藏?cái)?shù)量排名前三的開(kāi)源項(xiàng)目也都統(tǒng)統(tǒng)源自于我的個(gè)人需求:Node-Simple-Cache 是為了解決一個(gè)工作上的緩存模塊功能;search-trie-tree 只是突發(fā)奇想希望更高效的解決問(wèn)題;而 scrapy_douban 只是為了解決當(dāng)時(shí)個(gè)人想在豆瓣小組里找房源而豆瓣又不支持合并查找和排序的問(wèn)題。

  還有另一個(gè)我們可能都沒(méi)有意識(shí)到乃至不愿意承認(rèn)的原因是:GitHub 還具有社交屬性,程序員都想通過(guò)這個(gè)平臺(tái)擴(kuò)大自己的影響力。2019 年有一篇名為 《社會(huì)地位即服務(wù)》(Status as a Service)頗有意思的文章事無(wú)巨細(xì)的解釋了現(xiàn)代社交網(wǎng)絡(luò)背后運(yùn)作的原理。文中圍繞的中心以及反復(fù)提及的出發(fā)點(diǎn)就是“對(duì)于地位的渴望是源自于人類(lèi)內(nèi)心的本能”:

  people are status-seeking monkeys, always trying to seek more of it in the most efficient way possible.

  并非所有渠道和平臺(tái)提供的社交地位都值得被一視同仁,社交地位價(jià)值還和稀缺性有關(guān),如果用戶不需要付出努力就能輕而易舉得到的話,那么以這種方式收獲的虛擬地位一文不值。GitHub 自然很具有想達(dá)成這層目標(biāo)的潛質(zhì),它對(duì)所有人開(kāi)放但并非所有人都能從平臺(tái)中脫穎而出。但它畢竟不是為“社交”而生,所以從來(lái)沒(méi)有想過(guò)解決社交網(wǎng)絡(luò)里最常見(jiàn)的通?。喝绾伪苊廒A者通吃,如何解決蒸發(fā)冷卻效應(yīng)。

  這樣的趨勢(shì)是不可逆的,web 1.0 到 2.0 的進(jìn)化就是最好的證明。2.0 時(shí)代的網(wǎng)絡(luò)將曾經(jīng)的信息孤島緊密的連系在了一起,將信息的流通的方式從單向變更為了四通八達(dá)。這正是《未來(lái)簡(jiǎn)史》中描述的數(shù)字主義興起的里程碑:如果你體驗(yàn)沒(méi)有被分享,沒(méi)有人看到那就是沒(méi)有價(jià)值的。數(shù)據(jù)由此產(chǎn)生了異化,曾經(jīng)數(shù)據(jù)只是內(nèi)容的點(diǎn)綴,而現(xiàn)在內(nèi)容是數(shù)字的附庸。

  以上狀態(tài)無(wú)論是對(duì)于傳統(tǒng)上內(nèi)容媒體還是開(kāi)源項(xiàng)目都同樣成立。不知道你有沒(méi)有想過(guò)這樣的一個(gè)問(wèn)題:如何衡量開(kāi)源項(xiàng)目的價(jià)值?我相信你第一時(shí)間想到的依然是各種各樣的數(shù)值:收藏?cái)?shù)量、fork 數(shù)量、維護(hù)者解決 issue 的效率等等——所有這一切在項(xiàng)目 Github 主頁(yè)的 Insights 標(biāo)簽下全部都有體現(xiàn),甚至還包括你想不到的依賴圖譜——然而有意思的地方在于以上指標(biāo)其實(shí)是圍繞項(xiàng)目生長(zhǎng)于平臺(tái)的間接信息,而項(xiàng)目本身比如代碼質(zhì)量和它能提供的業(yè)務(wù)價(jià)值卻因?yàn)闊o(wú)法被量化而被忽略。

  事情比我們想象的還要復(fù)雜。

  2016年 Azer Ko?ulu 因?yàn)樗l(fā)布在 npm (JavaScript 的包管理平臺(tái))上名為 kik 的模塊與某個(gè)公司的注冊(cè)商標(biāo)相同,而被律師要求從 npm 平臺(tái)上撤下(unpublish)。一怒之下他撤下了所有的發(fā)布在 npm 上的模塊。其中包括一個(gè)名為 left-pad 的模塊。雖然這個(gè)模塊只有17行代碼,但卻導(dǎo)致整個(gè)互聯(lián)網(wǎng)的JavaScript 開(kāi)發(fā)工作陷入癱瘓,因?yàn)橛幸恍O其重要的模塊比如 Babel.js(一款 JavaScript 代碼的編譯工具)對(duì) left-pad 存在依賴。以至于 npm 的 CTO 和創(chuàng)始人之一 Laurie Voss 不得不采取史無(wú)前例的手段來(lái)解決這個(gè)問(wèn)題——恢復(fù)被撤下的 left-pad 0.0.3 版本。

  我們應(yīng)該怎么衡量這個(gè)項(xiàng)目的價(jià)值?這17行代碼顯然不是不可替代的;收藏?cái)?shù)量?截止項(xiàng)目被歸檔( archived)累計(jì)收藏?cái)?shù)量才 1.2k 次。但就它能帶來(lái)的破壞力而言卻是其他更大體量項(xiàng)目望其項(xiàng)背的。

  我同意指標(biāo)的價(jià)值,但是如果不參考維護(hù)團(tuán)隊(duì)的規(guī)模,維護(hù)者能夠投入的資源,用絕對(duì)的數(shù)值來(lái)評(píng)判是有失公允的??蛇@恰恰是這個(gè)網(wǎng)絡(luò)時(shí)代需要的:鑒于我們?cè)缫呀?jīng)被海量的數(shù)據(jù)淹沒(méi),鑒于我們的注意力早已被碾壓的七零八落,降低消化知識(shí)的門(mén)檻,以及把權(quán)力交接給算法和他者看上去是一個(gè)不錯(cuò)的選擇。

  泛社交化是一把雙刃劍,一方面它降低了開(kāi)源社區(qū)的準(zhǔn)入門(mén)檻,給了更多好的開(kāi)源項(xiàng)目嶄露頭角的機(jī)會(huì);另一方面它也讓更多的噪音有了可乘之機(jī)。在 GitHub 出現(xiàn)之前,mailing list 是社區(qū)主要的溝通方式,但如果你在決定加入某個(gè) mailing list 之前有閱讀過(guò)官方社區(qū)的提供的 FAQ 的話,那么你的念頭很有可能會(huì)被打消:linux-kernal 的 FAQ 長(zhǎng)度堪比一篇論文;Apache 的 tips 甚至?xí)嬖V你應(yīng)該避免使用“你”這個(gè)單詞,因?yàn)檫@會(huì)引起人的戒備心。更不要提社區(qū)中的 Code of Conduct 了。這些規(guī)則或者說(shuō)是儀式感天然的會(huì)屏蔽掉部分人群。而到了 GitHub 時(shí)代當(dāng)準(zhǔn)入的成本幾乎為零了之后,人們甚至要被反復(fù)告知不要在社區(qū)中添加無(wú)意義“我也是”的留言,這樣對(duì)解決問(wèn)題沒(méi)有任何幫助。

  從根本上與社交網(wǎng)絡(luò)不同的是,維護(hù)一個(gè)受人矚目的開(kāi)源項(xiàng)目的成本比發(fā)一次 twitter 的成本高多了。一旦你的具有一定的影響力和知名度之后,對(duì)項(xiàng)目的精力的投入便會(huì)產(chǎn)生邊際遞減效應(yīng)。

  pouchdb 的維護(hù)者之一 Nolan Lawson 專(zhuān)門(mén)寫(xiě)過(guò)一篇名為 _What it feels like to be an open-source maintainer_ 的文章來(lái)吐槽維護(hù)開(kāi)源項(xiàng)目的體驗(yàn):

  “

  Outside your door stands a line of a few hundred people. They are patiently waiting for you to answer their questions, complaints, pull requests, and feature requests.

  ”

  對(duì)他而言 GitHub 的消息通知只會(huì)給他帶來(lái)源源不斷的負(fù)面情緒,光是每天閱讀這些消息就已經(jīng)讓他心力交瘁了。在Dominic Tarr 的在此之前的解釋中,用他的親身經(jīng)歷給出了一個(gè)似乎能為所有開(kāi)源項(xiàng)目維護(hù)者辯解為什么要離開(kāi)的理由——因?yàn)樨?zé)任與收益不對(duì)等:

  “

  One time, I was working as a dishwasher in a resturant, and I made the mistake of being too competent, and I got promoted to cook. This was only a 50 cents an hour pay rise, but massively more responsibility. It didn't really feel worth it. Writing a popular module like this is like that times a million, and the pay rise is zero.

  ”

  我猜你現(xiàn)在才開(kāi)始意識(shí)到 GitHub 的功能迭代是有方向性的,它在盡最大努力減輕項(xiàng)目維護(hù)者的負(fù)擔(dān),所以我們看到 GitHub 上有了issue 模板,pull request 模板,機(jī)器人,持續(xù)集成工具等等。

  那我們作為項(xiàng)目的消費(fèi)者又能為項(xiàng)目維護(hù)者做些什么呢?或者在提每一個(gè) issue 之前先前往 StackOverflow 或者是現(xiàn)有的 issue 看有沒(méi)有相似的問(wèn)題;或者在提交 issue 的時(shí)候可以精心準(zhǔn)備好能夠復(fù)現(xiàn)問(wèn)題的 demo 來(lái)縮減維護(hù)者的時(shí)間;也許在提交每一個(gè) pull request 之前現(xiàn)在本地運(yùn)行單元測(cè)試看能否通過(guò)。但說(shuō)實(shí)話無(wú)論你如何小心翼翼的用愛(ài)發(fā)電,不如考慮另一個(gè)更有效的方式——錢(qián)。

  不知出于什么樣的原因,faker.js 的維護(hù)者 Marak 決定“不再免費(fèi)為世界500強(qiáng)公司工作了,要么給他一份年薪六位數(shù)的合同,要么 fork 這個(gè)項(xiàng)目然后自己維護(hù)去”。這個(gè)帖子的標(biāo)題就叫作 No more free work from Marak - Pay Me or Fork This。

  令人欣慰的是,大家回帖一律對(duì)他的決定表示支持,并出謀劃策為提供他籌款方面的建議。由此可見(jiàn)大眾的思維也在逐漸發(fā)生轉(zhuǎn)變,越來(lái)越多的人意識(shí)到雖然開(kāi)源代碼是免費(fèi)的,但是貢獻(xiàn)者的時(shí)間并不是,他們理應(yīng)得到回報(bào)。在這個(gè)共識(shí)之下市面上出現(xiàn)越來(lái)越多的平臺(tái)為開(kāi)源項(xiàng)目提供第三方服務(wù),比如 open collective、 xs code 和 gitcoin 負(fù)責(zé)籌措資金, Maintainer.io 和 tidelift 為項(xiàng)目提供咨詢和診斷。

  這其中最著名的要數(shù) patreon,Vue 作者尤雨溪的贊助頁(yè)面就托管在這個(gè)平臺(tái)上面,他發(fā)起贊助的目的非常明確:幫助他全職全身心的投入開(kāi)源項(xiàng)目 Vue 的開(kāi)發(fā)中。贊助選項(xiàng)中最“昂貴”的選項(xiàng)名為 Platinum Sponsor, 贊助金額為 2000 美元且每個(gè)月只提供三個(gè)名額。這個(gè)級(jí)別的贊助機(jī)構(gòu)或者個(gè)人的名字能夠出現(xiàn)在 Vue 官網(wǎng)頁(yè)面的每一個(gè)文檔頁(yè)面上。以我的觀察這一欄的名額供不應(yīng)求。

  相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)我都對(duì)在開(kāi)源項(xiàng)目網(wǎng)站上進(jìn)行商業(yè)露出的行為感到厭惡,認(rèn)為這不過(guò)是將流量?jī)冬F(xiàn)的把戲罷了,但時(shí)至今日我才意識(shí)到這可能只不過(guò)是開(kāi)源項(xiàng)目在做默默的掙扎而已。

  關(guān)于為什么以及如何給開(kāi)源項(xiàng)目籌集資金在 opensource.guide 的 Getting Paid for Open Source Work 一章有很詳細(xì)的說(shuō)明,我不再贅述。從這個(gè)主題自成一章的規(guī)格來(lái)看它的重要性不言而喻。金融手段雖然不是支持開(kāi)源社區(qū)唯一的手段,但絕對(duì)是有力的手段之一。

  “Transphobic maintainer should be removed from project ”

  以上內(nèi)容只不過(guò)是整個(gè)開(kāi)源社區(qū)現(xiàn)狀的冰山一角。正如本文開(kāi)頭所說(shuō),這篇文章目的并非是給大家一個(gè)結(jié)論,而是呈現(xiàn)給大家更多平時(shí)被忽略的事實(shí)。如果說(shuō)對(duì)于前兩小節(jié)的內(nèi)容我還能做到夾敘夾議的話,那么有些話題根本就是超出我討論能力范圍之外,比如說(shuō)有關(guān)道德與社會(huì)公共議題。

  2015 年年中開(kāi)源項(xiàng)目 opal 的核心團(tuán)隊(duì)成員之一 Elia Schito 在 twitter 上發(fā)表言論認(rèn)為跨性別者不過(guò)是“不愿面對(duì)現(xiàn)實(shí)(not accepting reality)”。這則言論被開(kāi)源社區(qū)的一位意見(jiàn)領(lǐng)袖 Coraline Ada Ehmke (她也是開(kāi)源項(xiàng)目“參與者公約(Contributor Covenant)”的發(fā)起人)發(fā)現(xiàn)并在 opal 社區(qū)中發(fā)起討論,認(rèn)為這種對(duì)跨性別者仇視者應(yīng)該從核心團(tuán)隊(duì)中被移除(Transphobic maintainer should be removed from project)。而維護(hù)團(tuán)隊(duì)中的另一位成員 meh 堅(jiān)決不這么認(rèn)為,他認(rèn)為技術(shù)是與道德無(wú)關(guān)的,如果你想把他替換掉,你應(yīng)該比他貢獻(xiàn)的更多才有資格說(shuō)這話。至今 Elia 依然是 opal 核心團(tuán)隊(duì)的成員。

  如果說(shuō)上面這個(gè)例子離你太遠(yuǎn)的話,我們不如看一個(gè)更實(shí)際的:2017 年 3月餓了么前端團(tuán)隊(duì)在知乎上發(fā)表了一篇名為《寫(xiě)在 Element 一周年之際》的文章,其中除了對(duì) Element 前端類(lèi)庫(kù)誕生一周年表示慶賀以外,還對(duì)他們眼中 iView 抄襲的行為表示了譴責(zé)。當(dāng)然正如 iView 團(tuán)隊(duì)在評(píng)論區(qū)回應(yīng)的,他們并不認(rèn)可餓了么前端團(tuán)隊(duì)對(duì)于抄襲的指責(zé)。

  我不敢對(duì)這些事件做任何的評(píng)價(jià),這類(lèi)議題已經(jīng)超越了開(kāi)源社區(qū),它們更加宏大,同時(shí)也更加危險(xiǎn)?;ヂ?lián)網(wǎng)并非是討論這些問(wèn)題的最佳場(chǎng)所,我們也并非是討論這些問(wèn)題的最佳人選。我在此談?wù)撨@些話題的目的并非是想讓一種聲音壓倒一切,而是想讓不同的聲音都能傳播的更遠(yuǎn)。

  平克弗洛伊德樂(lè)隊(duì)(Pink Floyd)的概念音樂(lè)專(zhuān)輯《月之暗面》(Dark Side of the Moon)絕對(duì)可以算作歷史上最偉大的音樂(lè)專(zhuān)輯之一,它至今依然保持著 Billborad 累計(jì)停留958周的最高記錄。

  樂(lè)隊(duì)的貝斯手兼主唱 Roger Waters 對(duì)于專(zhuān)輯標(biāo)題中月之暗面的解釋是:一方面它象征著我們都不曾親眼見(jiàn)過(guò)的地方,但是卻不能否認(rèn)它的存在;另一方面它也代指我們每個(gè)人不為人知想對(duì)大眾隱藏的負(fù)面,我們應(yīng)該學(xué)會(huì)駕馭這些負(fù)面而不是讓它們占據(jù)我們。

  開(kāi)源社區(qū)的暗面就在那里,我們無(wú)法不視而不見(jiàn)。




電子技術(shù)圖片.png

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。