hi, mexwell,
這個問題,我們先從 GPL(條文本身)的規定來看,再從 Linux Foundation(著作權人)的意思來看。
簡單地說,依 GPL 的規定,只要一支程式中有一部分的程式碼是取自(合併自、改作自、連結自)GPL 程式者,就必須整支程式都要/也只可以用 GPL 來釋出給公眾,除非我有經過原 GPL 程式作者另外的授權,才可以例外地不依 GPL 的規定來走。
接著,Android 雖然的確有用到屬於 GPL v2 授權的 Linux kernel,但 Linux Foundation 創辦人暨精神領袖 Linus Torvalds 給出來的條件是:如果是在 user space 的部分,不會被 kernel space 部分的 GPL 所影響,但如果是在 kernel space 的(有用到 system calls),那歹勢,還是有 GPL 的感染性。(註一)
其實很明顯的是,Linux Foundation 的這個解釋已經超出了 GPL 的文義解釋的範圍,也就是說,它的授權規定雖然是 GPL,但因為他是著作權人,他也可以宣告,他的程式碼的 GPL 感染性僅及於 kernel space。總之,在法律上是可以這樣做的。
所以,回到你的問題,判斷標準的重點在於,它是屬於 user space 還是 kernel space。如果是在 kernel space(也就是有用到 system calls 的話),不管怎麼包,還是屬於 GPL 感染的範疇。(註二)
(註一)參見:
[linux/kernel/git/torvalds/linux-2.6.git] / COPYING,摘錄如下:
1
2 NOTE! This copyright does *not* cover user programs that use kernel
3 services by normal system calls - this is merely considered normal use
4 of the kernel, and does *not* fall under the heading of "derived work".
5 Also note that the GPL below is copyrighted by the Free Software
6 Foundation, but the instance of code that it refers to (the Linux
7 kernel) is copyrighted by me and others who actually wrote it.
8
9 Also note that the only valid version of the GPL as far as the kernel
10 is concerned is _this_ particular version of the license (ie v2, not
11 v2.2 or v3.x or whatever), unless explicitly otherwise stated.
12
13 Linus Torvalds
(註二)相關文章參考:葛冬梅,
Android 的區隔 GPL 感染機制。其中也有說明,我以上的見解可能不見得一定是大家的共識,因為還沒有法院判決確定。所以目前仍然可能是「一個 GPL,各自表述」的情況。