參考資料
Android ,在爭議中逃離 Linux 內核的 GPL 約束 | 愛范兒
簡介
眾所周知,Linux內核基於GPL v2發行。GPL規定,基於GPL的軟件產品的衍生產品,也必須使用GPL許可證。那么基於Linux操作系統所開發的應用程序,是否被認為是GPL的衍生產品?我們先來看三個問題。
- 使用Linux內核的頭文件定義,進行系統調用的程序是否被認為是衍生產品?
- 鏈接了GPL類庫的程序是否被認為是衍生產品?
- Linux的LKM(Loadable Kernel Modules)是否被認為是衍生產品?以LKM形式開發的Linux驅動程序是否被認為是衍生產品?
如果上面3個問題的答案均為“是”的話,那么基於GPL的傳染性特性,從底層的內核空間到上層的用戶空間的所有應用程序都將“屈服”於GPL,這將導致Linux變成了一個“封閉”的開源世界。“封閉”的原因在於它拒絕了一部分想要商業化的企業以及個人開發者。
使用Linux內核的頭文件定義,進行系統調用的程序是否被認為是衍生產品?
不是!
Linux之父Linus Torvalds在源碼的COPYING文件中說明與澄清了系統調用非GPL的作用范圍。
鏈接了GPL類庫的程序是否被認為是衍生產品?
是!
主程序與GPL類庫如果是靜態鏈接(Static Link)的話,那么一般認為主程序必須使用GPL;主程序與GPL類庫如果是動態鏈接(Dynamic Link)的話,那么一般認為主程序也必須使用GPL,除非在官司上證明主程序和GPL類庫之間具有獨立性和可分性。
以下是GPL官網上的FAQ:
If a library is released under the GPL (not the LGPL), does that mean that any software which uses it has to be under the GPL or a GPL-compatible license? (#IfLibraryIsGPL)
Yes, because the software as it is actually run includes the library.
Linux的LKM(Loadable Kernel Modules)是否被認為是衍生產品?以LKM形式開發的Linux驅動程序是否被認為是衍生產品?
這塊不知道怎么去理解,作者也沒有正面回答,詳見參考資料。
Android
后來,一款基於Linux的手機操作系統誕生了,那就是Android。我們先來看由Openfoundry繪制的Android許可證結構圖。
Android的底層是使用GPL的Linux內核,其上次的類庫、Android運行時、應用程序框架和各類應用程序與GPL的Linux內核交互,是通過系統調用的方式,因為它們不屬於衍生產品,從而不用遵循GPL。
還有一點是Android使用的是使用BSD的Bionic Libc的類庫,而不是使用GPL的GNU的glibc。