Linux内核许可规则
阅读数:902 评论数:1
跳转到新版页面分类
Linux
正文
一、概述
1、为什么Linus不使用GPLv3
在 PC 上,只要你得到了某个程序的源代码,就可以自行编译生成二进制程序,然后替换掉原有的二进制程序,你的程序自由很容易得到保证。然而 iPod、iPhone 等消费类电子产品,厂家会锁上硬件,不允许消费者破解其中的程序。消费者即使拿到了源码,修改了其中的缺陷,或者增加了新功能,优化了算法,也无法放到你的设备上运行,所以无法保障程序自由。如 Stallman 这样执着于全人类程序自由的人,怎么会容忍这种情况发生?因此,Stallman 试图通过 GPLv3 许可证来弥补这个漏洞:GPLv3 许可证要求衍生作品必须提供源代码,并且允许任何人可以修改源代码并替换掉原有的二进制版本。Linus 追求的是全世界人人都用上 Linux,他不在乎最终用户是否可以破解整个系统,只要消费类电子产品的厂商能回馈代码到 Linux 内核。
归根究底,Stallman 是个理想主义者,而 Linus 是个实用主义者。
2、GPLv2
Linux内核遵循GPL-2.0(GNU General Public License version), 在LICENSES/preferred/GPL-2.0有详细描述。Linux内核也遵循一个syscall的特殊情况许可,这个特例在LICENSES/exceptions/Linux-syscall-note目录下,以COPYING文件描述。
以COPYING文件描述的许可是内核的全局许可,每一个源文件可以使用不同于全局的许可,但是需要与GPL-2.0兼容。
GPL-1.0+: GNU General Public License v1.0 or later
GPL-2.0+: GNU General Public License v2.0 or later
LGPL-2.0: GNU Library General Public License v2 only
LGPL-2.0+: GNU Library General Public License v2 or later
LGPL-2.1: GNU Lesser General Public License v2.1 only
LGPL-2.1+: GNU Lesser General Public License v2.1 or later
除此之外,每个文件可以遵循双许可。对于用于描述用户空间程序调用内核接口的User-space API (UAPI)头文件,是许可处理上是不同的。由于系统调用接口是一个清楚的边界,它不能把GPL的要求传递到调用内核接口的软件,但是这些UAPI头文件一定要包含到使用内核的文件中,所以对于这情况就需要进行特别说明。
对于源文件的许可一般的表达方式是在文件开头添加一段模板式的文字,一种模板式的文字是使用Software Package Data Exchange(SPDX),SPDX许可标识是机器可识别的、许可的缩写。SPDX许可标识由Linux基金会的SPDX工作组维护。https://spdx.org/
在Linux内核的所有源文件中需要标注准确的SPDX标识。
二、SPDX许可标识语法
1-放置的位置
对于内核中的大部分文件SPDX许可标识符应该出现在第一行,除了需要#!PATH_TO_INTERPRETER的脚本外放在第二行。
2- 风格
SPDX许可标识以注释的方式添加。
3-语法
一个SPDX许可表达式,或者是一个SPDX的缩写形式,或者是两个SPDX缩写的组,当其中一个是许可特殊况时使用“WITH”分隔。对于多许可,可以使用关键字AND OR及()。
对于[L]GPL使用“+”标示or later
//SPDX-License-Identifier: GPL-2.0+
//SPDX-License-Identifier: LGPL-2.1+
如果对一个许可需要修改,可以使用WITH关键字,例如Linux 内核的UAPI文件:
//SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
//SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note
特殊情况说明只能针对特定的许可,在特殊情况说明文件中会标注这些许可,
三、许可的分类
当前使用的许可分为:
1、Preferred licenses
优选的许可。在LICENSES/preferred目录下。
2、Not recommanded licenses
不推荐的许可,在LICENSES/other目录下。
3、Exceptions
对于一些许可可以针对一些特殊情况授予特定权限,放在目录LICENSES/exceptions目录下。
(1)SPDX-Exception-Identifier
exception标识,用于SPDX许可标识。
(2)SPDX-URL
SPDX组织的针对此exception说明URL页。
(3)SPDX-Licenses
一组逗号分隔的SPDX许可,标注此exeption可用于哪些特定许可。
(4)Usage-Guidance
使用说明
小灰灰(2019-12-25 05:53:03)
阔以