共享、免費(fèi)還是公有?開源軟件的真正定義
如果你認(rèn)為開源軟件是共享軟件、免費(fèi)軟件和公有領(lǐng)域軟件的代名詞,那么你并不是唯一有這種看法的人。
當(dāng)你聽到“開源軟件”一詞時(shí),你是否認(rèn)為它與諸如共享軟件、免費(fèi)軟件或公有領(lǐng)域軟件之類的術(shù)語同義? 如果是這樣的話,你并不是唯一有這種看法的人。在軟件行業(yè)內(nèi)外的許多人都認(rèn)為這些術(shù)語是一樣的。本文說明了這些術(shù)語的不同之處,認(rèn)為開源是一種變革性的許可和開發(fā)模式。分享我與以上幾種軟件打交道的經(jīng)驗(yàn),可能是探究差異的最佳方法。
共享軟件和免費(fèi)軟件
早在 1982 年,當(dāng)我在 Apple II Plus 上用 BASIC 編寫代碼時(shí),我就開始從事計(jì)算機(jī)程序員的工作。我回想起去家鄉(xiāng)當(dāng)?shù)氐挠?jì)算機(jī)商店,并在塑料袋中找到看起來價(jià)格高昂的裝有游戲和實(shí)用程序軟件的軟盤。請(qǐng)記住,這是從一個(gè)中學(xué)生的角度來看的。
但是,有一些軟件可以免費(fèi)或以最低價(jià)格獲得。依據(jù)具體許可模式,它被稱為共享軟件或免費(fèi)軟件。在共享軟件模式下,你只能在一定時(shí)間內(nèi)使用該軟件,如果你發(fā)現(xiàn)它有用,則要求你將支票寄給該軟件的作者。
但是,某些共享軟件實(shí)際上也鼓勵(lì)你復(fù)制并提供給你的朋友。這種模式通常稱為免費(fèi)軟件。也就是說,共享軟件和免費(fèi)軟件確切定義之間的差異十分微小,因此很容易將兩者簡單地統(tǒng)稱為“共享軟件”。我雖不能肯定,但是我不記得我是否向任何軟件作者提供過使用共享軟件的費(fèi)用,主要是因?yàn)槲以谑畮讱q的時(shí)候就沒有錢,但是我肯定喜歡使用這些軟件程序,并且從中學(xué)到了很多有關(guān)計(jì)算機(jī)的知識(shí)。
回顧過去,我現(xiàn)在意識(shí)到,如果該軟件是根據(jù)開源許可條款而非共享軟件條款提供的,那么作為一名新興的程序員,我本可以在成長中學(xué)到很多東西,并且可以取得更多成就。這是因?yàn)閹缀鯖]有共享軟件會(huì)提供源代碼(即,人類可讀的軟件形式)。共享軟件還包含許可限制,禁止接收者試圖泄露其源代碼。如果無法訪問源代碼,則很難了解該軟件的實(shí)際工作方式,從而很難擴(kuò)展或更改其功能。這使得最終用戶完全依賴共享軟件原始作者進(jìn)行任何更改或改進(jìn)。
使用共享軟件模式,任何開發(fā)人員社區(qū)幾乎都不可能對(duì)代碼施加影響,并進(jìn)一步圍繞代碼進(jìn)行創(chuàng)新。再分發(fā)和商業(yè)使用也可能受到進(jìn)一步的限制。盡管共享軟件可能在價(jià)格方面是免費(fèi)的(至少在最初是免費(fèi)的),但它在自由權(quán)利方面并不是免費(fèi)的,并且不允許你通過探索代碼的內(nèi)部原理來學(xué)習(xí)和創(chuàng)新。
這就引出了一個(gè)大問題:它與開源軟件有何不同?
開源許可的基礎(chǔ)
首先,我們需要了解“開源”是指許可模式和軟件開發(fā)模式,兩者與共享軟件都有很大不同。在一種稱為非“左版”開源許可的開源形式下,向用戶提供了關(guān)鍵的自由權(quán)利,例如對(duì)訪問源代碼沒有限制;可以出于任何目的出售、使用或贈(zèng)送該軟件;可以修改軟件。
這種形式的許可也不需要支付任何使用費(fèi)或許可費(fèi)。因?yàn)樵S可是高度寬松的,不需要談判就可以使用,這種許可模式的一個(gè)驚人結(jié)果是它具有獨(dú)特的能力,可以使無數(shù)軟件開發(fā)人員協(xié)作起來對(duì)代碼進(jìn)行新的、有用的更改和創(chuàng)新。盡管從技術(shù)上講,在這種許可模式下不需要提供源代碼,但是幾乎所有人都可以使用它來查看、學(xué)習(xí)、修改和分發(fā)給他人。
非“左版”開源許可的另一個(gè)方面是,此類軟件的任何接收者都可以添加其他許可限制。這意味著以這種許可形式對(duì)代碼進(jìn)行許可的初始作者,無法阻止接收者可能依據(jù)限制性更強(qiáng)的條款不再進(jìn)一步許可給其他人。例如:
假設(shè)作者 Noah 編寫了一些軟件,并根據(jù)非“左版”開源許可將其分發(fā)給了接收者 Aviva。然后,Aviva 修改并改進(jìn)了 Noah 的軟件,她有權(quán)根據(jù)非“左版”開源許可條款使用該軟件。然后,Aviva 可以決定對(duì)可能限制該軟件使用的任何接收者施加進(jìn)一步的限制,例如在何處或如何使用它(例如,Aviva 可以增加一項(xiàng)限制,規(guī)定該軟件只能在以下地區(qū)使用:加利福尼亞,并且不允許在任何核電廠中使用)。 即使 Aviva 可以訪問源代碼,也可以選擇永遠(yuǎn)不將修改后的源代碼發(fā)布給他人。
不幸的是,有無數(shù)的專有軟件公司以上述方式使用非“左版”開源許可軟件。實(shí)際上,共享軟件程序可以通過添加共享軟件類型限制(例如,無法訪問源代碼或排除商業(yè)用途)來使用非“左版”開源許可軟件,從而將非“左版”開源許可代碼轉(zhuǎn)換為共享軟件許可模式。
幸運(yùn)的是,許多使用非“左版”開源許可軟件的專有軟件公司都看到了發(fā)布源代碼的好處。這些組織一般通過諸如 GitHub 之類的軟件存儲(chǔ)平臺(tái)向其接收者或更廣泛的開源社區(qū)提供修改后的源代碼,從而繼續(xù)保持開源模式的持久性,實(shí)現(xiàn)創(chuàng)新的良性循環(huán)。這并不是完全出于慈善目的(或者至少通常不是這樣):這些公司希望鼓勵(lì)社區(qū)創(chuàng)新和進(jìn)一步改進(jìn),從而使他們也一并受益。
同時(shí),許多專有軟件公司不選擇這樣做,這也完全符合非“左版”開源許可證條款的規(guī)定。
“左版”許可的開源軟件
1989 年,一種新的被稱為 GNU 通用公共許可證(也稱為 GPL 許可證)的開源許可證被開發(fā)出來,其目的是確保軟件“生來自由”(如同言論自由),并且能始終保持這種自由,這與非“左版”開源許可軟件有時(shí)會(huì)發(fā)生的情況不同。作為版權(quán)法的獨(dú)特適用,只要遵守這些規(guī)則(稍后會(huì)再介紹),GPL 許可證能夠確保持續(xù)的軟件自由。版權(quán)的這種獨(dú)特適用稱為“左版”。
與非“左版”開源軟件一樣,“左版”許可證允許接收者不受限制地使用該軟件、檢查源代碼、修改軟件,以及將原始或經(jīng)修改的軟件進(jìn)一步分發(fā)給其他接收者。與非“左版”開源許可證不同,“左版”開源許可證要求所有接收者必須也具有這些相同的自由權(quán)利。除非不遵守規(guī)則,否則這些自由權(quán)利決不能被收回。
使“左版”開源許可證能夠強(qiáng)制執(zhí)行,并促使人們遵守法規(guī)的原因是版權(quán)法的適用。如果“左版”代碼的接收者不遵守許可條款(例如,對(duì)軟件使用添加任何其他限制或不提供源代碼),則其許可將被終止,并且由于他不再享有使用該軟件的法律許可,他將成為版權(quán)侵犯者。因此,該“左版”許可軟件任何下游接收者的自由權(quán)利得以保障。
超越基礎(chǔ):其他軟件許可模式
我在前面提到了公有領(lǐng)域軟件,盡管它通常與開源軟件混為一談,但是這種模式有所不同。公有領(lǐng)域軟件是指已采取步驟查看后獲知沒有與該軟件相對(duì)應(yīng)的版權(quán)存在,最常見的情況是軟件版權(quán)到期或被作者放棄。(在許多國家/地區(qū),版權(quán)保護(hù)機(jī)制尚不明確,這就是為什么某些公有領(lǐng)域軟件可能選擇開源許可模式作為備選方案的原因。)使用公有領(lǐng)域軟件無需許可證。盡管如果源代碼可獲取的話,許多人會(huì)認(rèn)為公有領(lǐng)域軟件是開源軟件的一種形式,但無需許可證是否讓公有領(lǐng)域軟件成為“開源軟件”,是存在很多爭論的主題。
有趣的是,有許多開源項(xiàng)目利用公有領(lǐng)域軟件的小模塊來實(shí)現(xiàn)某些功能。甚至還有聲稱整個(gè)程序?qū)儆诠蓄I(lǐng)域的軟件,例如實(shí)現(xiàn)了 SQL 數(shù)據(jù)庫引擎并在許多應(yīng)用程序和設(shè)備中使用的 SQLite。沒有許可條款的軟件也是很常見的。
許多人錯(cuò)誤地認(rèn)為這種未經(jīng)許可的軟件是開源軟件,屬于公有領(lǐng)域,或者不受限制地免費(fèi)使用。在大多數(shù)國家(包括美國),軟件的版權(quán)在其創(chuàng)建時(shí)就已存在。這意味著不以許可證的形式許可就不能使用它,除非它以某種方式放棄版權(quán),并將其放置在公有領(lǐng)域。此通用規(guī)則存在一些例外情況,例如法律層面的默示許可或合理使用。但是在如何將它們應(yīng)用于特定狀況方面,情況非常復(fù)雜。在意圖讓其遵守開源許可條款的情況下,我不建議提供沒有許可條款的軟件,因?yàn)檫@會(huì)導(dǎo)致混亂和潛在的濫用。
開源軟件的好處
就像我之前說的那樣,開源是高效的軟件開發(fā)模式,并具有推動(dòng)創(chuàng)新的巨大能力。但這到底意味著什么?
開源許可模式的好處之一是大大減少了創(chuàng)新方面的摩擦,尤其是原始作者以外的其他用戶所進(jìn)行的創(chuàng)新。這種摩擦是有限的,因?yàn)槭褂瞄_源軟件通常不需要協(xié)商許可條款,從而大大簡化并降低了使用成本。反過來,這創(chuàng)建了一種開源生態(tài)系統(tǒng),它鼓勵(lì)快速修改和組合現(xiàn)有技術(shù)以形成新的事物。這些修改通常能回饋到開源生態(tài)系統(tǒng)中,從而構(gòu)造了一個(gè)創(chuàng)新循環(huán)。
驅(qū)動(dòng)大量事物(從你的烤面包機(jī)到火星飛行器)運(yùn)轉(zhuǎn)的無數(shù)種軟件,正是這種輕松地將各種程序組合在一起的能力的直接結(jié)果——開源開發(fā)模式讓所有這些軟件得以成為現(xiàn)實(shí)。