開源時代 準(zhǔn)備好了嗎?
由于我長期從事開源方面的工作,所以有時候人們就問我,開源軟件何時能夠成為商業(yè)軟件的一種可行替代方法。我的回答是“至少在 10 年以前就已經(jīng)能夠替代商業(yè)軟件了”。這個問題已經(jīng)不是關(guān)于我是否能夠在日常生活是使用開源軟件;真正的問題是,如果沒有開源軟件,我能夠做這樣多的事情嗎?我一個手機(jī)運(yùn)行 Linux;另一個手機(jī)運(yùn)行的是包含大量 BSD 代碼的操作系統(tǒng)。這兩個手機(jī)主要是面向使用 gcc 進(jìn)行編譯的開發(fā)人員的。
這里特別說明一下:當(dāng)我提到“開源”,我指的是由開放源碼促進(jìn)會(Open Source Initiative,OSI)所定義的內(nèi)容。大部分時間,我實際上并沒有詳細(xì)研究正式的檢查清單。和其他著名的目錄類似,我看到它時我就會理解。如果您能夠獲得源代碼并且可以自由地修改代碼,那么它很可能就是開源的。
本文是使用一個運(yùn)行在開源內(nèi)核上的開源編輯器編寫的,并且將會使用開源的郵件客戶端和郵件服務(wù)器,通過運(yùn)行 Linux 的無線路由器發(fā)送給編輯。
開源已經(jīng)出現(xiàn)很長時間了。即使您所處環(huán)境是非常“封閉的”,您在日常工作中也會有許多機(jī)會可能用到開源軟件,通常您都感覺不到它們的存在。畢竟,這些是息息相關(guān)的。
在本文中,系列文章的第一部分將介紹開源軟件的成功,我將概括介紹現(xiàn)在開源軟件的真實繁榮現(xiàn)狀。這其中包含兩個方面:一是具體的開源軟件,二是底層的開源原理。這兩個方面均廣泛地滲入到原本視為對開放性和共享性有明顯抵觸性的市場和文化領(lǐng)域。
開源在一開始好像違背了市場運(yùn)作的預(yù)期方式。既然軟件銷售明顯是一個大型且成功的行業(yè),為什么人們會白送軟件呢?這個問題的答案是它在經(jīng)濟(jì)上更有優(yōu)勢,這也是通常選擇開源軟件的原因。
普遍性的勝利
人們熱衷討論普遍性的悲劇。對于那些由于某些原因而不了解這句話來源的人而言,可以參考這里的概括。想象一個工業(yè)前時期的小村莊,其中有一個共用的草地。當(dāng)然,每個人家里都有一只山羊。(這就像一個反面情景喜劇一樣,每一個都藏有一只山羊。)現(xiàn)在,每個人都可以選擇將山羊放牧到屬于他們自己的草地上,或者選擇隨意放牧山羊(普遍性)。如果將山羊隨意放牧到任意位置,那么山羊會吃得更好。那么您贏了!但是如果 每個人 都將山羊放牧到任意位置,那么最終草地會被破壞而變成一個荒地,那么所有人都輸了!
出于某些原因,人們有時會預(yù)測出關(guān)于白送軟件的一個共同結(jié)果:所有人都使用自由軟件,但是沒有人會貢獻(xiàn),而最終它將消失。但是事實證明這并不是個大問題。這種情況并沒有發(fā)生。相對,人們相互協(xié)作,開發(fā)出許多人可以使用的優(yōu)質(zhì)軟件。
石頭湯
讓我們看一個更復(fù)雜一些的故事:有一個騙子發(fā)明了著名的“石頭湯”,他告訴人們,使用他的這個特殊的石頭湯食譜,每個人只需要使用極少的食物就能夠烹飪出豐盛的一餐。
您會發(fā)現(xiàn),許多軟件都不是用于商業(yè)銷售的。它們是由于公司需要使用它來完成工作而編寫的。所以他們會計劃花費(fèi)時間和精力來開發(fā)這些軟件。因此,他們并無意銷售這個軟件,也無意將它產(chǎn)品化;他們對這方面沒有興趣,因為這并不是他們的業(yè)務(wù),而且它也不太可能產(chǎn)生收益。所以資金只會投入到內(nèi)部的基礎(chǔ)架構(gòu),使他們更具生產(chǎn)力,但是,最終沒有出路。
如果我有 15 萬美元的預(yù)算來開發(fā)一個內(nèi)部使用的軟件,而其中一個工程師說通過使用一些免費(fèi)軟件,他能夠?qū)⒊杀緶p少到 5 萬美元,那么我很可能會采用這個軟件?,F(xiàn)在,要記住:我不計劃通過這個軟件賺錢,即不會銷售它。我只是需要他來完成我的工作。所以我并沒強(qiáng)烈的意愿去擁有這個軟件,而且即使我以前擁有這個軟件,其他人也可以使用它。但是我可能會發(fā)現(xiàn),如果我將修改貢獻(xiàn)回社區(qū),那么我保持本地修改更新的成本會更低。這意味著所有人都在幫我免費(fèi)地修改軟件。
我們剛剛改造了石頭湯故事。需要這個軟件的公司都可以花費(fèi)較少的投入,獲得更好的功能,并且在這個過程中不會損失任何東西。而且,它還會增加推廣聲譽(yù)(想象一下 Linux 貢獻(xiàn)者清單;人們熱衷看到他們的名字列在這個清單上),所以將一個開源項目工作提交管理層并非難事。
免費(fèi)使用者不需要支付任何費(fèi)用
當(dāng)然,并非所有人都會對項目產(chǎn)生貢獻(xiàn)。并非每個人都需要貢獻(xiàn)。有一些人只是拿來主義,使用軟件,但不向其他人提供任何回報。雖然有一些授權(quán)方式是禁止這種行為的,但是其他的授權(quán)方式是不限制這一點(diǎn)的。為什么呢?因為免費(fèi)使用者不會增加其他使用者的成本。事實上,他們甚至?xí)o我們帶來好處,雖然這并非他們有意為之。
復(fù)制軟件實際上是免費(fèi)的。當(dāng)然,復(fù)制需要一定的成本。但是大多數(shù)時候,這個成本是非常低的,我們幾乎感覺不到它的存在。可能我們用來判定人們下載一個文件所需要成本的工作本身的成本是大于下載成本的。這意味著人們復(fù)制我們的自由軟件不會給我們帶來任何明顯的損失。它也不需要很大的運(yùn)營成本;它們不會消耗任何有限的資源。
但是這里所有的免費(fèi)使用者都代表著使用比其他軟件更好且更便宜軟件的人。并且這意味著他們的成本更低,并且這會轉(zhuǎn)換(通過競爭魔法)為更低的價格。人們由于不需要重復(fù)開發(fā)開源社區(qū)已實現(xiàn)的功能而節(jié)省下的金錢可以用在其他方面 — 某些新功能。
NASA 在 Mars Rover 中使用了開源軟件。那么 NASA 對社區(qū)的回饋貢獻(xiàn)是否重要呢?如果在您在美國交稅,那么就不重要;您已經(jīng)得到折扣了。這些錢是他們不需要花費(fèi)的,并且屬于他們的預(yù)算范圍。(事實上,他們確實有向社區(qū)貢獻(xiàn)代碼,這也是他們應(yīng)該做的。但是即使他們沒有這樣做,我們會從他們使用開源軟件的決定中受益。)
#p#
開源:不可或缺
在這里,如果您是一位軟件開發(fā)人員,我?guī)缀蹩梢钥隙ǎ皇褂瞄_源軟件您是無法完成日常工作的,而即使您可以不使用開源軟件,您可能會很麻煩。如果您使用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)(如互聯(lián)網(wǎng)),您不可能不使用開源軟件。以下是一些證明開源軟件不可或缺的例子。
編程工具
開源軟件應(yīng)用最廣泛的領(lǐng)域之一就是編程工具。以下是最近十幾年我用來編寫代碼的語言清單:
●awk
●C
●C++
●ECMAScript
●Icon
●Java™
●Lua
●Objective-C
●Perl
●PHP
●PostScript
●Python
●Ruby
●shell(/bin/sh 和同系語言)
對于大多數(shù)人而言,它們的共同點(diǎn)是什么?上面每一種語言都有相當(dāng)完整的開源實現(xiàn)。請注意:每一個都有。這個編程工具清單的選擇是非常好的。其中包括腳本語言和編譯語言,有您可用來編寫內(nèi)核的語言,也有您可用來編寫視頻游戲的語言。
如果用在現(xiàn)代軟件中,這似乎顯得有些奇怪,但是它通常適用于需要使用某種腳本化功能來開發(fā)自有腳本語言的適度通用程序,它們一般是非常有限且問題多多?,F(xiàn)在,在一個程序中只嵌入 Lua 或 Python 等程序是非常普遍的。它們是自由的,授權(quán)寬松,并且它們非常靈活。
類似地,許多編程語言以外的開發(fā)工具也廣泛地以開源方式出現(xiàn)。雖然肯定也有一些商業(yè)編輯器,但是其中有一些是非常不錯的,我認(rèn)識的大多數(shù)開發(fā)人員都會至少使用一種開源編輯器作為他們的主要工具。(我選擇的是 nvi,我覺得它比一直存在的 vim 更好用和更熟悉一些。)編譯工具,如 make 和 Ant,通常也是開源的。
無論從何種角度分析,開發(fā)工具成為開源占據(jù)的一個較大領(lǐng)域都不是一種巧合。開發(fā)人員習(xí)慣于開發(fā)編程工具。他們開發(fā)這些工具不是為了賺錢 — 只是為了能使用這些工具。共享這些工具使開發(fā)人員能夠利用其他人的合力,更快地實現(xiàn)更好的工具。(請參考 “普遍性的勝利” 中關(guān)于這個問題的討論。)
開源已經(jīng)改變了軟件開發(fā)人員的日常工作,而其中一個原因是開發(fā)人員很可能將開源模型推廣到他們所開發(fā)的其他軟件上。我們知道它的作用;我們每天都使用它來完成工作。年長的開發(fā)人員還體會過沒有開源工具的日子是非常難過的。
參考實現(xiàn)與基礎(chǔ)架構(gòu)
TIFF 圖像標(biāo)準(zhǔn)提供了一個開源參考實現(xiàn)。這意味著其他公司就沒有理由再實現(xiàn)一個不兼容的實現(xiàn);因為擁有這個已證明兼容的實現(xiàn)是免費(fèi)的。這是一種保證格式可靠性和可用性的非常有效的策略。
提供具有完整源代碼和寬松授權(quán)方式的規(guī)范參考實現(xiàn)的趨勢使事情變得更簡單。過去,極不兼容的文件格式實現(xiàn)是非常普遍的。(您仍然還能看到一些格式,其官方規(guī)范引用了一個特殊的歷史實現(xiàn),但是該實現(xiàn)沒有源代碼。)提供了參考實現(xiàn)的格式和協(xié)議更容易被采納和傳播。
當(dāng)然,這也是產(chǎn)生最廣泛采用的協(xié)議族的原因。
采用互聯(lián)網(wǎng)創(chuàng)建的方法
由于戈爾先生的出現(xiàn),開源軟件已經(jīng)成為互聯(lián)網(wǎng)創(chuàng)造的主要及基礎(chǔ)部分。BSD TCP/IP 協(xié)議及相關(guān)工具已經(jīng)廣泛應(yīng)用于簡化軟件開發(fā)周期。從 NCSA 發(fā)布的 httpd 和 Mosaic 開始,構(gòu)成互聯(lián)網(wǎng)(和現(xiàn)在的萬維網(wǎng))的這些工具的大部分都已經(jīng)是開源的。
開源是基礎(chǔ)架構(gòu)的候選者,順理成章;您希望得到開放性,您希望有許多人來檢查缺陷,并且使用這些軟件來降低開發(fā)成本也是很重要的。而可能最重要的是,開源在幫助您自由實現(xiàn)互操作性方面提供了很大的幫助。因為互操作性是網(wǎng)絡(luò)工具的一個主要功能,它不是次要問題,所以這是非常有吸引力的特性。
開源對互聯(lián)網(wǎng)影響是很大的。特別是,OpenSSL(及具體的工具,如 OpenSSH)的影響是巨大的。如果沒有一個開放自由的實現(xiàn),SSL 可能已經(jīng)成為一個用于制造 “市場分化” 的工具,這意味著可能成為一個商業(yè)優(yōu)勢,而試圖阻止人們進(jìn)行安全傳輸。但現(xiàn)實是相反,它得到最廣泛的應(yīng)用。(而且,正如 Firesheep 開發(fā)人員所介紹的,它還應(yīng)該 更加 廣泛地使用。)
并非完全開源,而是另有目的
最后需要指出的是,有一些 “開源” 并不是正確的,而明顯是由開源觸動的。例如,Civilization IV 游戲的源代碼已經(jīng)向用戶開放,用戶可以對它進(jìn)行修改和重新設(shè)計。id Software(著名的 Quake 和 Doom 的開發(fā)人員)的游戲預(yù)計最終會發(fā)布源代碼,并采用 GPL 授權(quán)方式。
這些較老的游戲?qū)嶋H已經(jīng)到了發(fā)展末期了,拋棄商業(yè)因素是它們贏得下一批玩家的一種非常好方法。這是一種由開源社區(qū)塑造的態(tài)度。
開源能夠幫助人們認(rèn)識到從某個時刻起您不再需要通過源代碼保密來獲得經(jīng)濟(jì)上的成功。
【編輯推薦】