许可证
所有 ebuild 必须指定一个 LICENSE
(注意美式英语拼写)变量。此变量中列出的许可证名称必须与存储库的 licenses/
目录中存在的相应文件匹配。
此变量的值应包含与软件包安装的所有文件“对应源代码”相关的全部许可证。这包括所有源代码,以及用于控制编译和安装的所有脚本。如果软件包具有“主要许可证”(即涵盖其大多数文件的许可证),则应将其列在首位。
如果软件包的某些部分仅在特定条件下安装,或其许可证取决于 USE 标志组合,则可以在 LICENSE
中使用 USE 条件。
LICENSE="LGPL-2.1+ tools? ( GPL-2+ )"
如果软件包源代码包含其他文件,这些文件既未安装也未在构建时使用,则不应列出其许可证。
如果应用程序是多许可证的(可以使用多个许可证中的任何一个),则使用以下语法
LICENSE="|| ( foo bar )"
许可证暗示的限制
非自由许可证可能会施加额外的限制,需要在 ebuild 中说明。为了正确识别这些限制,需要分析相关许可证,并根据上游软件包中包含的文件确定适用的条款。请注意,上游可能对多个产品使用相同的许可证,其中一些限制可能不适用于所讨论的 ebuild。
如果软件包的许可证未明确允许重新分发在 SRC_URI
中找到的 distfile,则相应的 ebuild 必须具有 RESTRICT=mirror
,以防止受影响的文件被复制到 Gentoo 镜像。在某些情况下,许可证仅允许重新分发未修改的原始存档——在这种情况下,SRC_URI
不得包含修改或重新打包的上游存档,所有更改必须通过在适当的 ebuild 阶段打补丁来应用。
如果许可证不允许分发使用 ebuild 构建的 Gentoo 二进制软件包,无论是否修改源代码,都必须具有 RESTRICT=bindist
。如果基于重新分发的成本设置限制(例如,许可证禁止销售产品),情况也是如此。
一些 EULA 也可能要求用户手动获取 distfile,在这种情况下,RESTRICT=fetch
是必需的。请注意,RESTRICT=fetch
意味着 RESTRICT=mirror
。
确定正确的许可证
要确定 LICENSE
的正确值,你需要追踪所有已安装文件的许可证。通常,输出文件(编译的可执行文件、生成的 文件)的许可证是由相关输入文件的许可证隐含的。
寻找许可证信息时,应考虑以下因素
-
COPYING*
和LICENSE*
与软件包一起分发的文件 - 文档中的明确说明
- 源代码和数据文件中的显式许可证声明
后一种(更具体的)选项优先于前一种。特别是,COPYING*
文件通常包含适用许可证的硬拷贝,但许可证的具体应用和版本在其他地方指定。
如果软件包未指明任何许可证,则应联系作者以澄清。强烈建议不要添加没有明确许可证声明的软件包。如果它们已存在,则应具有 all-rights-reserved
许可证,以及 RESTRICT="bindist mirror"
。
检测上游许可证问题
请注意上游许可证问题,并向 upstream 报告。你可以向 Gentoo 许可证团队寻求指导。通常,最好等待上游解决问题并发布新版本。不要添加似乎包含许可证条款违规的软件包!
常见的许可证问题包括但不限于
-
包含第三方代码而没有适当的版权声明。实际上所有许可证(公有领域类似许可证除外)都要求署名,而有些许可证要求逐字复制原始版权声明。
-
组合不兼容的许可证。当你将使用不同许可证的多个文件组合成单个可执行文件时,这些许可证需要是兼容的。例如,不可能将专有代码与复制左许可证(例如 GPL)组合。将 GPL-2(仅)和 GPL-3 代码组合在一起也是不正确的。
-
动态链接不兼容的可执行文件。可以说,一些许可证也对可执行文件和共享库之间的动态链接施加限制。例如,通常你不能将 GPL 可执行文件与 OpenSSL 链接。对于 LGPL,没有相同的限制,并且一些项目在其 GPL 使用中添加了特定的链接例外。
-
关于项目的错误或不完整的许可证信息。上游可能会为项目指明错误的有效许可证(例如在 README 中。例如,上游可能表示项目已获得 GPL-2+ 许可,而一些源代码文件使用 GPL-3+ 许可证。
GPL-x vs GPL-x+
FSF 许可证(GPL、LGPL、AGPL、FDL)有两种变体:“vN 仅”和“vN 或更高”变体。在 Gentoo 中,后一种变体的许可证用在它们各自的“vN 仅”变体的许可证表示法中附加一个加号 (+) 来表示,例如 GPL-2+
和 GPL-2
。
确定正确的变体通常需要查看代码中的版权声明。例如,以下版权声明表示 GPL-2+
许可证
* This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version.
添加新的许可证
如果你的软件包的许可证不在树中,则必须在提交软件包之前添加许可证。添加许可证时,使用纯文本文件(UTF-8 编码),因为非文本文件 不属于存储库。最后,你需要检查你的许可证是否应该添加到存储库的 profiles/license_groups
文件中列出的许可证组中。有关更多信息,请参阅 GLEP 23。
通常在添加新许可证之前没有必要向 gentoo-dev
列表或 [email protected]
发送邮件。只有在许可证可能被认为“有问题”或你不确定其任何部分的含义时,才应该这样做。
添加新许可证时,应该检查 SPDX 许可证列表 中是否有已建立的名称。但是,Gentoo 不认为软件包数据交换是权威标准,因此我们有时可能会偏离它,例如,如果它们的“简短标识符”过长。此外,我们通常不会重命名我们现有的标识符。