關於GPL的一些知識


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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM