Linux内核遵守什么条款,Linux 内核文档:《Linux 内核许可规则》

Linux 内核文档:《Linux 内核许可规则》

本文转载自 Linux 内核官网, 由于官网加载非常卡, 为了方便阅读特意转发到博客.

内容具有时效性, 需要阅读最新版本的同学, 可通过下面的链接跳转:

概述

Linux 内核根据 LICENSES/preferred/GPL-2.0 中提供的 GNU 通用公共许可证版本 2 (GPL-2.0)的条款提供, 并在 LICENSES/exceptions/Linux-syscall-note 中显式 描述了例外的系统调用, 如 COPYING 文件中所述.

此文档文件提供了如何对每个源文件进行注释以使其许可证清晰明确的说明. 它不会取代内核的许可证.

内核源代码作为一个整体适用于 COPYING 文件中描述的许可证, 但是单个源文件可以 具有不同的与 GPL-20 兼容的许可证:

GPL-1.0+ : GNU 通用公共许可证 v1.0 或更高版本

GPL-2.0+ : GNU 通用公共许可证 v2.0 或更高版本

LGPL-2.0 : 仅限 GNU 库通用公共许可证 v2

LGPL-2.0+: GNU 库通用公共许可证 v2 或更高版本

LGPL-2.1 : 仅限 GNU 宽通用公共许可证 v2.1

LGPL-2.1+: GNU 宽通用公共许可证 v2.1 或更高版本

除此之外, 个人文件可以在双重许可下提供, 例如一个兼容的 GPL 变体, 或者 BSD, MIT 等许可.

用户空间 API(UAPI)头文件描述了用户空间程序与内核的接口, 这是一种特殊情况. 根据内核 COPYING 文件中的注释, syscall 接口是一个明确的边界, 它不会将 GPL 要求 扩展到任何使用它与内核通信的软件. 由于 UAPI 头文件必须包含在创建在 Linux 内核 上运行的可执行文件的任何源文件中, 因此此例外必须记录在特别的许可证表述中.

表达源文件许可证的常用方法是将匹配的样板文本添加到文件的顶部注释中. 由于 格式, 拼写错误等, 这些 "样板" 很难通过那些在上下文中使用的验证许可证合规性 的工具.

样板文本的替代方法是在每个源文件中使用软件包数据交换 (SPDX) 许可证标识符. SPDX 许可证标识符是机器可解析的, 并且是用于提供文件内容的许可证的精确缩写. SPDX 许可证标识符由 Linux 基金会的 SPDX 工作组管理, 并得到了整个行业, 工具 供应商和法律团队的合作伙伴的一致同意. 有关详细信息, 请参阅 https://spdx.org/

Linux 内核需要所有源文件中的精确 SPDX 标识符. 内核中使用的有效标识符在 许可标识符 一节中进行了解释, 并且已可以在 https://spdx.org/licenses/ https://spdx.org/licenses 上的官方 SPDX 许可证列表中检索, 并附带许可证 文本.

许可标识符语法

安置

内核文件中的 SPDX 许可证标识符应添加到可包含注释的文件中的第一行. 对于大多数文件, 这是第一行, 除了那些在第一行中需要'#!PATH_TO_INTERPRETER'的脚本. 对于这些脚本, SPDX 标识符进入第二行.

风格

SPDX 许可证标识符以注释的形式添加. 注释样式取决于文件类型:C source:// SPDX-License-Identifier:

C header:/* SPDX-License-Identifier: */

ASM:/* SPDX-License-Identifier: */

scripts:# SPDX-License-Identifier:

.rst:..SPDX-License-Identifier:

.dts{

i

}:// SPDX-License-Identifier:

如果特定工具无法处理标准注释样式, 则应使用工具接受的相应注释机制. 这是在 C 头文件中使用 "/**/" 样式注释的原因. 过去在使用生成的. lds 文件中观察到 构建被破坏, 其中'ld'无法解析 C++ 注释. 现在已经解决了这个问题, 但仍然有较 旧的汇编程序工具无法处理 C++ 样式的注释.

句法

SPDX 许可证表达式是 SPDX 许可证列表中的 SPDX 短格式许可证标识符, 或者在许可 证例外适用时由 "WITH" 分隔的两个 SPDX 短格式许可证标识符的组合. 当应用多个许 可证时, 表达式由分隔子表达式的关键字 "AND","OR" 组成, 并由 "(",")" 包围.

带有 "或更高" 选项的[L]GPL 等许可证的许可证标识符通过使用 "+" 来表示 "或更高" 选项来构建.:// 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

其它在内核中使用 WITH 例外的事例如下:// SPDX-License-Identifier: GPL-2.0 WITH mif-exception

// SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0

例外只能与特定的许可证标识符一起使用. 有效的许可证标识符列在异常文本文件 的标记中. 有关详细信息, 请参阅 许可标识符 一章中的 例外 .

如果文件是双重许可且只选择一个许可证, 则应使用 OR. 例如, 一些 dtsi 文件在双 许可下可用:

// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause

内核中双许可文件中许可表达式的示例:// SPDX-License-Identifier: GPL-2.0 OR MIT

// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause

// SPDX-License-Identifier: GPL-2.0 OR Apache-2.0

// SPDX-License-Identifier: GPL-2.0 OR MPL-1.1

// SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT

// SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause OR OpenSSL

如果文件具有多个许可证, 其条款全部适用于使用该文件, 则应使用 AND. 例如, 如果代码是从另一个项目继承的, 并且已经授予了将其放入内核的权限, 但原始 许可条款需要保持有效:

// SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) AND MIT

另一个需要遵守两套许可条款的例子是:

// SPDX-License-Identifier: GPL-1.0+ AND LGPL-2.1+

许可标识符

当前使用的许可证以及添加到内核的代码许可证可以分解为:

优先许可

应尽可能使用这些许可证, 因为它们已知完全兼容并广泛使用. 这些许可证在内核 目录:

LICENSES/preferred/

此目录中的文件包含完整的许可证文本和 元标记 . 文件名与 SPDX 许可证标识 符相同, 后者应用于源文件中的许可证.

例如:

LICENSES/preferred/GPL-2.0Valid-License-Identifier:GPL-2.0

Valid-License-Identifier:GPL-2.0+

SPDX-URL:https://spdx.org/licenses/GPL-2.0.html

Usage-Guide:

Tousethislicenseinsource code,put oneofthe following SPDX

tag/valuepairsintoa comment according to the placement

guidelinesinthe licensing rules documentation.

For'GNU General Public License (GPL) version 2 only'use:

SPDX-License-Identifier:GPL-2.0

For'GNU General Public License (GPL) version 2 or any later version'use:

SPDX-License-Identifier:GPL-2.0+

License-Text:

Fulllicense text

SPDX-License-Identifier:MIT

SPDX-URL:https://spdx.org/licenses/MIT.html

Usage-Guide:

Tousethislicenseinsource code,put the following SPDX

tag/valuepairintoa comment according to the placement

guidelinesinthe licensing rules documentation.

SPDX-License-Identifier:MIT

License-Text:

Fulllicense textValid-License-Identifier:ISC

SPDX-URL:https://spdx.org/licenses/ISC.html

Usage-Guide:

Usageofthislicenseinthe kernelfornewcodeisdiscouraged

andit should solely be usedforimporting codefroman already

existing project.

Tousethislicenseinsource code,put the following SPDX

tag/valuepairintoa comment according to the placement

guidelinesinthe licensing rules documentation.

SPDX-License-Identifier:ISC

License-Text:

Fulllicense textSPDX-Exception-Identifier:Linux-syscall-note

SPDX-URL:https://spdx.org/licenses/Linux-syscall-note.html

SPDX-Licenses:GPL-2.0,GPL-2.0+,GPL-1.0+,LGPL-2.0,LGPL-2.0+,LGPL-2.1,LGPL-2.1+

Usage-Guidance:

Thisexceptionisused togetherwithoneofthe above SPDX-Licenses

to mark user-space API(uapi)header files so they can be included

intonon GPL compliant user-space application code.

Tousethisexceptionadditwiththe keyword WITH to oneofthe

identifiersinthe SPDX-Licensestag:

SPDX-License-Identifier:WITHLinux-syscall-note

Exception-Text:

Fullexception text

SPDX-Exception-Identifier:GCC-exception-2.0

SPDX-URL:https://spdx.org/licenses/GCC-exception-2.0.html

SPDX-Licenses:GPL-2.0,GPL-2.0+

Usage-Guidance:

The"GCC Runtime Library exception 2.0"isused togetherwithone

ofthe above SPDX-Licensesforcode importedfromthe GCC runtime

library.

Tousethisexceptionadditwiththe keyword WITH to oneofthe

identifiersinthe SPDX-Licensestag:

SPDX-License-Identifier:WITH GCC-exception-2.0

Exception-Text:

Fullexception text

来源: http://www.bubuko.com/infodetail-3365258.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值