一篇帶你了解GPL前世今生
從事Linux開發(fā)的朋友一定都聽過GPL,那么到底什么是GPL呢?他有什么作用呢?本文給大家做詳細(xì)講解。
一、GNU/GPL
在講解GPL之前,我們必須先了解什么是GNU?
1. 什么是GNU
GNU:GNU's not unix。也叫革奴計(jì)劃。
GNU的創(chuàng)始人,理查德·馬修·斯托曼。
GNU是一個(gè)自由的操作系統(tǒng),其內(nèi)容軟件完全以GPL方式發(fā)布。
這個(gè)操作系統(tǒng)是GNU計(jì)劃的主要目標(biāo),名稱來自**GNU's Not Unix!**的縮寫 【這種遞歸式命名方法也只有程序猿大神才能想起來】
可以說GNU也是一個(gè)軟件集合,如:Emas,gcc,bash,gawk等。
由于沒有內(nèi)核(可以理解成還在實(shí)驗(yàn)室里就GNU系統(tǒng)就被淘汰了)。
因?yàn)镚NU的設(shè)計(jì)類似Unix,但它不包含具著作權(quán)的Unix代碼。
2. GNU歷史
在二戰(zhàn)(1939-1945)結(jié)束后,計(jì)算機(jī)產(chǎn)業(yè)剛剛興起的時(shí)候,閉源軟件的概念還未出生。那是個(gè)一切代碼都免費(fèi)共享,可以隨意修改、再發(fā)行的時(shí)代。
后來,開始有人只發(fā)行閉源的程序,這通常是一種原始代碼幾乎不可能被單純地破譯的二進(jìn)制文件。1983年,IBM成為大型企業(yè)中第一個(gè)發(fā)行閉源軟件的公司;AT&T公司緊隨其后,原本免費(fèi)的Unix在更新后要價(jià)數(shù)萬美元…
平日使用的Unix突然開始收費(fèi),還如此昂貴,這讓很多人難以接受。
其中,有一個(gè)叫Richard Stallman(人稱 RMS)的人站出來了。他推出了 GNU計(jì)劃 ,希望有朝一日,從操作系統(tǒng)到各式應(yīng)用軟件,都能免費(fèi)開源得讓大家使用。
而具體的辦法,就是在發(fā)布軟件的同時(shí)包括我們今天提到的 GPL 許可證。
3. 什么是GPL
GPL許可協(xié)議(GNU General Public License):只要軟件中包含有其他GPL協(xié)議的產(chǎn)品或代碼,那么該軟件就必須也采用GPL許可協(xié)議且開源及免費(fèi)。
具有以下特點(diǎn):
- 復(fù)制自由:允許將軟件復(fù)制到任何人的電腦中,并且不限制復(fù)制的數(shù)量。
- 傳播自由:允許以各種形式進(jìn)行傳播。
- 收費(fèi)傳播:允許在各種媒介上出售該軟件,但必需提前讓買家知道這個(gè)軟件是可以免費(fèi)獲得的,并解釋收費(fèi)的理由(一般來講都是能夠?yàn)橛脩籼峁┠撤N服務(wù),以技術(shù)服務(wù)的形式來收費(fèi))。
- 修改自由:允許開發(fā)人員增加或刪除軟件的功能,但必須依然基于GPL許可協(xié)議授權(quán)。
4. 通俗的講下GPL到底有什么作用?
總結(jié)成一句話,修改后必須以GPL授權(quán)開源發(fā)布。
只要在代碼中加入這個(gè)名叫GPL的許可證,你就能保證軟件的用戶能夠自由地運(yùn)行、研究、分享和修改你的代碼了。
而且,從你的軟件衍生出的一切修改版本,都必須遵守這個(gè)許可協(xié)議。
一個(gè)有意思的地方是,擁有代碼的人有權(quán)利用代碼開發(fā)軟件并盈利。
但是,在有人花錢買走軟件之后,這個(gè)人可以隨意把買到的軟件分享給其他人,而不必?fù)?dān)心侵權(quán),甚至是被告上法庭——因?yàn)閷?duì)于遵守開源協(xié)議的軟件來說,壓根不存在“盜版”的概念。
由此可見,開源協(xié)議大大地提高了軟件使用者的權(quán)利。
理解了GNU的精神,也就能理解GPL在說些什么,其實(shí)就是開源。
在現(xiàn)實(shí)生活中,我們受益于 GPL的地方,其實(shí)很多,幾乎所有的操作系統(tǒng),除了windows,其他的幾乎都是基于linux開源代碼改寫的。
5. 舉例
以下是Linux內(nèi)核中網(wǎng)卡DM9000的驅(qū)動(dòng)程序版權(quán)聲明:
DM9000是Davicom公司生產(chǎn)的一款非常流行的網(wǎng)卡芯片。
第一個(gè)紅框聲明了代碼的版權(quán)屬于作者 Sten Wang 。第二個(gè)紅框則是說使用者需要遵守 GPL協(xié)議(GNU General Public License)。
二、GPL與Linux
Linus Torvalds 認(rèn)為 GPL 是 Linux 成功的重要部分
雖然不是每個(gè)開源軟件都喜歡 GPL,但是如果沒有 GPL ,或許不會(huì)有如今的 Linux 和整個(gè)開源世界。
以下節(jié)選自Linus Torvalds自傳《知識(shí)為了好玩》
- 當(dāng)時(shí)的演講者是理查德·斯多曼(Richard Stallman) 。 此人是自由軟件的鼓吹者。
- 1983年, 他開始研究UNIX的一個(gè)替代物, 將其稱作GNU系統(tǒng), 其含義是“GUN不是
- UNIX”(GNU是“GNU is Not UNIX”的字首縮略語(yǔ)--譯注) 。 這
- 更重要的是, RMS(理查德·斯多曼希望別人這樣稱呼他) 還撰寫了《自由軟件宣
- 言》 和自由軟件產(chǎn)權(quán)證書, 即GPL。 他首先提出的關(guān)于開放源代碼的概念完全是有意的,
- 而并非出于偶然, 和UNIX最初的開放發(fā)展理念是相吻合的。
- 我后來為L(zhǎng)inux使用的就是GPL。 就這樣, 我再一次走在了自己的前面。
- 事實(shí)是, 為了使Linux有用, 我曾依賴過很多在網(wǎng)上免費(fèi)下載的工具――我把自己
- 放到了巨人的肩膀上。
- 這些免費(fèi)軟件中最重要的是GCC編譯器, 它是理查德·斯多曼的杰
- 作, 并且已經(jīng)在公共執(zhí)照協(xié)會(huì)(GPL)上注冊(cè)了版權(quán)。 在GPL條款之下, 錢不是問題, 只要
- 有人愿意買, 你可以賣一百萬美元。 但是, 你必須提供軟件來源。 而得到或買到你的來源
- 的人, 將擁有和你一樣多的對(duì)于該程序的。
- 這實(shí)在是很高明的一招。 我認(rèn)可GPL的原則,
- 但是和那些認(rèn)為所有的軟件創(chuàng)新都應(yīng)該在GPL下向全世界公開的頑固的GPL信仰者不同,我認(rèn)為發(fā)明者本人有決定如何處置自己的發(fā)明的權(quán)利。
- 于是, 我拋棄了自己舊有的版權(quán)聲明, 采納了GPL的內(nèi)容, 一個(gè)斯多曼也曾經(jīng)和他的
- 律師一道簽署過的文件(因?yàn)橛新蓭煹膮⑴c, 該文件被搞得洋洋灑灑有好幾頁(yè))。
- 我擔(dān)心, 在現(xiàn)實(shí)中, 如果有個(gè)美國(guó)人侵犯了我的版權(quán), 我無法對(duì)其提起訴訟。 現(xiàn)在
- 這仍是我的擔(dān)心。 狀告某人侵權(quán)很容易, 而我的擔(dān)心是, 有的人會(huì)即使被起訴也繼續(xù)從事
- 這種違法行為, 除非加諸某種強(qiáng)制執(zhí)行的法律行動(dòng)他們才會(huì)停止。 同時(shí)我也不斷地?fù)?dān)心,
- 在像中國(guó)這樣的地方, 企業(yè)并不承認(rèn)GPL的效力, 從而也不會(huì)尊重我的版權(quán)。
- 事實(shí)上, 這些地方的法律體系對(duì)侵犯版權(quán)的制止在當(dāng)時(shí)并不得力(中國(guó)已經(jīng)簽署了一
- 系列的國(guó)際公約, 林納斯在這里談的是1991年的情況――譯注), 而且, 為防止違法行為
- 的投入在這些地方被認(rèn)為是不劃算的。 大軟件公司和唱片公司曾作過努力, 但是成效不
- 大。
- 不過, 事實(shí)減輕了我的擔(dān)憂。 有的人確實(shí)會(huì)暫時(shí)侵犯我的版權(quán), 但是他們往往也是那
- 些尊重版權(quán)、 反饋改進(jìn)意見、 使系統(tǒng)功能得以提高的人。 他們將是系統(tǒng)升級(jí)過程中的一分
- 子。
- 總的來說, 我從兩個(gè)方面看版權(quán)。 比如一個(gè)每月掙五十美元的人, 他可能會(huì)為一個(gè)軟
- 件花費(fèi)二百五十美元嗎? 如果花一點(diǎn)錢買非法拷貝軟件, 而把五個(gè)月的工資用于吃飽肚
- 子, 我一點(diǎn)不覺得他不道德。 這種侵權(quán)是道義上可以接受的。 去追捕這種“侵權(quán)者”是不道
- 德的, 更不要說簡(jiǎn)直就是愚蠢的。 就Linux而言, 誰在乎如果只將其用于個(gè)人目的時(shí), 一
- 個(gè)人是否真正遵循了GPL呢? 那些想藉此賺大錢的人們, 才是真正不道德的, 不管他們是
- 在美國(guó)還是非洲, 也不管程度如何。
- 貪欲從來就不是善的。
- 正如開放源代碼在1998年吸引了全世界的目光, 最大的爭(zhēng)議之一就在于其名字本身。 在此
- 之前, 已有了諸如GPL所許可的“自由軟件”, 我們會(huì)提到軟件共享現(xiàn)象, 以及通常所談?wù)?nbsp;
- 的“自由軟件運(yùn)動(dòng)”。 這一用法源于“自由軟件基金會(huì)”(Free Software Foundation) , 該基
- 金會(huì)由理查德·斯多曼于1985年為促進(jìn)自由軟件工程而創(chuàng)立, 比如GUN和由他發(fā)起的FreeUNIX。
- 沒準(zhǔn), 像艾立克·雷蒙德這樣的新教徒會(huì)發(fā)現(xiàn)新聞?dòng)浾邆內(nèi)沐e(cuò)了。
- “free”一詞真的意
- 味著免收任何費(fèi)用嗎? “free”真的意味著沒有任何限制嗎? “free”真的意味著自由自在嗎?
- 經(jīng)過幾周私人信函的往來, 我們最終達(dá)成了一致意見: 比起“free”來, 我們更愿意使
- 用“open”(開放) 一詞。 從此, 自由軟件運(yùn)動(dòng)變成了開放軟件運(yùn)動(dòng)。 對(duì)于那些樂意將此一
- 場(chǎng)運(yùn)動(dòng)的人來講, 我猜這的確是一場(chǎng)運(yùn)動(dòng)。 自由軟件基金會(huì)仍然被稱之為自由軟件基金
- 會(huì), 而理查德·斯多曼也仍舊是幕后在心理上進(jìn)行策劃的人。
三、其他開源協(xié)議(BSD,Apache,LGPL,MIT)
其他開源協(xié)議比較
1. BSD開源協(xié)議(original BSD license、FreeBSD license、Original BSD license)
BSD開源協(xié)議是一個(gè)給于使用者很大自由的協(xié)議?;旧鲜褂谜呖梢?rdquo;為所欲為”,可以自由的使用,修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再發(fā)布。
但”為所欲為”的前提當(dāng)你發(fā)布使用了BSD協(xié)議的代碼,或則以BSD協(xié)議代碼為基礎(chǔ)做二次開發(fā)自己的產(chǎn)品時(shí),
需要滿足三個(gè)條件:
- 如果再發(fā)布的產(chǎn)品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協(xié)議。
- 如果再發(fā)布的只是二進(jìn)制類庫(kù)/軟件,則需要在類庫(kù)/軟件的文檔和版權(quán)聲明中包含原來代碼中的BSD協(xié)議。
- 不可以用開源代碼的作者/機(jī)構(gòu)名字和原來產(chǎn)品的名字做市場(chǎng)推廣。
BSD代碼鼓勵(lì)代碼共享,但需要尊重代碼作者的著作權(quán)。BSD由于允許使用者修改和重新發(fā)布代碼,也允許使用或在BSD代碼上開發(fā)商業(yè)軟件發(fā)布和銷售,因此是對(duì)商業(yè)集成很友好的協(xié)議。而很多的公司企業(yè)在選用開源產(chǎn)品的時(shí)候都首選BSD協(xié)議,因?yàn)榭梢酝耆刂七@些第三方的代碼,在 必要的時(shí)候可以修改或者二次開發(fā)。
2. Apache(Apache License, Version 2.0、Apache License, Version1.1、Apache License, Version 1.0)
Apache Licence是著名的非盈利開源組織Apache采用的協(xié)議。
該協(xié)議和BSD類似,同樣鼓勵(lì)代碼共享和尊重原作者的著作權(quán),同樣允許代碼修改,再發(fā)布(作為開源或商業(yè)軟件)。
需要滿足的條件也和BSD類似:
- 需要給代碼的用戶一份Apache Licence,如果你修改了代碼,需要在被修改的文件中說明。
- 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協(xié)議,商標(biāo),專利聲明和其他原來作者規(guī)定需要包含的說明。
- 如果再發(fā)布的產(chǎn)品中包含一個(gè)Notice文件,則在Notice文件中需要帶有Apache Licence。
你可以在Notice中增加自己的許可,但不可以表現(xiàn)為對(duì)Apache Licence構(gòu)成更改。
Apache Licence也是對(duì)商業(yè)應(yīng)用友好的許可。使用者也可以在需要的時(shí)候修改代碼來滿足需 要并作為開源或商業(yè)產(chǎn)品發(fā)布/銷售。
3. LGPL(GNU Lesser General Public License)
LGPL是GPL的一個(gè)為主要為類庫(kù)使用設(shè)計(jì)的開源協(xié)議。
和GPL要求任何使用/修改/衍生之GPL類庫(kù)的的軟件必須采用GPL協(xié)議不同。
LGPL允許商業(yè)軟件通過類庫(kù)引用(link)方式使用LGPL類庫(kù)而不需要開源商業(yè)軟件的代碼。
這使得采用LGPL協(xié)議的開源代碼可以被商業(yè)軟件作為類庫(kù)引用并發(fā)布和銷售。
但是如果修改LGPL協(xié)議的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用LGPL協(xié)議。
因此LGPL協(xié)議的開源代碼很適合作為第三方類庫(kù)被商業(yè)軟件引用,但不適合希望以LGPL協(xié)議代碼為基礎(chǔ),通過修改和衍生的方式做二次開發(fā)的商業(yè)軟件采用。
GPL/LGPL都保障原作者的知識(shí)產(chǎn)權(quán),避免有人利用開源代碼復(fù)制并開發(fā)類似的產(chǎn)品
4. MIT(MIT)
MIT是和BSD一樣寬范的許可協(xié)議,作者只想保留版權(quán),而無任何其他了限制。
也就是說,你必須在你的發(fā)行版里包含原許可協(xié)議的聲明,無論你是以二進(jìn)制發(fā)布的還是以源代碼發(fā)布的。
四、 大名鼎鼎Android內(nèi)核是Linux,那他是如何規(guī)避GPL的
下圖是一個(gè)完整的Android軟件系統(tǒng)所用到的所有協(xié)議分布。
與Android關(guān)系最為密切的主要包括兩個(gè)方面:驅(qū)動(dòng)和glibc
1. glibc
glibc是linux上的主流的c運(yùn)行時(shí)庫(kù),幾乎每個(gè)linux程序都會(huì)簡(jiǎn)介的依賴c運(yùn)行時(shí)庫(kù)。
由于glibc是gpl授權(quán)的,因此如果采用glibc作為crt,按照前述問題的第二條,這些程序必須開源。
因此安卓采用bionic作為c運(yùn)行時(shí)庫(kù)替代glibc來規(guī)避gpl
2. 驅(qū)動(dòng)
再說驅(qū)動(dòng),Android是基于Linux 內(nèi)核開發(fā)的,Linux內(nèi)核是GPL授權(quán)。
傳統(tǒng)的驅(qū)動(dòng)是要作為內(nèi)核模塊被加入到內(nèi)核中的。
而內(nèi)核模塊屬于Linux內(nèi)核的衍生產(chǎn)品,需要遵守GPL協(xié)議開源發(fā)布。
Android是由開放手機(jī)聯(lián)盟共同完成的,為了保護(hù)聯(lián)盟中手機(jī)生產(chǎn)商的利益,驅(qū)動(dòng)不能被完全開源。
因此安卓引入HAL,給linux內(nèi)核開了個(gè)后門,增加了一些系統(tǒng)調(diào)用。
HAL在內(nèi)核的部分按照GPL的要求開源。
驅(qū)動(dòng)開發(fā)者可以在用戶態(tài)使用這些新增的系統(tǒng)調(diào)用完成驅(qū)動(dòng)的開發(fā)。從而在驅(qū)動(dòng)方面規(guī)避了GPL。
進(jìn)一步了解:
Android的硬件抽象層,簡(jiǎn)單來說,就是對(duì)Linux內(nèi)核驅(qū)動(dòng)程序的封裝,向上提供接口,屏蔽低層的實(shí)現(xiàn)細(xì)節(jié)。也就是說,把對(duì)硬件的支持分成了兩層,一層放在用戶空間(User Space),一層放在內(nèi)核空間(Kernel Space), 其中,硬件抽象層運(yùn)行在用戶空間,而Linux內(nèi)核驅(qū)動(dòng)程序運(yùn)行在內(nèi)核空間。為什么要這樣安排呢?把硬件抽象層和內(nèi)核驅(qū)動(dòng)整合在一起放在內(nèi)核空間不可行嗎?
從技術(shù)實(shí)現(xiàn)的角度來看,是可以的,然而從商業(yè)的角度來看,把對(duì)硬件的支持邏輯都放在內(nèi)核空間,可能會(huì)損害廠家的利益。我們知道,Linux內(nèi)核源代碼版權(quán)遵循GNU License,而Android源代碼版權(quán)遵循Apache License,前者在發(fā)布產(chǎn)品時(shí),必須公布源代碼,而后者無須發(fā)布源代碼。如果把對(duì)硬件支持的所有代碼都放在Linux驅(qū)動(dòng)層,那就意味著發(fā)布時(shí)要公開驅(qū)動(dòng)程序的源代碼,而公開源代碼就意味著把硬件的相關(guān)參數(shù)和實(shí)現(xiàn)都公開了,在手機(jī)市場(chǎng)競(jìng)爭(zhēng)激烈的今天,這對(duì)廠家來說,損害是非常大的。
因此,Android才會(huì)想到把對(duì)硬件的支持分成硬件抽象層和內(nèi)核驅(qū)動(dòng)層,內(nèi)核驅(qū)動(dòng)層只提供簡(jiǎn)單的訪問硬件邏輯,例如讀寫硬件寄存器的通道,至于從硬件中讀到了什么值或者寫了什么值到硬件中的邏輯,都放在硬件抽象層中去了,這樣就可以把商業(yè)秘密隱藏起來了。
也正是由于這個(gè)分層的原因,Android被踢出了Linux內(nèi)核主線代碼樹中。大家想想,Android放在內(nèi)核空間的驅(qū)動(dòng)程序?qū)τ布闹С质遣煌暾?,把Linux內(nèi)核移植到別的機(jī)器上去時(shí),由于缺乏硬件抽象層的支持,硬件就完全不能用了,這也是為什么說Android是開放系統(tǒng)而不是開源系統(tǒng)的原因。
五、軟件其他幾個(gè)相關(guān)的版權(quán)概念
1. copyright
copyright就是俗稱的版權(quán),也叫著作權(quán)。
版權(quán)又稱著作權(quán),用來表述創(chuàng)作者因其文學(xué)和藝術(shù)作品而享有的權(quán)利。版權(quán)的取得有兩種方式:自動(dòng)取得和登記取得。在中國(guó),按照著作權(quán)法規(guī)定,作品完成就自動(dòng)有版權(quán)(百度百科)。
簡(jiǎn)單來說,版權(quán)(copyright)只是規(guī)定是誰對(duì)作品享有權(quán)利,而具體享有哪些權(quán)力,需要參照當(dāng)?shù)胤伞?/p>
比如一種定義是:
根據(jù)規(guī)定,作者享受下列權(quán)利:
- 以本名、化名或以不署名的方式發(fā)表作品;
- 保護(hù)作品的完整性;
- 修改已經(jīng)發(fā)表的作品;
- 因觀點(diǎn)改變或其他正當(dāng)理由聲明收回已經(jīng)發(fā)表的作品,但應(yīng)適當(dāng)賠償出版單位損失;
- 通過合法途徑,以出版、復(fù)制、播放、表演、展覽、攝制片、翻譯或改編等形式使用作品;
- 因他人使用作品而獲得經(jīng)濟(jì)報(bào)酬。上述權(quán)利受到侵犯,作者或其他版權(quán)所有者有權(quán)要求停止侵權(quán)行為和賠償損失。
2. license
在此基礎(chǔ)上,作者還可以制定授權(quán)協(xié)議(license),來具體地界定使用者的權(quán)利。
也就是說,
- 作者的具體權(quán)利 = 當(dāng)?shù)胤梢?guī)定的版權(quán)(copyright) + 自己在作品中添加的授權(quán)協(xié)議(license)。
即
- 權(quán)利 = 版權(quán)(copyright) + 授權(quán)協(xié)議(license)
比如,商業(yè)化的授權(quán)協(xié)議(license)可能會(huì)傾向于強(qiáng)調(diào),使用者的哪些行為是侵權(quán)行為,從而保護(hù)自己的商業(yè)利益。
3. copyleft
而與這一商業(yè)化的授權(quán)風(fēng)格相對(duì)的是,RMS等人引領(lǐng)的copyleft的思潮。這一思想在保護(hù)作者的基本版權(quán)之余, 可以讓作者通過在作品中添加開源協(xié)議(license),從而放大用戶的權(quán)力。
比如我們今天的主角,RMS在198為GNU項(xiàng)目擬定的 GLP 協(xié)議,允許用戶自由地運(yùn)行、研究、分享和修改源代碼。
本文轉(zhuǎn)載自微信公眾號(hào)「一口Linux」