標籤:
1.什麼是GPL
GPL許可協議(GNU General Public License):只要軟體中包含有其他GPL協議的產品或代碼,那麼該軟體就必須也採用GPL許可協議且開源及免費。具有以下特點:
複製自由:允許將軟體複製到任何人的電腦中,並且不限制複製的數量。
傳播自由:允許以各種形式進行傳播。
收費傳播:允許在各種媒介上出售該軟體,但必需提前讓買家知道這個軟體是可以免費獲得的,並解釋收費的理由(一般來講都是能夠為使用者提供某種服務,以技術服務的形式來收費)。
修改自由:允許開發人員增加或刪除軟體的功能,但必須依然基於GPL許可協議授權。一句話,修改後必須以GPL授權開源發布。
2.GPL的幾個核心問題
GNU 通用公用許可證是一種 “Copyleft” 形式的“著作權”,保障任何人都能夠對GPL授權的產品以及其衍生產品的使用、修改和重新發布的權力,前題是不能修改發布條款。什麼意思呢,任何GPL授權產品的衍生產品(Derived Work)必須遵循 GPL 協議進行發布。然而問題的核心在於什麼是 Linux 核心的衍生產品,其中有幾個致命問題,業界爭論了十年有多。
1、使用 Linux 核心的標頭檔定義,進行系統調用的程式是否會被定性為衍生產品?
2、連結使用了其他 GPL 的類庫的程式是否會被定性為衍生產品?
3、Linux 核心動態載入的模組 LKM(Loadable Kernel Modules)是否會被定性為衍生產品,以 LKM 形式開發的 Linux 驅動程式是不是衍生產品?
第一個問題:曾經被 Linux 核心的作者 Linus Torvalds 以及核心開發人員多次澄清普通系統調用為非 GPL 的作用範圍,甚至固化在 Linux 核心的源碼 COPYING 文檔中,為 Linux 使用者空間的程式採用非 GPL 的授權許可證打下了基礎。
第二個問題:答案是屬於衍生產品。包括原始碼包含,靜態連結和動態連結三種情況。
第三個問題:答案是屬於衍生產品。
3.Android是如何規避GPL的
包括兩個方面:驅動和glibc
先說glibc,glibc是linux上的主流的c執行階段程式庫,幾乎每個linux程式都會簡介的依賴c執行階段程式庫。由於glibc是gpl授權的,因此如果採用glibc作為crt,按照前述問題的第二條,這些程式必須開源。因此安卓採用bionic作為c執行階段程式庫替代glibc來規避gpl.
再說驅動,Android是基於Linux 核心開發的,Linux核心是GPL授權。傳統的驅動是要作為核心模組被加入到核心中的。按照前述的第三個問題,核心模組屬於Linux核心的衍生產品,需要遵守GPL協議開源發布。Android是由開放手機聯盟共同完成的,為了保護聯盟中手機生產商的利益,驅動不能被完全開源。因此安卓引入HAL,給linux核心開了個後門,增加了一些系統調用。HAL在核心的部分按照GPL的要求開源。驅動開發人員可以在使用者態使用這些新增的系統調用完成驅動的開發。從而在驅動方面規避了GPL。
關於GPL的一些知識