程序員參與開源有什么好處?

/本文轉載自InfoQ,作者賈彥民

 

開源是什么?

開源的本質,是自由而不是免費。

國內的很多軟件公司或研究機構對開源的熱情僅限于免費的代碼,而絕少深度參與開源社區的活動。我們對于開源始終是利用多,而貢獻少,從國內發起的有一定影響力的開源項目如果不是完全沒有,恐怕也是鳳毛麟角。我們是如此的吝嗇,即使對于正在使用的開源項目,也不肯輕易“浪費”任何的開發的測試的資源。我有幸兩次聆聽過自由軟件的精神領袖級的人物 Richard Stallman 的演講,他特別強調“Free is not free”,自由不是免費。同樣地,開源是自由(Free),而不是免費(Free)。也許,大家在毫無顧忌地盡情地享用開源的免費大餐的時候,完全忘記了開源的真正力量是自由,而不是免費。

 

開源是什么?簡單地講,開源包括三個方面的內涵:

 

 首先,開源是一個項目 (Project)。

 

作為項目,為了吸引更多的有興趣且熱心的技術的和非技術的人們的參與,開源往往有其獨特的靈活的的項目組織方式和開發流程,這一點和公司截然不同。當然,一般地講,一個開源項目常常由一個或若干個公司主導,但絕對不會排斥任何它他組織、公司、以及獨立開發者的參與??聰钅康墓芾磽哦喲蠖嗤ü裰韉姆絞講?。

 

其次,開源是一個社區(Community)。

 

作為社區,開源為開發者、測試者、捐贈者、和用戶提供了一個由郵件列表、 論壇、IRC 和各種會議構成的交流平臺。Open Source 中的 Open 不僅僅是開放的代碼,同時也是開放的交流的平臺。只要本著相互尊重的原則,技術的、開發的、測試的、使用的、管理的幾乎所有的問題都可以是討論的對象。大家一起出主意、想辦法,從各個方面為開源貢獻力量。

 

 最后,開源是一個產品(Product)。

 

很多時候,開源發布的產品難以滿足用戶的需求。所以,在不違反相關許可證 (License) 的條件下,有些公司對其加以定制,就變身為自己的產品或解決方案。當然,有些公司也會反哺開源的發展。這是一個雙贏的良性循環。幾乎所有的開源項目都有相關的產品發布。這樣的例子可謂舉不勝舉。Linux 的產品化就是一個最經典的例子,可以說,如果沒有 Linux 的產品化,也不會有 Linux 開源的枝繁葉茂。另外的例子還有 Eclipse 的各種衍生產品。而 OpenOffice.org 的分裂和衰落也許是其產品化不夠多不夠好導致的。在我們這個神奇的國度,據說有一個絕頂聰明的院士,把國外的一個開源項目發揮到了極致的水平,竟以此榮獲了國家自然科學一等獎,令人嘆為觀止,不服不行。

 

開源從哪里來?

 

開源是一個自由的世界。人們可以自由地加入或退出社區,自由地討論各種問題,發表各種建議??⒄嚦梢宰雜傻匱翱吹拇牒圖際?,用戶可以自由地使用開源產品。有了開放的代碼,在不違背開源代碼和產品的許可證的條件下,可以自由改寫、刪除、增加開源產品的功能。公司和組織也可以自由地利用開源的代碼和技術,自由地出售開源的產品。正如上文所述,開源鼓勵公司參與的產品化。人人為我,我為人人,這也許可以作為開源的自由的真諦,不過,這實在是太美好了,美好得簡直讓人難以置信?;氐較質?,自由的愿景無論多么令人向往,一個開源項目 / 社區的成敗最終還是系于民心士氣,若自由的力量仍然不能喚起人們參與的熱情,那么這個開源社區 / 項目存在的理由和價值就大大的值得懷疑了。

 

另一方面,更為重要的是,有論者認為,開源本身就是一種免費商業模式,此言不虛也。這就如同正在被互聯網公司演繹得如火如荼的免費商業模式一樣。比如,我們雖然并沒有為每次的 Google 搜索買單,但我們的搜索行為會作為大數據的一部分最終轉化為 Google 的廣告收入。擁有足夠多的用戶才是這種商業模式得以成功的關鍵所在。同樣地,開源項目的源代碼和最終的產品都是免費的,開放的,可以被自由地而不是任意地使用??吹納桃的J槳ㄍü鴰崮季?,向用戶提供技術支持服務而收取費用,另外,許多公司在做開源項目產品化的同時也向開源直接貢獻開發和測試資源,這其實也是一種資助行為。當然,正如上文所言,得到大量的免費用戶的支持,這種開源商業模式才有可能取得成功。

 

僅看到開源免費的好處,而無視開源的自由的力量,即使從純功利的角度來講,也絕對是一種短視的行為。對于正在使用開源的公司而言,積極的參與開源社區的建設起碼可以從以下兩個方面獲益:第一,對開源的貢獻越多,影響就會越大,從而產生良好的廣告效應。通過開源,能夠更好地展示自己的技術、產品和解決方案,并贏得用戶的信賴。第二,如果實力足夠強,有能力主導開源項目的開發方向,就可以更好的匯聚開源社區的資源來完善自己的產品,這給公司帶來的好處自然是不言而喻的。

 

對于程序員來講,參與開源的最大好處就是貢獻所得到的成就感。在 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)所呈現的技巧,因此,程序的質量和算法的性能確實有上下高低之別。總之,無論是公司和個人,完全沒有必要把一切東西都當做寶貝疙瘩,像祖傳的武功秘籍或中藥秘方那樣嚴密的珍藏?;て鵠?,以為這樣,就可以做到我有而別人不能夠有,那可就大錯特錯了。所以,很多情況下,對開源的貢獻并不會損害公司的競爭力,相反,還會加強公司的競爭力。

 

第六,與第五點相反,作為獨立的程序員,也要充分了解你所在公司關于知識產權的政策。

 

千萬不要把公司專有知識產權的代碼提交到開源社區。

 

第七,提一個思考題:你覺得中國企業、程序員的開源有哪些是值得贊賞的,又有哪些亂象是需要批判的?


上一篇: java到底如何學的透徹?

下一篇: 沒有符合條件的記錄

分享到: 更多
时时彩二码不定位技巧 电子游戏娱乐大全 云南快乐时时2019123 幸运飞艇助赢计划软件安卓版 幸运飞艇买法技巧 凤凰时时彩 5分pk拾计划软件 重庆时时彩个位经验 体彩打印机 手机斗牛看牌抢庄技巧 福彩七乐彩开奖走势图 牛牛看牌抢庄有打法吗 狗万赢钱稳赚方法 足球竞猜比分直播 七乐彩中五个号多少钱 麻将游戏下载免费