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