<pre>
開放源碼和開源軟件的不同是什么?
開放源碼不能叫做開源軟件嗎?
所謂開源,僅僅是指符合OSI定義的Open Source么?
</pre>
Open Source的來歷
1997年,埃里克·雷蒙(Eric Raymond)出版其著作《大教堂和市集》,探討黑客社區(qū)與自由軟件原則。1998年初,該論文受到極大的關(guān)注,為促成網(wǎng)景通訊公司將其受歡迎的互聯(lián)網(wǎng)套裝軟件《網(wǎng)景通訊家(Netscape Communicator)》釋放成為自由軟件的因素之一。這些代碼即為今日大家熟悉的Mozilla Firefox與Thunderbird。
網(wǎng)景的行動(dòng)激起雷蒙及其伙伴深入研究如何將自由軟件基金會(huì)的自由軟件概念及優(yōu)點(diǎn)帶入商業(yè)軟件產(chǎn)業(yè)。他們查覺基金會(huì)的社會(huì)活動(dòng)不如網(wǎng)景等公司的行動(dòng)來得吸引人,因而試圖重新包裝自由軟件運(yùn)動(dòng),以強(qiáng)調(diào)分享與協(xié)作軟件源代碼的潛在商機(jī)。他們選用的新名稱為“開放源代碼”(open source),很快地布魯斯·佩倫斯(Bruce Perens)、出版家提姆·奧萊理(Tim O'Reilly)、林納斯·托瓦茲(Linus Torvalds,)及其他人支持新名稱。開放源代碼促進(jìn)會(huì)于1998年2月創(chuàng)建,以推動(dòng)使用新名稱,并宣揚(yáng)開放源代碼的原則。
注:以上介紹來源于中文維基百科《開源軟件》詞條
OSI對(duì)開源的定義
開放源代碼的定義由Bruce Perens(Debian的創(chuàng)始人之一)定義如下:
- 自由再散布(Free Distribution):允許獲得源代碼的人可自由再將此源代碼散布。
- 源代碼(Source Code):程序的可執(zhí)行文件在散布時(shí),必需以隨附完整源代碼或是可讓人方便的事后獲取源代碼。
- 派生著作(Derived Works):讓人可依此源代碼修改后,在依照同一許可協(xié)議的情形下再散布。
- 原創(chuàng)作者程序源代碼的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本號(hào)碼以與原始的代碼做分別,保障原始的代碼完整性。
- 不得對(duì)任何人或團(tuán)體有差別待遇(No Discrimination Against Persons or Groups):開放源代碼軟件不得因性別、團(tuán)體、國家、族群等設(shè)置限制,但若是因?yàn)榉梢?guī)定的情形則為例外(如:美國政府限制高加密軟件的出口)。
- 對(duì)程序在任何領(lǐng)域內(nèi)的利用不得有差別待遇(No Discrimination Against Fields of Endeavor):意即不得限制商業(yè)使用。
- 散布許可協(xié)議(Distribution of License):若軟件再散布,必需以同一條款散布之。
- 許可協(xié)議不得專屬于特定產(chǎn)品(License Must Not Be Specific to a Product):若多個(gè)程序組合成一套軟件,則當(dāng)某一開放源代碼的程序單獨(dú)散布時(shí),也必需要匹配開放源代碼的條件。
- 許可協(xié)議不得限制其他軟件(License Must Not Restrict Other Software):當(dāng)某一開放源代碼軟件與其他非開放源代碼軟件一起散布時(shí)(例如放在同一光盤),不得限制其他軟件的授權(quán)條件也要遵照開放源代碼的授權(quán)。
- 許可協(xié)議必須技術(shù)中立(License Must Be Technology-Neutral):意即許可協(xié)議不得限制為電子格式才有效,若是紙本的許可協(xié)議也應(yīng)視為有效。
注:以上介紹同樣來源于中文維基百科《開源軟件》詞條
從詞語分析的角度,討論“access to the source code”、“open-source”、“開放源代碼”、“開源”
在OSI的開源定義的文本中,開宗明義的第一句話就是:“Open source doesn't just mean access to the source code. ”甚至在后面的文字里,直接將open-source連接起來,表示這是一個(gè)詞,而不是2個(gè)詞組成的詞組。
所以,與此類似的,在中文里,我們可以認(rèn)為:“開放源代碼”是一個(gè)動(dòng)詞+一個(gè)名詞。而“開源”則是一個(gè)特定的詞匯。作為動(dòng)詞,我們說將某某軟件開源,是一種行為。作為形容詞,我們稱某某軟件是一個(gè)開源(的)軟件,不僅僅是指我們能夠獲取到他的源代碼。
從嚴(yán)格意義上來說:當(dāng)我們判斷某某軟件是否開源時(shí),首先需要檢查的,是他的授權(quán)協(xié)議,是否符合OSI對(duì)于開源的定義。最好,他的授權(quán)協(xié)議已經(jīng)獲得OSI的認(rèn)證,我們就不必仔細(xì)去分析他的條款了。
但是,如果我們看到一個(gè)軟件,不含任何授權(quán)協(xié)議的文本,我們可以確定:“這只是一堆代碼,雖然我可以獲得代碼,但是不是可以任意使用,都無法明確。更不要說算是開源軟件了?!?/p>
為什么開放源代碼,還需要有一個(gè)授權(quán)協(xié)議?
當(dāng)我將自己的源代碼放到某個(gè)地方,供人公開下載。接下來會(huì)發(fā)生什么事情?如果我是一個(gè)老手,由于見多識(shí)廣的原因,我會(huì)估計(jì)到,也許會(huì)發(fā)生很多不同的事情。有些事情,我樂于見到。比如某人給我發(fā)郵件,提交bug或者patch。有些事情,我無所謂(或者也沒辦法干涉),比如某人在自己家里修改了代碼,然后自己使用。有些事情,我認(rèn)為侵犯了自己的權(quán)益,比如別人拿了我的代碼,卻號(hào)稱是自己開發(fā)的,并且刪除了所有能夠證明是我的勞動(dòng)的證據(jù)。還有些事情,我也很在意,比如:雖然沒有侵犯我的權(quán)益,卻潛在的侵害了這個(gè)軟件的用戶的權(quán)益等等。
總之,當(dāng)一個(gè)項(xiàng)目的源代碼被公開,哪些事情,我希望發(fā)生。哪些事情,我不希望發(fā)生。這就需要在一個(gè)協(xié)議里,被明確的規(guī)定下來。
如果發(fā)布源代碼的人,對(duì)此毫不在意,甚至由于“根本沒仔細(xì)思考過會(huì)發(fā)生什么”,那么我們會(huì)認(rèn)為,這樣的“開源”,的確是不夠認(rèn)真。
在我曾經(jīng)翻譯的一篇《開源項(xiàng)目成功的十條準(zhǔn)則》里,第二條就明確寫到:“以相同方式共享”是開源的安全帶。在遇到嚴(yán)重的事故之前,你大可吹噓自己完全不需要它。一旦出現(xiàn)事故,你就會(huì)發(fā)現(xiàn)自己滿臉污垢,或者‘輕微擦傷’,不要成為一個(gè)“傷員”。使用“以相同方式共享”的許可證吧,如果你覺得GPL/LGPL太過于政治化,那就用MPLv2。
老司機(jī)的教訓(xùn),要認(rèn)真的聽啊!
太過于政治化的許可證,是怎么回事?
在開源(Open Source)之前,其實(shí)另外還有一個(gè)重要的先驅(qū),自由軟件(Free Software),在自由軟件的定義中,維護(hù)軟件用戶的自由是正義的,限制(剝奪)軟件用戶的自由是非正義的。
自由軟件用戶的四項(xiàng)自由是指:
- 自由度0:無論用戶出于何種目的,必須可以按照用戶意愿,可以隨時(shí)隨處自由地運(yùn)行該軟件。
- 自由度1:用戶可以自由地學(xué)習(xí)并修改該軟件,以此來幫助用戶完成用戶自己的計(jì)算。作為前提,用戶必須可以訪問到該軟件的源代碼。
- 自由度2:用戶可以自由地分發(fā)該軟件的拷貝。
- 自由度3:用戶可以自由地分發(fā)該軟件修改后的拷貝。借此,用戶可以把改進(jìn)后的軟件分享給整個(gè)社區(qū)令他人也從中受益。作為前提,用戶必須可以訪問到該軟件的源代碼。
正如自由軟件的官方文檔中所說的:“一個(gè)軟件只有提供了以上所有的自由給它的用戶,才可以被成為自由軟件。否則,它就是非自由的。盡管我們也可以比較非自由軟件為其用戶提供的自由度,但是我們認(rèn)為,無論如何,非自由軟件本身是不道德的。” 參考鏈接
是的,自由軟件的核心,在于其包含嚴(yán)厲的道德判斷。事實(shí)上,在絕對(duì)的軟件用戶的自由背后,開發(fā)者的自由,被道德綁架了。
再引用一段:“無論在哪種情況下,只有所有用戶使用的代碼都滿足了這四項(xiàng)基本自由,該程序才能被視作自由軟件。例如,有兩個(gè)程序,甲程序運(yùn)行的時(shí)候會(huì)自動(dòng)調(diào)用乙程序。發(fā)布甲程序意味著用戶必須使用到乙程序,那么必須甲乙兩個(gè)程序都是自由的,甲程序才是自由的。如果通過修改甲程序,使其不再依賴乙程序,那么僅僅以自由軟件的形式發(fā)布甲程序即可?!?/p>
相比之下,開源軟件的相關(guān)定義是:“許可協(xié)議不得限制其他軟件(License Must Not Restrict Other Software):當(dāng)某一開放源代碼軟件與其他非開放源代碼軟件一起散布時(shí)(例如放在同一光盤),不得限制其他軟件的授權(quán)條件也要遵照開放源代碼的授權(quán)?!?/p>
仔細(xì)的閱讀開源軟件的定義,我們就能發(fā)現(xiàn),較之自由軟件,“開源”是道德中立的。雖然RMS非常痛恨這樣的行為,但是我們應(yīng)該承認(rèn),更加寬松的、非道德化的開源標(biāo)準(zhǔn),更加有助于開發(fā)出更多、更好的軟件。
然而,開源同樣被罩上了道德的光環(huán)
Open-source是一個(gè)好詞,雖然沒有像Free Software那樣標(biāo)榜自己的道德屬性,這同樣是一個(gè)好詞。open-source是一種值得贊賞的行為,即使最終因?yàn)殚_源,企業(yè)能夠賺得更多,但是在開源的那一刻,企業(yè)是放棄了一部分潛在利益的。
至于個(gè)人的開源,那就大多數(shù)是無利可圖,也就更加值得欽佩了。
在這種情況下,不僅僅是社會(huì)上對(duì)于開源有諸多褒揚(yáng),一旦企業(yè)決定開源,肯定會(huì)加入到歌頌開源,標(biāo)榜&自我標(biāo)榜的行列之中。既然都已經(jīng)放棄了一部分潛在的“利”,當(dāng)然得在“名”上面努力的賺回來呀。
于是,整個(gè)IT圈子里,會(huì)有這種一種氛圍:只要一個(gè)企業(yè)愿意開源,就值得稱贊。而且,企業(yè)開源,也成為這個(gè)企業(yè),變得更加開放,更加“尊重社區(qū)”的象征。更進(jìn)一步的,如果大家發(fā)現(xiàn),這個(gè)企業(yè),并非真正開源,只不過賺了名聲,卻完全沒有犧牲利益時(shí)。一種感情受到傷害的心態(tài),油然而生。
“偽開源”的道德譴責(zé),也由此而生。
企業(yè)開源,不是一種道德行為,而應(yīng)該是一種商業(yè)行為
我們?cè)?jīng)聽過一句話:“免費(fèi)的其實(shí)是最貴的。”同樣的理由:“當(dāng)一家企業(yè)跟你談情懷,最終他還是想賺你的錢?!彼?,如果一家企業(yè)聲稱自己的“開源”或者“贊助開源”,完全不是為了自己的商業(yè)利益。我反正是不信的。
相反,我寧愿一家企業(yè),真的理解了以開源為基礎(chǔ)的商業(yè)模式,并且通過成熟、有效運(yùn)作,借助商業(yè)賺取了更多的利益。這種光明正大的賺錢,值得所有人敬佩。包括商業(yè)眼光、技術(shù)實(shí)力與市場(chǎng)手段!
假設(shè)真的有企業(yè)家,出于情懷而開源。我倒是會(huì)內(nèi)心充滿疑慮。這種事情,他們家真的想明白了?真的能持久?他們的開源軟件,真的能夠放心使用?
開發(fā)者(尤其是企業(yè))可以選擇任何一種協(xié)議開源
如果我們不但承認(rèn)用戶的自由,也承認(rèn)開發(fā)者的自由。如果我們不但支持用戶的利益,也支持開發(fā)者的利益。如果我們承認(rèn)不同的軟件,面對(duì)著不同的技術(shù)與市場(chǎng)狀況。如果我們承認(rèn),應(yīng)該尊重開發(fā)者對(duì)于自身利弊的判斷。
那么,開發(fā)者(尤其是企業(yè))選擇以何種協(xié)議開源,是首先應(yīng)該被尊重的自由。無論他選擇GPL、Apache License還是MIT中的任何一種,都不會(huì)比選擇其他協(xié)議,更加道德,或者更加不道德。更明確的表達(dá)是:并不是一個(gè)企業(yè)犧牲得越多,就越道德,反之亦然。
更進(jìn)一步,如果他選擇的不是任何一種已有的開源協(xié)議,而是自行草擬了一份協(xié)議。并以此來捍衛(wèi)自己的特別重視的利益。這也同樣無可厚非,無可指責(zé)。
因此,當(dāng)我們聲稱:某某軟件并不是符合OSI定義范疇的開源軟件。也僅僅是一種事實(shí)陳述,而非道德譴責(zé)。
是否存在OSI定義之外的開源軟件?
這是一個(gè)很有趣的話題,我們可以以非常學(xué)究的方式來分析,也可以以較為輕松愉快的方式來研究一下。在寫這篇文章的時(shí)候,我發(fā)現(xiàn)了兩種許可協(xié)議,都非常有趣。
WTFPL(Do What The Fuck You Want To Public License,中文譯名:你他媽的想干嘛就干嘛公共許可證)
大概意思是:你他媽的想干嘛就干嘛,以及,如果你改了這個(gè)協(xié)議,請(qǐng)不要再用這個(gè)名字。來源介紹
還有一種協(xié)議,叫做BEER-WARE LICENSE,你可以使用此軟件做任何事。如果我們?cè)谀骋惶煜嘤隽耍夷阏J(rèn)為此軟件很有價(jià)值,你可以為我買一瓶啤酒來答謝。來源介紹
這兩種協(xié)議,看上去都非常亂來。更加有趣的是:他們都經(jīng)過了FSF(自由軟件基金會(huì))的認(rèn)證,確認(rèn)他們是兼容GPL的自由軟件許可證。
但是,他們卻沒有獲得OSI的認(rèn)證。因此,按照OSI的定義,如果有軟件使用了這樣的許可證,是不能稱之為開源軟件的。
因此,泛泛而論:我們可以認(rèn)為存在狹義的(符合OSI定義的)開源軟件,與廣義的開源軟件。
但是:我沒辦法準(zhǔn)確的定義“廣義的開源軟件”。因?yàn)樘y了!
有中國特色的開源
當(dāng)開源軟件進(jìn)入中國,當(dāng)中國的個(gè)人與企業(yè),也開始參與開源,甚至發(fā)起開源項(xiàng)目的時(shí)候,事情變得更加復(fù)雜了。
先說說法律問題:在中國,目前“貌似能夠”保護(hù)開源軟件的,是兩部法律:《著作權(quán)法》與《計(jì)算機(jī)軟件保護(hù)條例》,但是在這兩部法律中,都沒有明確的開源軟件的定義。而且,在《計(jì)算機(jī)軟件保護(hù)條例》中,還認(rèn)為“同一計(jì)算機(jī)程序的源程序和目標(biāo)程序?yàn)橥蛔髌贰!钡?,發(fā)布目標(biāo)程序與同時(shí)發(fā)布源程序,明顯是兩種差異巨大的行為。
在軟件著作權(quán)人依法享有的權(quán)力中,雖然包含修改權(quán)。但是,如果在發(fā)行或網(wǎng)絡(luò)傳播的時(shí)候,不提供源程序,事實(shí)上是無法轉(zhuǎn)讓或授予他人修改權(quán)的。(非編譯型的腳本語言,混淆以后的源代碼,又是兩種需要分析的特殊情況)
再者,“保護(hù)條例”中所說的:“軟件著作權(quán)人可以全部或者部分轉(zhuǎn)讓其軟件著作權(quán),并有權(quán)獲得報(bào)酬”,其中的部分轉(zhuǎn)讓,是否包含“修改權(quán)的部分轉(zhuǎn)讓”?例如,雖然允許修改源代碼,但是代碼中關(guān)于許可證的注釋內(nèi)容,能不能被刪除或修改?
還有就是外國開源軟件,包括開源軟件的許可協(xié)議,是否受到中國法律保護(hù)的問題。更進(jìn)一步,直接采用國外的開源軟件的常用許可協(xié)議的國產(chǎn)開源軟件,是否也能受到中國法律的保護(hù)呢?
在我看到的網(wǎng)上的一些分析認(rèn)為:“將軟件開源只是是作者處置自己版權(quán)的一種方式,其附帶的開源協(xié)議只要不與其他法律相違背,當(dāng)然是合法有效的。開發(fā)者將軟件源代碼發(fā)布并附帶開源協(xié)議的行為,就是向不 特定多數(shù)的人作出一個(gè)附條件的意思表示,任何人只要使用該軟件,就應(yīng)當(dāng)理解為使用的行為接受了這樣的意思表示,即作者和使用者之間建立了軟件授權(quán)使用合 同,而開源協(xié)議中所約定的條款也就成為了這個(gè)授權(quán)合同的一部分,使用者應(yīng)當(dāng)在該合同項(xiàng)下履行自己的義務(wù)?!?參考鏈接
但是,真正令人困擾的,是一旦侵權(quán)行為發(fā)生,如何判斷?如何尋找證據(jù)?是不是開源軟件的作者,還需要先去做“著作權(quán)登記”?國內(nèi)雖然的確有一些學(xué)術(shù)上的研究,但是因?yàn)檎麄€(gè)法制不夠健全,而且也尚未出現(xiàn)“開源相關(guān)的真實(shí)案件”,因此在執(zhí)行上還是空白。
在這種現(xiàn)實(shí)情況下,一個(gè)中國企業(yè)選擇開源,的確是要冒著“被侵權(quán)之后求告無門”的風(fēng)險(xiǎn)的!在放出自己的源代碼時(shí),選擇更加嚴(yán)格的措辭,更加嚴(yán)格的授權(quán),甚至明明是開源,也先寫一句“保留所有權(quán)利”,也就可以理解了。
正面回答問題
關(guān)于文章開頭提出的問題,我的回答如下:
- 從嚴(yán)格意義上來說:開源軟件是一個(gè)專有名詞,特指選擇了符合OSI定義的授權(quán)協(xié)議的軟件。
- 另外還有大量的未選擇明確的授權(quán)協(xié)議,或者自行擬定開源授權(quán)協(xié)議,并開放源代碼的軟件,同樣也是廣義的開源生態(tài)圈的一部分。
- 在國內(nèi)的法律環(huán)境對(duì)于開源軟件的保護(hù),逐步健全起來之前,盲目要求個(gè)人或企業(yè),嚴(yán)格按照OSI的定義開源,甚至嚴(yán)格按照FSF的定義開源,并不妥當(dāng)。以是否道德來綁架,更不應(yīng)該!
- 無論當(dāng)前的法制環(huán)境如何,選擇經(jīng)過反復(fù)錘煉的,成熟的開源協(xié)議,其實(shí)是對(duì)自身開源行為,更加審慎的態(tài)度。(如果它保護(hù)不了你,你的條款再嚴(yán)格,它也保護(hù)不了。但是,如果你自己發(fā)明的條款有漏洞,國家法制就算健全也幫不了你。)
- 將開源與道德脫鉤,既不以道德相標(biāo)榜,也不以道德相指責(zé)。這是對(duì)于開源軟件,最好的態(tài)度!