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