关于 Linux 许可证的若干问题
## 用的是什么许可证?
从 Linux 源码的版权文件 中我们得知 Linux 整体上是采用 GPL 许可协议 (确切说是 GPLv2), 但是排除系统调用头文件那部分源码, 也就是说, 如果你完全基于 Linux 的源码去开发定制一个新的操作系统内核, 那么你的这个新内核也必须至少遵守 GPL 协议. 但是如果你只是把 Linux 系统调用头文件包含到你的项目中使用, 那么你的内核就不用遵守 GPL.
为什么要这么做呢? 首先我们要理解在操作系统中, 内核和用户程序工作于不同的 CPU 状态和内存空间, CPU 提供了软件中断指令供用户程序和内核在两个空间中通信, 但软件中断只是渠道, 用户程序和内核还需要一个通信协议, 也就是所谓的 ABI, 这样用户程序才知道该怎么给内核传参, 内核提供的系统调用头文件就是 ABI.
Linux 单纯作为内核是没有用武之地的, 要想做大做强一定要有自己的生态才行, 用户程序就是生态, 开发用户程序就得引用系统调用头文件, 但不是所有的开发者都想让自己开发的程序都使用 GPL 许可, 所以讲这些系统调用头文件排除在 GPL 的范畴, 就能有利于 Linux 生态建设.
> 这里想针对 Linux 和 GNU/Linux 的关系多说一句, 很多人以为 Linux 本身就是操作系统, 实际上不是的, Linux 只是一个操作系统内核, GNU/Linux 才是完整的操作系统. 在 GNU/Linux 这个操作系统中, Linux 内核的代码量只占到 1.5%, 而 GNU 和自由软件社区提供的代码量占 15% (2008 年统计).
## 既然如此, 那为什么 Linux 不整体开放呢?
毕竟整体开放了不是更有利于生态建设? 不尽然, 多年以后, Torvalds 本人面对采访时说道:
> I really think the license has been one of the defining factors in the success of Linux because it enforced that you have to give back, which meant that the fragmentation has never been something that has been viable from a technical standpoint
不难想象, 当时世界上一定不止 Linux 一个内核项目, 大部分的项目起初都如同江河的源头, 气势磅礴, 而后被千山万壑分割成无数细流, 乃至消失殆尽. 而在 Linux 社区则多亏了 GPL, 才使得世界上所有基于 Linux 所做的工作又回源反哺 Linux 本身, 使得 Linux 愈发壮大. GPL 就像一股引力, 将这万条细流重新汇聚, 奔腾入海.
## Linux 驱动程序要遵守 GPL 吗?
如果你自己学习 Linux 驱动开发, 在自己电脑上写个驱动玩, 那当然不必遵守 GPL 公开你的代码. 但假如说你的驱动程序要会随着 Linux 内核下一版一起发行, 或者你你的驱动要被编译到内核上然后安装到你的硬件上拿去卖, 那么你的驱动代码还是要遵守 GPL 协议并公开代码, 这样你的驱动代码还可以合并进内核主干.
但实际上也并不是所有的驱动程序都一定要遵守 GPL 协议, GPL 的关键是判断是否是 "derived work", 但是某种程度来说, 驱动程序和前述系统调用头文件的情况也有相似之处, 因此总是要求驱动程序开放源码也是不恰当的, 这也是为何 Linux 内核源码中实际也包含一些 "binary blobs" 的原因吧, 用 Torvalds 本人的话说这是一个 "灰色地带", 详细的可以看 当初 Torvalds 在邮件组里的言论.
纯粹的自由软件信仰者如 FSF 基金会和 GNU 社区认为 Linux 内核源码中包含 binary blobs 是违反 GPL 协议的, 从技术上来说确实如此, 但那又如何呢? 只要 Linux 内核的首席 Torvalds 本人默许驱动程序不是必须要开放源码, 那这些驱动厂商就不会被告上法庭.
#Linux #许可证 #License #开源 #GPL
Post #75
485