许可证

所有 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 的正确值,你需要追踪所有已安装文件的许可证。通常,输出文件(编译的可执行文件、生成的 文件)的许可证是由相关输入文件的许可证隐含的。

寻找许可证信息时,应考虑以下因素

  1. COPYING*LICENSE* 与软件包一起分发的文件
  2. 文档中的明确说明
  3. 源代码和数据文件中的显式许可证声明

后一种(更具体的)选项优先于前一种。特别是,COPYING* 文件通常包含适用许可证的硬拷贝,但许可证的具体应用和版本在其他地方指定。

如果软件包未指明任何许可证,则应联系作者以澄清。强烈建议不要添加没有明确许可证声明的软件包。如果它们已存在,则应具有 all-rights-reserved 许可证,以及 RESTRICT="bindist mirror"

检测上游许可证问题

请注意上游许可证问题,并向 upstream 报告。你可以向 Gentoo 许可证团队寻求指导。通常,最好等待上游解决问题并发布新版本。不要添加似乎包含许可证条款违规的软件包!

常见的许可证问题包括但不限于

  1. 包含第三方代码而没有适当的版权声明。实际上所有许可证(公有领域类似许可证除外)都要求署名,而有些许可证要求逐字复制原始版权声明。

  2. 组合不兼容的许可证。当你将使用不同许可证的多个文件组合成单个可执行文件时,这些许可证需要是兼容的。例如,不可能将专有代码与复制左许可证(例如 GPL)组合。将 GPL-2(仅)和 GPL-3 代码组合在一起也是不正确的。

  3. 动态链接不兼容的可执行文件。可以说,一些许可证也对可执行文件和共享库之间的动态链接施加限制。例如,通常你不能将 GPL 可执行文件与 OpenSSL 链接。对于 LGPL,没有相同的限制,并且一些项目在其 GPL 使用中添加了特定的链接例外。

  4. 关于项目的错误或不完整的许可证信息。上游可能会为项目指明错误的有效许可证(例如在 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 不认为软件包数据交换是权威标准,因此我们有时可能会偏离它,例如,如果它们的“简短标识符”过长。此外,我们通常不会重命名我们现有的标识符。

进一步阅读

以下资源被推荐为有关版权和许可证的更多信息的来源