社區(qū)糾紛不斷:程序員何苦為難程序員
日前,因?yàn)楸欢嗳宋耆璐蠛穑琒wift 之父正式退出 Swift 核心團(tuán)隊(duì)。
諸如此類的“語言暴力”、“網(wǎng)絡(luò)暴力”事件在開源社區(qū)乃至整個(gè) IT 社區(qū)屢見不鮮。多個(gè)技術(shù)社區(qū),都出現(xiàn)過創(chuàng)始人、重要維護(hù)者、貢獻(xiàn)者因?yàn)楦杏X“社區(qū)氛圍糟糕”、“受到傷害”而宣布退出的現(xiàn)象。更有甚者,還有科技公司領(lǐng)導(dǎo)被爆出叫囂著讓 80 后退出 IT 圈。后者可粗略視為是該領(lǐng)導(dǎo)過于偏激,且是少數(shù)案例,先不做過多討論。但是在開源圈,怎么就這樣了呢?
為了回答這個(gè)問題,本文梳理了以往的一些社區(qū)糾紛事件,發(fā)現(xiàn)許多矛盾發(fā)生在社區(qū)實(shí)際的管理者/層,與社區(qū)貢獻(xiàn)者、參與者之間,雙方的不滿大致也可以歸總成幾類原因。
眾口難調(diào)
從大教堂的開發(fā)模式轉(zhuǎn)向集市開發(fā)模式之后,技術(shù)社區(qū)存在的目的便是為了聚眾人之力,讓項(xiàng)目更好。在集市模式下,開源社區(qū)給了個(gè)人極大的自由度,所有貢獻(xiàn)者都可以暢所欲言,發(fā)表自己的想法,為項(xiàng)目作出貢獻(xiàn)。隨之而來的問題,便是如何協(xié)調(diào)所有人的意見。
社區(qū)的管理模也在一定程度上決定了社區(qū)日后的爭吵風(fēng)險(xiǎn)有多大。當(dāng)下的開源社區(qū)管理主要分成四種模式。一是由社區(qū)主導(dǎo),采用自由貢獻(xiàn)模式,“共識(shí)”是其前提,功能開發(fā)和版本發(fā)布等重要決策以社區(qū)共識(shí)為準(zhǔn)。二是公司主導(dǎo),由公司資助社區(qū)及軟件的發(fā)展,相對(duì)來說,公司會(huì)擁有更多的實(shí)權(quán)。三是 BDFL 仁慈的獨(dú)裁者模式,這是在社區(qū)模式的基礎(chǔ)之上,社區(qū)中有一個(gè)“獨(dú)裁者”的角色存在,他對(duì)一些重要決策有最終決定權(quán),而非依賴社區(qū)共識(shí)。四是精英治理,在社區(qū)中表現(xiàn)突出、貢獻(xiàn)最大的人被任命為管理團(tuán)隊(duì),決策基于投票確定。
我們常見的糾紛事件,往往可以歸總為“掌權(quán)者”和“貢獻(xiàn)者”之爭,這種爭議更容易出現(xiàn)在“仁慈的獨(dú)裁者”模式的開源社區(qū)中。其他三種模式中,許多糾紛的出現(xiàn)也是因?yàn)閷?shí)際管理團(tuán)隊(duì)未扮演好自己的角色。
掌權(quán)者的不滿
聞名世界的大型開源項(xiàng)目往往是某個(gè)“天才程序員”的作品,早期的開源社區(qū)一般都是“仁慈的獨(dú)裁者”模式,獨(dú)裁者飽受敬仰,比如 Linux 社區(qū)的 Linus、Ubuntu 社區(qū)、Python 社區(qū)。然而,天才似乎更樂于單兵作戰(zhàn)。
- 對(duì)貢獻(xiàn)不滿
暴躁大佬 Linus 在評(píng)價(jià)那些沒達(dá)到他個(gè)人標(biāo)準(zhǔn)的代碼方面非常毒舌。曾有網(wǎng)友用了此前 Linus 在郵件列表中公開的一段回復(fù),直指 Linus 在人際溝通中態(tài)度惡劣:“這也算是一個(gè) BUG?你已經(jīng)成為內(nèi)核維護(hù)者多長時(shí)間了?還沒有學(xué)會(huì)內(nèi)核維護(hù)的第一條規(guī)則?我再也不想收到這種明顯的垃圾,像白癡一樣的提交…… ”
對(duì)于一直看不爽的 Intel,Linus 對(duì)其提交的代碼也是口吐芬芳。2018 年初,為了修補(bǔ) Spectre 漏洞,Intel 工程師提供了一個(gè)間接分支限制推測(cè)(indirect branch restricted speculation, IBRS)功能的補(bǔ)丁。Linus 當(dāng)時(shí)就在郵件列表中公開指出 IBRS 會(huì)造成系統(tǒng)性能大幅降低,直言該補(bǔ)丁“就是徹徹底底的垃圾”。
不僅僅是 Linus,在崇尚“精英主義”的 BSD 社區(qū),也存在明顯的“鄙視鏈”。BSD 的第一版撰寫者 Bill Joy 不愿意相信龐大的志愿貢獻(xiàn)者者們,他曾說:“大多數(shù)人都是糟糕的程序員,讓很多人盯著代碼不會(huì)真正發(fā)現(xiàn)錯(cuò)誤。真正的錯(cuò)誤是由幾個(gè)非常聰明的人發(fā)現(xiàn)的。大多數(shù)人看代碼不會(huì)看到任何東西......不能期望成千上萬的人做出貢獻(xiàn)并都達(dá)到高標(biāo)準(zhǔn)。”
這種看法一直存在于 BSD 之后的發(fā)展中,F(xiàn)reeBSD 深度參與者 Marshall Kirk McKusick 就曾表示,90% 的 committers 所貢獻(xiàn)的代碼都不能用,還剩下的一小部分也需要被打磨。
- 遭遇信任危機(jī)
在 Python 社區(qū),很多年內(nèi),Python 之父 Guido van Rossum 都是最有威信的那個(gè)人,他也被社區(qū)授予“終身仁慈的獨(dú)裁者”的稱謂。但在 2018 年,當(dāng) Python 社區(qū)探討改進(jìn)提案時(shí),Guido 發(fā)現(xiàn)“現(xiàn)在有這么多人鄙視我的決定”。
因此,他不想再為 PEP(Python 改進(jìn)提案)[ PEP 572 ] 爭取什么,并決定自己將逐步脫離決策層,不再領(lǐng)導(dǎo) Python 的發(fā)展,休息一段時(shí)間后將作為普通的核心開發(fā)者參與社區(qū)。
有時(shí),“仁慈的獨(dú)裁者”也會(huì)因?yàn)椤安蛔鳛椤北恢肛?zé)。Ubuntu 創(chuàng)始人 Mark Shuttleworth 在社區(qū)中被戲稱為“自封的仁慈獨(dú)裁者”。事實(shí)上,Ubuntu 社區(qū)早期也確實(shí)是“仁慈的獨(dú)裁者”管理模式。
然而,在 Ubuntu 社區(qū)蓬勃發(fā)展,各項(xiàng)業(yè)務(wù)步入正軌之際,Mark Shuttleworth 本人的工作逐漸與開發(fā)者拉開距離,Jono Bacon 等一些早期在 Ubuntu 社區(qū)中頗具名望的核心成員相繼離開,Mark Shuttleworth 也很少在社區(qū)活躍。逐漸,有一些資深的 Ubuntu 開發(fā)者認(rèn)為社區(qū)正面臨“群龍無首”的尷尬局面,指責(zé)沙特爾沃思沒有盡到“BDFL”的責(zé)任。一位前 Ubuntu 開發(fā)人員在 Ubuntu 社區(qū)中留言指責(zé) Mark Shuttleworth 作為 BDFL “放棄了社區(qū),對(duì)社區(qū)治理的崩潰保持沉默”,令人失望。
Mark Shuttleworth 面對(duì)職責(zé)也欣然接受,承認(rèn)自己在這些方面確實(shí)做得不夠好,并表達(dá)了“挫敗感”。
- 沒有回饋
開源項(xiàng)目最容易讓人不滿的點(diǎn)還當(dāng)屬“白嫖”,許多開源項(xiàng)目都是靠作者用愛發(fā)電,社區(qū)的汲取大于回饋,從而導(dǎo)致軟件作者身心俱疲。
前段時(shí)間轟轟烈烈的 Apache Log4j2 高危漏洞事件,攻擊者可以利用其 JNDI 注入漏洞遠(yuǎn)程執(zhí)行代碼,影響了眾多項(xiàng)目和公司。此事也讓 Log4j2 的作者受到關(guān)注與批評(píng),Log4j2 的維護(hù)者之一 @Volkan Yaz?c? 在推特上吐槽:Log4j2 維護(hù)者只有幾個(gè)人,他們無償、自愿地工作,沒有人發(fā)工資,也沒人提交代碼修復(fù)問題,出了問題還要被一堆人在倉庫里留言痛罵。
此前,PhantomJS 的核心開發(fā)者之一 Vitaly Slobodin 宣布辭任 maintainer ,不再維護(hù)項(xiàng)目,原因也是一個(gè)人發(fā)電太累:“我看不到 PhantomJS 的未來,作為一個(gè)單獨(dú)的開發(fā)者去開發(fā) PhantomJS 2 和 2.5 ,簡直就像是一個(gè)血腥的地獄。即便是最近發(fā)布的 2.5 Beta 版本擁有全新、亮眼的 QtWebKit ,但我依然無法做到真正的支持 3 個(gè)平臺(tái)。我們沒有得到其他力量的支持!”
貢獻(xiàn)者的不滿
當(dāng)社區(qū)隨著項(xiàng)目生命周期的發(fā)展逐漸發(fā)生變化時(shí),流程和規(guī)定上的改變不可避免,貢獻(xiàn)者間交流的氛圍也在不斷變化中。貢獻(xiàn)者對(duì)社區(qū)的不滿往往是從社區(qū)發(fā)生變化開始……
- 對(duì)項(xiàng)目或社區(qū)不再看好
一位 Debian 的包維護(hù)者 Stapelberg 在 2019 年寫了篇長文宣布自己要退出 Debian 的開發(fā)流程,逐漸減少參與 Debian 的維護(hù)和相關(guān)活動(dòng)。主要原因便在于,他發(fā)現(xiàn) Debian 整個(gè)開發(fā)評(píng)估流程非常遲鈍。
舉例來說,補(bǔ)丁的評(píng)估沒有截止日期,有時(shí)候他會(huì)收到通知說幾年前遞交的補(bǔ)丁現(xiàn)在合并了。Debian 的一些維護(hù)者出于個(gè)人喜好拒絕合作,維護(hù)者給予的個(gè)人自由度太高對(duì) Debian 構(gòu)成了嚴(yán)重影響。
在他對(duì) Debian 的開發(fā)流程沮喪程度超過閾值之后,他便宣布退出,寫了文章,希望能激勵(lì) Debian 作出改變。
在 LLVM 社區(qū),2018 年一位名叫 Rafael Avila de Espindola 的資深開發(fā)者(LLVM 編譯器貢獻(xiàn)排名第五)發(fā)郵件宣布決定與該項(xiàng)目分道揚(yáng)鑣。 原因在于近幾年的感受發(fā)生了變化,LLVM 日益龐大且變化緩慢,他也不贊成 LLVM 最近引入的社區(qū)行為規(guī)范。真正促使他做決定的是 LLVM 與一個(gè)公開根據(jù)性別和血統(tǒng)進(jìn)行歧視的組織 Outreachy 進(jìn)行合作,這讓他感到非常不滿。
除此之外,一些由公司主導(dǎo)的開源項(xiàng)目也會(huì)因?yàn)楦淖儼l(fā)展戰(zhàn)略招致不滿。
Qt 公司從 2021 年 1 月開始,將 Qt 5.15 作為僅供商業(yè)化的 LTS,現(xiàn)有的 Qt 5.15 分支將公開可見,但不會(huì)看到任何新補(bǔ)丁,只有付費(fèi)賬戶才可以使用長期支持版本的 Qt 5.15 。
此舉引起了社區(qū)的強(qiáng)烈不滿,基于 Qt 開發(fā)的 KDE 社區(qū)的擔(dān)憂。有用戶在 Qt 官方公告下留言諷刺道:“所以,基本上您是在告訴所有忠實(shí)的開源用戶,現(xiàn)在他們將僅被視為商業(yè)客戶的 beta 測(cè)試者,并且作為獎(jiǎng)勵(lì),他們將只能下載非 LTS 版本。你們真是太親切了!”一位長期的 Qt 貢獻(xiàn)者,來自英特爾公司的開發(fā)者 Thiago Macieira 表示,至少對(duì)于他在 Qt 中處理過的代碼,他不會(huì)再參與修復(fù)、評(píng)論和審查后端錯(cuò)誤報(bào)告。
- 反獨(dú)裁
與每個(gè)社區(qū)都有一個(gè)人或者幾個(gè)人的實(shí)際管理團(tuán)隊(duì)向?qū)?yīng)的是,在管理不當(dāng)時(shí),貢獻(xiàn)者會(huì)起身反抗“管理”。
幾個(gè)月前,Rust 審核團(tuán)隊(duì) (Moderation Team) 昨日公告稱,他們已集體辭職且即刻生效。團(tuán)隊(duì)成員 Andrew Gallant 表示此舉是為了抗議 Rust 核心團(tuán)隊(duì) (Core Team) 不對(duì)除自己以外的任何人負(fù)責(zé)。
Rust 的管理者分為很多個(gè)團(tuán)隊(duì),比如核心團(tuán)隊(duì)、審核團(tuán)隊(duì)、發(fā)行團(tuán)隊(duì)、庫管理團(tuán)隊(duì)等等...其中,Rust 核心團(tuán)隊(duì)的權(quán)限最大,而且其他團(tuán)隊(duì)無法影響他們。Andrew Gallant 在公告中寫道,由于核心團(tuán)隊(duì)在組織結(jié)構(gòu)層面的不負(fù)責(zé)任,他們一直無法按照社區(qū)對(duì)審核團(tuán)隊(duì)的期望和他們自己堅(jiān)持的標(biāo)準(zhǔn)來執(zhí)行 Rust 行為準(zhǔn)則。對(duì)于在這種情況下選擇離開,他們表達(dá)了對(duì)大家的歉意。但從治理 Rust 的角度來看,他們別無選擇。因此 Rust 審核團(tuán)隊(duì)認(rèn)為除了辭職和發(fā)表這份聲明之外,已經(jīng)沒有其他辦法了。
如何讓眾人滿意?
矛盾激化的后果只有一個(gè):成員慢慢離開。如果社區(qū)和項(xiàng)目不做出改變,則很有可能導(dǎo)致項(xiàng)目走向衰落。既然長時(shí)間充斥著爭吵與不滿的社區(qū)難以持久,那么,該如何構(gòu)建一個(gè)讓更多人愉快參與的社區(qū)?
首先,無論何種治理模式下的社區(qū),個(gè)人文明表達(dá)觀點(diǎn),遵守社區(qū)行為準(zhǔn)則都是減少?zèng)_突的必要條件。但是,個(gè)人行為是非常不穩(wěn)定的因素,就像 Linus 曾說要改改自己的暴脾氣,卻每每被各種言論刺激,重回暴躁大佬。
其次,便是通過治理框架有效地管理社區(qū),多權(quán)分立、避免獨(dú)裁,并且成員間相互約束,基于“共識(shí)”發(fā)展。具體來說便是有一份好的“手冊(cè)(原則、準(zhǔn)則等)”,以及一個(gè)讓人信服、能公證管理的團(tuán)隊(duì)。
比如在 Apache 軟件基金會(huì)中,便采用精英治理的模式。Apache Way 中對(duì)于決策、監(jiān)督、執(zhí)行等各方面都有明確規(guī)定:包括結(jié)構(gòu)扁平,無論職位如何,各個(gè)角色間是平等的,投票權(quán)重相同,不允許有仁慈的獨(dú)裁者出現(xiàn);單個(gè)項(xiàng)目由自選的活躍志愿者團(tuán)隊(duì)監(jiān)督,傾向在達(dá)成共識(shí)的前提下決定項(xiàng)目發(fā)展,不能完全建立共識(shí)則用投票等方式做出決策;整個(gè)基金會(huì)的治理模型基于信任和委托監(jiān)督……
在開放原子開源軟件基金會(huì)中,項(xiàng)目的畢業(yè)標(biāo)準(zhǔn)考核中也有類似的關(guān)于社區(qū)需符合“賢能治理”的規(guī)定:
OA-CO-40
【英】The community strives to be meritocratic and over time aims to give more rights and responsibilities to contributors who add value to the project.
【中】社區(qū)要符合賢能治理的精神,隨著時(shí)間的推移,為項(xiàng)目增值的貢獻(xiàn)者會(huì)被賦予更多的權(quán)利和責(zé)任
TOC 成員徐亮曾介紹,賢能治理這四個(gè)字是經(jīng)過很多輪討論確定下來的。在英文語境中,這個(gè)詞是 meritocracy,并不完全是一個(gè)褒義詞,“我們并不覺得用 meritocracy 形容社區(qū)是完全正確的事情,但是我們又覺得在開源社區(qū)中,所謂的能者上氛圍是比較積極向上的,是社區(qū)能夠健康運(yùn)轉(zhuǎn)的主要因素。”
在許多項(xiàng)目中,一方面大家是貢獻(xiàn)者,另一方面,每個(gè)人提交的功能越重要,或者對(duì)項(xiàng)目本身做出了更有意義的貢獻(xiàn),就更有可能被現(xiàn)任維護(hù)人員選中去承擔(dān)更重要的角色。通過這種方式達(dá)成的精英治理或是賢能治理,往往是希望能夠讓項(xiàng)目可以自己成長,更好地走下去。
Ubuntu 的創(chuàng)始人 Mark Shuttleworth 在遭到信任危機(jī)之后,便著手參與將 Ubuntu 轉(zhuǎn)向經(jīng)營治理的模式。目前,Ubuntu 社區(qū)也重新組建了由 3 名核心成員組成的管理團(tuán)隊(duì),分別是 Ubuntu 社區(qū)代表 Monica Ayhens-Madon,Ubuntu 開發(fā)者關(guān)系負(fù)責(zé)人 Rhys Davies,以及臨時(shí)社區(qū)經(jīng)理 Ken VanDine。Ken 還將負(fù)責(zé)繼續(xù)為 Ubuntu 社區(qū)尋找一位合適的社區(qū)總監(jiān)。
最后,借用一個(gè)當(dāng)下共識(shí):開源比以往任何時(shí)候都更加重要。也因此,維護(hù)一個(gè)好的社區(qū)氛圍,正尤為重要。