0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 .. include:: ../disclaimer-zh_CN.rst
0004
0005 :Original: :ref:`Documentation/process/license-rules.rst <kernel_licensing>`
0006 :Translator: Alex Shi <alex.shi@linux.alibaba.com>
0007
0008 .. _cn_kernel_licensing:
0009
0010 Linux内核许可规则
0011 =================
0012
0013 Linux内核根据LICENSES/preferred/GPL-2.0中提供的GNU通用公共许可证版本2
0014 (GPL-2.0)的条款提供,并在LICENSES/exceptions/Linux-syscall-note中显式
0015 描述了例外的系统调用,如COPYING文件中所述。
0016
0017 此文档文件提供了如何对每个源文件进行注释以使其许可证清晰明确的说明。
0018 它不会取代内核的许可证。
0019
0020 内核源代码作为一个整体适用于COPYING文件中描述的许可证,但是单个源文件可以
0021 具有不同的与GPL-20兼容的许可证::
0022
0023 GPL-1.0+ : GNU通用公共许可证v1.0或更高版本
0024 GPL-2.0+ : GNU通用公共许可证v2.0或更高版本
0025 LGPL-2.0 : 仅限GNU库通用公共许可证v2
0026 LGPL-2.0+: GNU 库通用公共许可证v2或更高版本
0027 LGPL-2.1 : 仅限GNU宽通用公共许可证v2.1
0028 LGPL-2.1+: GNU宽通用公共许可证v2.1或更高版本
0029
0030 除此之外,个人文件可以在双重许可下提供,例如一个兼容的GPL变体,或者BSD,
0031 MIT等许可。
0032
0033 用户空间API(UAPI)头文件描述了用户空间程序与内核的接口,这是一种特殊情况。
0034 根据内核COPYING文件中的注释,syscall接口是一个明确的边界,它不会将GPL要求
0035 扩展到任何使用它与内核通信的软件。由于UAPI头文件必须包含在创建在Linux内核
0036 上运行的可执行文件的任何源文件中,因此此例外必须记录在特别的许可证表述中。
0037
0038 表达源文件许可证的常用方法是将匹配的样板文本添加到文件的顶部注释中。由于
0039 格式,拼写错误等,这些“样板”很难通过那些在上下文中使用的验证许可证合规性
0040 的工具。
0041
0042 样板文本的替代方法是在每个源文件中使用软件包数据交换(SPDX)许可证标识符。
0043 SPDX许可证标识符是机器可解析的,并且是用于提供文件内容的许可证的精确缩写。
0044 SPDX许可证标识符由Linux 基金会的SPDX 工作组管理,并得到了整个行业,工具
0045 供应商和法律团队的合作伙伴的一致同意。有关详细信息,请参阅
0046 https://spdx.org/
0047
0048 Linux内核需要所有源文件中的精确SPDX标识符。内核中使用的有效标识符在
0049 `许可标识符`_ 一节中进行了解释,并且已可以在
0050 https://spdx.org/licenses/ 上的官方SPDX许可证列表中检索,并附带许可证
0051 文本。
0052
0053 许可标识符语法
0054 --------------
0055
0056 1.安置:
0057
0058 内核文件中的SPDX许可证标识符应添加到可包含注释的文件中的第一行。对于大多
0059 数文件,这是第一行,除了那些在第一行中需要'#!PATH_TO_INTERPRETER'的脚本。
0060 对于这些脚本,SPDX标识符进入第二行。
0061
0062 |
0063
0064 2. 风格:
0065
0066 SPDX许可证标识符以注释的形式添加。注释样式取决于文件类型::
0067
0068 C source: // SPDX-License-Identifier: <SPDX License Expression>
0069 C header: /* SPDX-License-Identifier: <SPDX License Expression> */
0070 ASM: /* SPDX-License-Identifier: <SPDX License Expression> */
0071 scripts: # SPDX-License-Identifier: <SPDX License Expression>
0072 .rst: .. SPDX-License-Identifier: <SPDX License Expression>
0073 .dts{i}: // SPDX-License-Identifier: <SPDX License Expression>
0074
0075 如果特定工具无法处理标准注释样式,则应使用工具接受的相应注释机制。这是在
0076 C 头文件中使用“/\*\*/”样式注释的原因。过去在使用生成的.lds文件中观察到
0077 构建被破坏,其中'ld'无法解析C++注释。现在已经解决了这个问题,但仍然有较
0078 旧的汇编程序工具无法处理C++样式的注释。
0079
0080 |
0081
0082 3. 句法:
0083
0084 <SPDX许可证表达式>是SPDX许可证列表中的SPDX短格式许可证标识符,或者在许可
0085 证例外适用时由“WITH”分隔的两个SPDX短格式许可证标识符的组合。当应用多个许
0086 可证时,表达式由分隔子表达式的关键字“AND”,“OR”组成,并由“(”,“)”包围。
0087
0088 带有“或更高”选项的[L]GPL等许可证的许可证标识符通过使用“+”来表示“或更高”
0089 选项来构建。::
0090
0091 // SPDX-License-Identifier: GPL-2.0+
0092 // SPDX-License-Identifier: LGPL-2.1+
0093
0094 当需要修正的许可证时,应使用WITH。 例如,linux内核UAPI文件使用表达式::
0095
0096 // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
0097 // SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note
0098
0099 其它在内核中使用WITH例外的事例如下::
0100
0101 // SPDX-License-Identifier: GPL-2.0 WITH mif-exception
0102 // SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
0103
0104 例外只能与特定的许可证标识符一起使用。有效的许可证标识符列在异常文本文件
0105 的标记中。有关详细信息,请参阅 `许可标识符`_ 一章中的 `例外`_ 。
0106
0107 如果文件是双重许可且只选择一个许可证,则应使用OR。例如,一些dtsi文件在双
0108 许可下可用::
0109
0110 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
0111
0112 内核中双许可文件中许可表达式的示例::
0113
0114 // SPDX-License-Identifier: GPL-2.0 OR MIT
0115 // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
0116 // SPDX-License-Identifier: GPL-2.0 OR Apache-2.0
0117 // SPDX-License-Identifier: GPL-2.0 OR MPL-1.1
0118 // SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT
0119 // SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause OR OpenSSL
0120
0121 如果文件具有多个许可证,其条款全部适用于使用该文件,则应使用AND。例如,
0122 如果代码是从另一个项目继承的,并且已经授予了将其放入内核的权限,但原始
0123 许可条款需要保持有效::
0124
0125 // SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) AND MIT
0126
0127 另一个需要遵守两套许可条款的例子是::
0128
0129 // SPDX-License-Identifier: GPL-1.0+ AND LGPL-2.1+
0130
0131 许可标识符
0132 ----------
0133
0134 当前使用的许可证以及添加到内核的代码许可证可以分解为:
0135
0136 1. _`优先许可`:
0137
0138 应尽可能使用这些许可证,因为它们已知完全兼容并广泛使用。这些许可证在内核
0139 目录::
0140
0141 LICENSES/preferred/
0142
0143 此目录中的文件包含完整的许可证文本和 `元标记`_ 。文件名与SPDX许可证标识
0144 符相同,后者应用于源文件中的许可证。
0145
0146 例如::
0147
0148 LICENSES/preferred/GPL-2.0
0149
0150 包含GPLv2许可证文本和所需的元标签::
0151
0152 LICENSES/preferred/MIT
0153
0154 包含MIT许可证文本和所需的元标记
0155
0156 _`元标记`:
0157
0158 许可证文件中必须包含以下元标记:
0159
0160 - Valid-License-Identifier:
0161
0162 一行或多行, 声明那些许可标识符在项目内有效, 以引用此特定许可的文本。通
0163 常这是一个有效的标识符,但是例如对于带有'或更高'选项的许可证,两个标识
0164 符都有效。
0165
0166 - SPDX-URL:
0167
0168 SPDX页面的URL,其中包含与许可证相关的其他信息.
0169
0170 - Usage-Guidance:
0171
0172 使用建议的自由格式文本。该文本必须包含SPDX许可证标识符的正确示例,因为
0173 它们应根据 `许可标识符语法`_ 指南放入源文件中。
0174
0175 - License-Text:
0176
0177 此标记之后的所有文本都被视为原始许可文本
0178
0179 文件格式示例::
0180
0181 Valid-License-Identifier: GPL-2.0
0182 Valid-License-Identifier: GPL-2.0+
0183 SPDX-URL: https://spdx.org/licenses/GPL-2.0.html
0184 Usage-Guide:
0185 To use this license in source code, put one of the following SPDX
0186 tag/value pairs into a comment according to the placement
0187 guidelines in the licensing rules documentation.
0188 For 'GNU General Public License (GPL) version 2 only' use:
0189 SPDX-License-Identifier: GPL-2.0
0190 For 'GNU General Public License (GPL) version 2 or any later version' use:
0191 SPDX-License-Identifier: GPL-2.0+
0192 License-Text:
0193 Full license text
0194
0195 ::
0196
0197 SPDX-License-Identifier: MIT
0198 SPDX-URL: https://spdx.org/licenses/MIT.html
0199 Usage-Guide:
0200 To use this license in source code, put the following SPDX
0201 tag/value pair into a comment according to the placement
0202 guidelines in the licensing rules documentation.
0203 SPDX-License-Identifier: MIT
0204 License-Text:
0205 Full license text
0206
0207 |
0208
0209 2. 不推荐的许可证:
0210
0211 这些许可证只应用于现有代码或从其他项目导入代码。这些许可证在内核目录::
0212
0213 LICENSES/other/
0214
0215 此目录中的文件包含完整的许可证文本和 `元标记`_ 。文件名与SPDX许可证标识
0216 符相同,后者应用于源文件中的许可证。
0217
0218 例如::
0219
0220 LICENSES/other/ISC
0221
0222 包含国际系统联合许可文本和所需的元标签::
0223
0224 LICENSES/other/ZLib
0225
0226 包含ZLIB许可文本和所需的元标签.
0227
0228 元标签:
0229
0230 “其他”许可证的元标签要求与 `优先许可`_ 的要求相同。
0231
0232 文件格式示例::
0233
0234 Valid-License-Identifier: ISC
0235 SPDX-URL: https://spdx.org/licenses/ISC.html
0236 Usage-Guide:
0237 Usage of this license in the kernel for new code is discouraged
0238 and it should solely be used for importing code from an already
0239 existing project.
0240 To use this license in source code, put the following SPDX
0241 tag/value pair into a comment according to the placement
0242 guidelines in the licensing rules documentation.
0243 SPDX-License-Identifier: ISC
0244 License-Text:
0245 Full license text
0246
0247 |
0248
0249 3. _`例外`:
0250
0251 某些许可证可以修改,并允许原始许可证不具有的某些例外权利。这些例外在
0252 内核目录::
0253
0254 LICENSES/exceptions/
0255
0256 此目录中的文件包含完整的例外文本和所需的 `例外元标记`_ 。
0257
0258 例如::
0259
0260 LICENSES/exceptions/Linux-syscall-note
0261
0262 包含Linux内核的COPYING文件中记录的Linux系统调用例外,该文件用于UAPI
0263 头文件。例如::
0264
0265 LICENSES/exceptions/GCC-exception-2.0
0266
0267 包含GCC'链接例外',它允许独立于其许可证的任何二进制文件与标记有此例外的
0268 文件的编译版本链接。这是从GPL不兼容源代码创建可运行的可执行文件所必需的。
0269
0270 _`例外元标记`:
0271
0272 以下元标记必须在例外文件中可用:
0273
0274 - SPDX-Exception-Identifier:
0275
0276 一个可与SPDX许可证标识符一起使用的例外标识符。
0277
0278 - SPDX-URL:
0279
0280 SPDX页面的URL,其中包含与例外相关的其他信息。
0281
0282 - SPDX-Licenses:
0283
0284 以逗号分隔的例外可用的SPDX许可证标识符列表。
0285
0286 - Usage-Guidance:
0287
0288 使用建议的自由格式文本。必须在文本后面加上SPDX许可证标识符的正确示例,
0289 因为它们应根据 `许可标识符语法`_ 指南放入源文件中。
0290
0291 - Exception-Text:
0292
0293 此标记之后的所有文本都被视为原始异常文本
0294
0295 文件格式示例::
0296
0297 SPDX-Exception-Identifier: Linux-syscall-note
0298 SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html
0299 SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+
0300 Usage-Guidance:
0301 This exception is used together with one of the above SPDX-Licenses
0302 to mark user-space API (uapi) header files so they can be included
0303 into non GPL compliant user-space application code.
0304 To use this exception add it with the keyword WITH to one of the
0305 identifiers in the SPDX-Licenses tag:
0306 SPDX-License-Identifier: <SPDX-License> WITH Linux-syscall-note
0307 Exception-Text:
0308 Full exception text
0309
0310 ::
0311
0312 SPDX-Exception-Identifier: GCC-exception-2.0
0313 SPDX-URL: https://spdx.org/licenses/GCC-exception-2.0.html
0314 SPDX-Licenses: GPL-2.0, GPL-2.0+
0315 Usage-Guidance:
0316 The "GCC Runtime Library exception 2.0" is used together with one
0317 of the above SPDX-Licenses for code imported from the GCC runtime
0318 library.
0319 To use this exception add it with the keyword WITH to one of the
0320 identifiers in the SPDX-Licenses tag:
0321 SPDX-License-Identifier: <SPDX-License> WITH GCC-exception-2.0
0322 Exception-Text:
0323 Full exception text
0324
0325
0326 所有SPDX许可证标识符和例外都必须在LICENSES子目录中具有相应的文件。这是允许
0327 工具验证(例如checkpatch.pl)以及准备好从源读取和提取许可证所必需的, 这是
0328 各种FOSS组织推荐的,例如 `FSFE REUSE initiative <https://reuse.software/>`_.
0329
0330 _`模块许可`
0331 -----------------
0332
0333 可加载内核模块还需要MODULE_LICENSE()标记。此标记既不替代正确的源代码
0334 许可证信息(SPDX-License-Identifier),也不以任何方式表示或确定提供模块
0335 源代码的确切许可证。
0336
0337 此标记的唯一目的是提供足够的信息,该模块是否是自由软件或者是内核模块加
0338 载器和用户空间工具的专有模块。
0339
0340 MODULE_LICENSE()的有效许可证字符串是:
0341
0342 ============================= =============================================
0343 "GPL" 模块是根据GPL版本2许可的。这并不表示仅限于
0344 GPL-2.0或GPL-2.0或更高版本之间的任何区别。
0345 最正确许可证信息只能通过相应源文件中的许可证
0346 信息来确定
0347
0348 "GPL v2" 和"GPL"相同,它的存在是因为历史原因。
0349
0350 "GPL and additional rights" 表示模块源在GPL v2变体和MIT许可下双重许可的
0351 历史变体。请不要在新代码中使用。
0352
0353 "Dual MIT/GPL" 表达该模块在GPL v2变体或MIT许可证选择下双重
0354 许可的正确方式。
0355
0356 "Dual BSD/GPL" 该模块根据GPL v2变体或BSD许可证选择进行双重
0357 许可。 BSD许可证的确切变体只能通过相应源文件
0358 中的许可证信息来确定。
0359
0360 "Dual MPL/GPL" 该模块根据GPL v2变体或Mozilla Public License
0361 (MPL)选项进行双重许可。 MPL许可证的确切变体
0362 只能通过相应的源文件中的许可证信息来确定。
0363
0364 "Proprietary" 该模块属于专有许可。此字符串仅用于专有的第三
0365 方模块,不能用于在内核树中具有源代码的模块。
0366 以这种方式标记的模块在加载时会使用'P'标记污
0367 染内核,并且内核模块加载器拒绝将这些模块链接
0368 到使用EXPORT_SYMBOL_GPL()导出的符号。
0369 ============================= =============================================
0370