Alan Cox:大教堂、市集與市議會(huì)
在網(wǎng)上搜到的Cox大叔于1998年在開(kāi)源社區(qū)寫(xiě)的一篇文章,當(dāng)時(shí)很轟動(dòng),明眼人一看就知道是針對(duì)ESR那篇《大教堂與市集》,從中可見(jiàn)Alan在項(xiàng)目管理風(fēng)格上乃至個(gè)人性格上都與ESR、Linus等人不同之處。順便說(shuō)一句,Alan現(xiàn)在出于“家庭原因”已經(jīng)離開(kāi)了Linux項(xiàng)目,他曾經(jīng)評(píng)價(jià) Linus是a good developer but a terrible engineer,甚至在Google+上直接說(shuō)Linus就是一a*sh**e。不管如何,兩位曾經(jīng)十余年里并肩戰(zhàn)斗惺惺相惜的大牛就此分道揚(yáng)鑣還是惹人唏噓。
言歸正傳,以下為slashdot收錄的英文原文:Cathedrals, Bazaars and the Town Council。
以下是一些我對(duì)市集模式的想法,我認(rèn)為這值得分享,這種模式會(huì)教你如何完全毀掉一個(gè)自由軟件項(xiàng)目。我還舉了一個(gè)我稱(chēng)之為“市議會(huì)”(Town Council)效應(yīng)的實(shí)例(雖然那些市議員們可不這么認(rèn)為,注:此處指Linux項(xiàng)目開(kāi)發(fā)者)。
關(guān)于軟件開(kāi)發(fā)人員,你必須去了解一些情況。首先要了解的是真正優(yōu)秀的程序員相對(duì)來(lái)說(shuō)并不普遍,不僅如此,在很多其它專(zhuān)業(yè)領(lǐng)域里“真正的程序員”和一些搗亂的家伙之間的區(qū)別要比“偉大”和“普通”之間的區(qū)別要大得多,研究表明生產(chǎn)效率上最好的同其余的比重是30:1。
其次,你需要了解的是一大堆妄想型碼農(nóng)(wannabe programmer)總是善于發(fā)表意見(jiàn)。其中很多人患上了一種叫做“流行性熱詞”(buzzword)疾病,或者對(duì)他們“非黑即白”(one true path)的思考方式有著特殊的偏執(zhí),網(wǎng)上很多討論都是廉價(jià)的。
第三個(gè)關(guān)于軟件項(xiàng)目的事情就是我們所謂的“閑雜人員”(the masses)。他們不是編程人員,而在其它方面有著大量貢獻(xiàn)——文檔編輯、用戶支持,以及對(duì)那類(lèi)經(jīng)常爭(zhēng)論你應(yīng)該獲得許可證才能上網(wǎng)的人的說(shuō)服工作。
我想以Linux 8086(注,Intel設(shè)計(jì)的16位處理器架構(gòu))為例來(lái)說(shuō)明如何將整個(gè)工程全部搞砸。將Linux的一個(gè)子集移植到8086上大體是這世上最無(wú)聊的活動(dòng)之一。整件事的發(fā)起就像個(gè)笑話并走向失控。
只有極少數(shù)真正的程序員會(huì)將時(shí)間及其良好的精神狀態(tài)(或許那是假的)花費(fèi)在那些唯一價(jià)值在于“黑客精神”(Hack Value)的項(xiàng)目上,故而在任何時(shí)候那種項(xiàng)目也就兩三個(gè)核心貢獻(xiàn)人員而已。
不幸的是大批人認(rèn)為將Linux運(yùn)行在8086上是干凈的,為此義不容辭地想要“入伙”。這類(lèi)人大多屬于妄想型碼農(nóng)之流,以至于連閑雜人員在一個(gè)安全距離之外都會(huì)沾染上這個(gè)項(xiàng)目的“愚蠢”因子。
問(wèn)題的導(dǎo)火索在于一大批充滿(大多善意的)危險(xiǎn)的一知半解的人們的意識(shí)觀念——不是代碼,而是意識(shí)觀念。他們似乎很懂得如何去編程,但很多人連 “Hello World”這樣的C程序都不會(huì)。他們花了幾星期時(shí)間去爭(zhēng)論并投票該使用什么編譯器,甚至在項(xiàng)目開(kāi)展一年后還在爭(zhēng)論是否去寫(xiě)個(gè)充分完美的編譯器。他們熱衷于辯論如何生成大量二進(jìn)制文件,卻又對(duì)內(nèi)核swapper(注,即idle task)設(shè)計(jì)一無(wú)所知。
Linux 8086項(xiàng)目仍然進(jìn)行著,真正的開(kāi)發(fā)人員將郵件列表里許多其他成員加入到清除文件(kill files)中,以便他們之間可以順暢地通過(guò)郵件列表溝通,只因半吊子打醬油的家伙實(shí)在太多了。這一切不再是市集模式,而是形成了一個(gè)核心小組,對(duì)圈子里許多人而言這是一種禮貌用語(yǔ)。在這種情形下人們不可避免地處于被動(dòng)位置。
像Linux這種基于用戶/程序員的項(xiàng)目成長(zhǎng)緩慢,雖然它是靠著一群貢獻(xiàn)代碼的人得以成長(zhǎng)起來(lái),但這些人的背景要么是從原始的Minix(注,一種微內(nèi)核操作系統(tǒng))黑客社區(qū)起家,要么通過(guò)艱難的方式不斷從頭學(xué)起。隨著項(xiàng)目增長(zhǎng),人們本應(yīng)該形成一個(gè)“Linux內(nèi)核結(jié)構(gòu)規(guī)劃管理委員會(huì)”,而不是掉入將人們招來(lái)喚去,不將失敗視為問(wèn)題的怪圈,用Linus的話來(lái)說(shuō)就是“給我看源碼”。
如果有人陷入困境,他可以發(fā)帖詢(xún)問(wèn),在這之前包括現(xiàn)在很大程度上都基于人們正常地?fù)碛袝r(shí)間并具備知識(shí)來(lái)回復(fù)他。在Linux 8086的案例中,開(kāi)發(fā)人員很長(zhǎng)一段時(shí)間身陷囹圄。假使主動(dòng)活躍的程序員對(duì)只有潛在用處的妄想型碼農(nóng)的比例更高一點(diǎn)的話,我們就可以將一些雜音轉(zhuǎn)化成生產(chǎn)力。項(xiàng)目也就獲得更多有用的程序員,他們可以輪流向他人傳授經(jīng)驗(yàn),任何學(xué)習(xí)活動(dòng)都會(huì)讓你變得更好,哪怕只有一些少量實(shí)習(xí)生。
一些人會(huì)認(rèn)為你無(wú)法將那些“次要程序員”(lesser programmer)訓(xùn)練成真正的程序員。就Linux項(xiàng)目的個(gè)人經(jīng)驗(yàn)而言,很多人員只要獲得一丁點(diǎn)兒的幫助和自信鼓勵(lì)都將成為世界上最好的開(kāi)發(fā)人員之一。只要幫助和鼓勵(lì)足夠多,很多人就能成功。
Linux 8086總算大部分從“侵?jǐn)_”中恢復(fù)過(guò)來(lái),可至今仍是個(gè)不起眼的小項(xiàng)目。你可以從CVS目錄樹(shù)上下載這個(gè)由Alistair Riddich領(lǐng)導(dǎo)的項(xiàng)目,他做了很多優(yōu)秀的工作。隨著市議員的撤出,人們可以詢(xún)問(wèn)、參與并改善這個(gè)項(xiàng)目。
我們從這個(gè)項(xiàng)目,還有其它相同命運(yùn)的早期Linux 16位處理器項(xiàng)目(有的已死)中很清楚地學(xué)到以下幾點(diǎn)教訓(xùn)。
- 從項(xiàng)目一開(kāi)始就發(fā)布源代碼。哪怕不是很有用也無(wú)關(guān)緊要,將市議會(huì)排序分類(lèi)的最好方式就是發(fā)布源代碼并告知人們。Linux、KDE以及GNOME都遵循這種方式并獲益良多。你可以花一輩子時(shí)間去爭(zhēng)論怎樣寫(xiě)代碼才是正確的。只要代碼公布,人們(不管水平怎樣)都會(huì)把玩它。
- 要欣賞那些給一點(diǎn)幫助就會(huì)對(duì)項(xiàng)目做出巨大貢獻(xiàn)的人。如果他們最初的補(bǔ)丁有錯(cuò)誤,不要盛氣凌人,向其解釋問(wèn)題出在哪里并給出解決方案的建議,或者可以查詢(xún)解決方法的地方。解答真正的問(wèn)題,幫助別人,你所花費(fèi)的一分一秒都會(huì)成十倍地回報(bào)在項(xiàng)目上,對(duì)社會(huì)也會(huì)帶來(lái)無(wú)法估量的好處。[注]
- 不要忘記那些非開(kāi)發(fā)人員。我難過(guò)地發(fā)現(xiàn)許多人問(wèn)起“前5名最重要的內(nèi)核成員”時(shí)卻極少涉及在所有人中最重要的一些——他們負(fù)責(zé)維護(hù)網(wǎng)站,更新日志和郵件列表,還有編輯文檔,這些都是同等重要。
- Linus那句“給我看源代碼”對(duì)真正的項(xiàng)目來(lái)說(shuō)是個(gè)狹隘的視角。當(dāng)你聽(tīng)到人們說(shuō)“我很想幫忙,可我不會(huì)編程”,那么他可以從事文檔編寫(xiě)。當(dāng)人們說(shuō)“但英語(yǔ)不是我的第一語(yǔ)言”,這時(shí)你需要的是一位文檔編輯或另一門(mén)語(yǔ)言翻譯者。
- 嘗試將有用的人從雜音中分離出來(lái),將有意愿幫忙的人從一大堆無(wú)聊評(píng)論中分離出來(lái)是很難的。在Linux 8086項(xiàng)目中我的確錯(cuò)誤地放棄了這一目標(biāo),如何將那些只會(huì)空談而又無(wú)所事事的人弄走是一門(mén)學(xué)問(wèn)。
下次碰到人們?cè)陧?xiàng)目上投票,或者問(wèn)題討論了一個(gè)月才實(shí)現(xiàn)這類(lèi)情況,給予他們警告。這樣才能使人正確地解決問(wèn)題。在你看來(lái)如果一些稀奇古怪的事務(wù)不顧一切地運(yùn)行著,要求他們給你發(fā)個(gè)補(bǔ)丁,只要能夠生效的話。
小心地說(shuō)“我們應(yīng)該怎樣”之類(lèi)的話,對(duì)“我該如何做”這樣的人伸出援手。
Alan
[注]這段話舉個(gè)例子說(shuō)明一下。Linux IPv6源碼作者以前在葡萄牙上網(wǎng)聊天,只會(huì)簡(jiǎn)單討論和問(wèn)一些基本問(wèn)題。我們助其弄明白一些內(nèi)核原理之后,他寫(xiě)了大約75%的IPv6協(xié)議棧代碼,他最近受聘于美國(guó)思科公司。
附錄一:一篇針對(duì)本文的吐槽貼
附錄二:2009年Cox回復(fù)Torvalds的郵件,事情起因是Cox的一個(gè)tty patch導(dǎo)致kdesu(KDE project’s su utility)程序無(wú)法工作,該問(wèn)題爭(zhēng)論長(zhǎng)達(dá)兩個(gè)星期,此后Alan離開(kāi)了Linux項(xiàng)目投奔Intel。