國內(nèi)的很多軟件公司或研究機(jī)構(gòu)對(duì)開源的熱情僅限于免費(fèi)的代碼,而絕少深度參與開源社區(qū)的活動(dòng)。我們對(duì)于開源始終是利用多,而貢獻(xiàn)少,從國內(nèi)發(fā)起的有一定影響力的開源項(xiàng)目如果不是完全沒有,恐怕也是鳳毛麟角。我們是如此的吝嗇,即使對(duì)于正在使用的開源項(xiàng)目,也不肯輕易“浪費(fèi)”任何的開發(fā)的測(cè)試的資源。我有幸兩次聆聽過自由軟件的精神領(lǐng)袖級(jí)的人物Richard Stallman的演講,他特別強(qiáng)調(diào)“Free is not free”,自由不是免費(fèi)。同樣地,開源是自由(Free),而不是免費(fèi)(Free)。也許,大家在毫無顧忌地盡情地享用開源的免費(fèi)大餐的時(shí)候,完全忘記了開源的真正力量是自由,而不是免費(fèi)。
開源是什么?
簡(jiǎn)單地講,開源包括三個(gè)方面的內(nèi)涵:
首先,開源是一個(gè)項(xiàng)目(Project)。作為項(xiàng)目,為了吸引更多的有興趣且熱心的技術(shù)的和非技術(shù)的人們的參與,開源往往有其獨(dú)特的靈活的的項(xiàng)目組織方式和開發(fā)流程,這一點(diǎn)和公司截然不同。當(dāng)然,一般地講,一個(gè)開源項(xiàng)目常常由一個(gè)或若干個(gè)公司主導(dǎo),但絕對(duì)不會(huì)排斥任何它他組織、公司、以及獨(dú)立開發(fā)者的參與。開源項(xiàng)目的管理團(tuán)隊(duì)大多通過民主的方式產(chǎn)生。
其次,開源是一個(gè)社區(qū)(Community)。作為社區(qū),開源為開發(fā)者、測(cè)試者、捐贈(zèng)者、和用戶提供了一個(gè)由郵件列表、 論壇、IRC和各種會(huì)議構(gòu)成的交流平臺(tái)。Open Source中的Open不僅僅是開放的代碼,同時(shí)也是開放的交流的平臺(tái)。只要本著相互尊重的原則,技術(shù)的、開發(fā)的、測(cè)試的、使用的、管理的幾乎所有的問題都可以是討論的對(duì)象。大家一起出主意、想辦法,從各個(gè)方面為開源貢獻(xiàn)力量。
最后,開源是一個(gè)產(chǎn)品(Product)。很多時(shí)候,開源發(fā)布的產(chǎn)品難以滿足用戶的需求。所以,在不違反相關(guān)許可證(License)的條件下,有些公司對(duì)其加以定制,就變身為自己的產(chǎn)品或解決方案。當(dāng)然,有些公司也會(huì)反哺開源的發(fā)展。這是一個(gè)雙贏的良性循環(huán)。幾乎所有的開源項(xiàng)目都有相關(guān)的產(chǎn)品發(fā)布。這樣的例子可謂舉不勝舉。Linux的產(chǎn)品化就是一個(gè)最經(jīng)典的例子,可以說,如果沒有Linux的產(chǎn)品化,也不會(huì)有Linux開源的枝繁葉茂。另外的例子還有Eclipse的各種衍生產(chǎn)品。而OpenOffice.org的分裂和衰落也許是其產(chǎn)品化不夠多不夠好導(dǎo)致的。在我們這個(gè)神奇的國度,據(jù)說有一個(gè)絕頂聰明的院士,把國外的一個(gè)開源項(xiàng)目發(fā)揮到了極致的水平,竟以此榮獲了國家自然科學(xué)一等獎(jiǎng),令人嘆為觀止,不服不行。
重要的是,開源是一個(gè)自由的世界。人們可以自由地加入或退出社區(qū),自由地討論各種問題,發(fā)表各種建議。開發(fā)者可以自由地學(xué)習(xí)開源的代碼和技術(shù),用戶可以自由地使用開源產(chǎn)品。有了開放的代碼,在不違背開源代碼和產(chǎn)品的許可證的條件下,可以自由改寫、刪除、增加開源產(chǎn)品的功能。公司和組織也可以自由地利用開源的代碼和技術(shù),自由地出售開源的產(chǎn)品。正如上文所述,開源鼓勵(lì)公司參與的產(chǎn)品化。人人為我,我為人人,這也許可以作為開源的自由的真諦,不過,這實(shí)在是太美好了,美好得簡(jiǎn)直讓人難以置信?;氐浆F(xiàn)實(shí),自由的愿景無論多么令人向往,一個(gè)開源項(xiàng)目/社區(qū)的成敗最終還是系于民心士氣,若自由的力量仍然不能喚起人們參與的熱情,那么這個(gè)開源社區(qū)/項(xiàng)目存在的理由和價(jià)值就大大的值得懷疑了。
另一方面,更為重要的是,有論者認(rèn)為,開源本身就是一種免費(fèi)商業(yè)模式,此言不虛也。這就如同正在被互聯(lián)網(wǎng)公司演繹得如火如荼的免費(fèi)商業(yè)模式一樣。比如,我們雖然并沒有為每次的Google搜索買單,但我們的搜索行為會(huì)作為大數(shù)據(jù)的一部分最終轉(zhuǎn)化為Google的廣告收入。擁有足夠多的用戶才是這種商業(yè)模式得以成功的關(guān)鍵所在。同樣地,開源項(xiàng)目的源代碼和最終的產(chǎn)品都是免費(fèi)的,開放的,可以被自由地而不是任意地使用。開源的商業(yè)模式包括通過基金會(huì)募捐,向用戶提供技術(shù)支持服務(wù)而收取費(fèi)用,另外,許多公司在做開源項(xiàng)目產(chǎn)品化的同時(shí)也向開源直接貢獻(xiàn)開發(fā)和測(cè)試資源,這其實(shí)也是一種資助行為。當(dāng)然,正如上文所言,得到大量的免費(fèi)用戶的支持,這種開源商業(yè)模式才有可能取得成功。
企業(yè)參與開源的好處
僅看到開源免費(fèi)的好處,而無視開源的自由的力量,即使從純功利的角度來講,也絕對(duì)是一種短視的行為。對(duì)于正在使用開源的公司而言,積極的參與開源社區(qū)的建設(shè)起碼可以從以下兩個(gè)方面獲益:
第一,對(duì)開源的貢獻(xiàn)越多,影響就會(huì)越大,從而產(chǎn)生良好的廣告效應(yīng)。通過開源,能夠更好地展示自己的技術(shù)、產(chǎn)品和解決方案,并贏得用戶的信賴。
第二,如果實(shí)力足夠強(qiáng),有能力主導(dǎo)開源項(xiàng)目的開發(fā)方向,就可以更好的匯聚開源社區(qū)的資源來完善自己的產(chǎn)品,這給公司帶來的好處自然是不言而喻的。對(duì)于程序員來講,參與開源的最大好處就是貢獻(xiàn)所得到的成就感。在IBM工作的時(shí)候,我所在的產(chǎn)品線Symphony是基于OpenOffice.org的辦公套件,當(dāng)時(shí),我開發(fā)了一個(gè)回退字體(rollback font)快速匹配的算法,當(dāng)用戶為文本指定的字體在系統(tǒng)中不存在時(shí),該算法可快速地從系統(tǒng)中找到一個(gè)最合適的替代字體,這可以大大提高文本的渲染速度,改善文本的顯示質(zhì)量。我把這一算法成功地提交給了OpenOffice.org。我清楚地知道,用戶每次使用OpenOffice.org打開編輯一個(gè)文檔時(shí),都可能運(yùn)行這個(gè)算法,這種成就感便油然而生。當(dāng)然,令人遺憾的是OpenOffice.org分裂了。不過libreoffice.org依然還繼續(xù)存在。
其實(shí),阻止國內(nèi)程序員參與開源的一個(gè)重要的原因不是技術(shù)能力的限制,而是英語水平的限制。學(xué)了那么多年的英語,即便是得到了四六級(jí)證書,也會(huì)發(fā)現(xiàn)學(xué)的那點(diǎn)啞巴英語根本派不上用場(chǎng)。語言不通所導(dǎo)致的交流不暢是一個(gè)艱澀的困難,但遠(yuǎn)遠(yuǎn)小于心中對(duì)外部不可知的世界和不可控的變化的畏懼所產(chǎn)生的茍且偷安的惰性思想的障礙。我無意在這里討論如何提高個(gè)人的英語水平,只是想強(qiáng)調(diào),有志者事竟成,一個(gè)有出息的程序員,如果心胸足夠的開放,對(duì)未知的領(lǐng)域充滿了好奇和向往,英語就絕非不可攻克的堡壘。況且,國內(nèi)的程序員最擔(dān)心的是聽力和口語,而大多時(shí)候,開源社區(qū)都是通過書面的郵件來溝通。
如何參與開源
最后,以下幾點(diǎn)僅供有志于開源的朋友參考:
第一,幾乎每個(gè)開源社區(qū)都向新手提供一個(gè)入門指南(Getting Started Guide),仔細(xì)閱讀可以避免走不必要的彎路。
第二,和社區(qū)大膽的互動(dòng)。有什么問題不明白,不要自己冥思苦想,盡管大膽的提出來,即使再簡(jiǎn)單,也總是會(huì)有熱心的人們來回答,更不會(huì)有人嘲笑你。當(dāng)然,交流的時(shí)候,一定要尊重對(duì)方。郵件中要包含基本的禮貌,對(duì)別人的幫助要表示感謝。與此同時(shí),也不要忘了幫助別人。
第三,開源的開發(fā)多少有一點(diǎn)自由的散漫,沒有太嚴(yán)格的計(jì)劃。所以,有時(shí)候,會(huì)覺得自己的要求沒有得到很快的響應(yīng)和滿足。需要注意的是,并不是自己提交的BUG就一定被認(rèn)可,并不是自己提交的代碼就一定被接受。遇到這種情況,要把道理講清楚,而不要意氣用事。
第四,有些開源項(xiàng)目的代碼質(zhì)量實(shí)在是不敢恭維,可能是參與開發(fā)的程序員良莠不齊,加之監(jiān)管不嚴(yán)所致,但也并非全部如此。我還記得經(jīng)常開玩笑說,OpenOffice.org代碼有些函數(shù)長(zhǎng)得常常從這頭看不到另一頭。哥德爾不完全定理指出,任何一個(gè)類似于羅素和懷特海在《數(shù)學(xué)原理》中給出的數(shù)論的形式系統(tǒng),無論有多強(qiáng),都是不完全的,總有一個(gè)良構(gòu)的G命題,既不能被證明是真,也不能被證明為假,所以任何形式系統(tǒng)都不能完全地描述數(shù)論乃至于數(shù)學(xué)的全部的性質(zhì),這當(dāng)然不是十全十美的結(jié)論,但從另一方面講,這又意味著數(shù)學(xué)真理的發(fā)現(xiàn)仍然有賴于數(shù)學(xué)家們創(chuàng)造性的聰明才智,可謂失之東隅,收之桑榆。大而言之,人生總是有太多的缺憾、苦難、荒謬、離別、煩惱、虛榮、憂愁、彷徨、傷心、失戀、平庸、志大而才疏、懷才卻不遇、白富美的空幻、矮矬窮的苦痛等等,相反,正是這壞的一面才反襯出那好的一面更值得珍惜,只有那些不完美才成就了完美,這就是一個(gè)哲學(xué)思辨的怪圈。集眾人之力開發(fā)的開源的計(jì)算機(jī)程序又何嘗不是如此。所以,凡事還需忍耐些,且行且珍惜吧。
第五,理論上講,若要實(shí)現(xiàn)一個(gè)軟件功能,只要在邱奇-圖靈論題可計(jì)算的范圍之內(nèi),都可以用計(jì)算機(jī)編程語言來表達(dá),在這一點(diǎn)上,無論多么高明的算法和程序,其實(shí)并沒有什么艱深得不可逾越的技術(shù)鴻溝。可以說,技術(shù)總是簡(jiǎn)單,自己能夠做到的,別人照樣可以做到,反之亦然。但是,藝術(shù)卻是無限,如果想要達(dá)到艾舍爾那樣的繪畫水平或巴赫那樣的音樂水平,做不到就是做不到啊。當(dāng)然,計(jì)算機(jī)編程也可以看做藝術(shù),如Donald Ervin Knuth的名著《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》(The Art of Computer Programming)所呈現(xiàn)的技巧,因此,程序的質(zhì)量和算法的性能確實(shí)有上下高低之別??傊瑹o論是公司和個(gè)人,完全沒有必要把一切東西都當(dāng)做寶貝疙瘩,像祖?zhèn)鞯奈涔γ丶蛑兴幟胤侥菢訃?yán)密的珍藏保護(hù)起來,以為這樣,就可以做到我有而別人不能夠有,那可就大錯(cuò)特錯(cuò)了。所以,很多情況下,對(duì)開源的貢獻(xiàn)并不會(huì)損害公司的競(jìng)爭(zhēng)力,相反,還會(huì)加強(qiáng)公司的競(jìng)爭(zhēng)力。
第六,與第五點(diǎn)相反,作為獨(dú)立的程序員,也要充分了解你所在公司關(guān)于知識(shí)產(chǎn)權(quán)的政策,千萬不要把公司專有知識(shí)產(chǎn)權(quán)的代碼提交到開源社區(qū)。