GLEP 23: 处理 ACCEPT_LICENSE

作者 Jason Stubbs <[email protected]>, Marius Mauch <[email protected]>
类型 标准路径
状态 最终
版本 1
创建日期 2004-03-09
最后修改日期 2022-05-03
发布历史 2004-03-08, 2004-03-10, 2004-10-25, 2006-11-18, 2006-11-21
GLEP 源代码 glep-0023.rst

状态更新

Repoman 已更新以检查 LICENSE 语法。Portage 现在处理 ACCEPT_LICENSE 和许可证组,NON-MUST-HAVE-READ 的作用由 @EULA 处理。自 2014-01-16 起标记为最终版。

摘要

目前,主 Gentoo 存储库中的每个 ebuild 都需要具有有效的 LICENSE 条目。但是,此条目的语法没有正式定义,条目本身仅在输出软件包详细信息时使用。

动机

许多用户希望出于各种原因 [1] 规范他们安装的软件与许可证相关的方面。有些人希望系统中没有任何非 OSI 认可的软件;另一些人只是想知道他们隐式接受了哪些许可证。

此外,某些软件要求用户以交互方式接受其许可证,以便其作者认为该许可证具有法律约束力。这目前使用以下方式实现eutils.eclass.

规范

Ebuild LICENSE 变量

大多数 ebuild 都是针对在单个许可证下发布的软件。在这些情况下,当前的 LICENSE 变量可以保持原样。例如

LICENSE="single-license"

但是,有几个 ebuild 针对在多个许可证下发布的软件,用户必须接受其中一个、一些或所有许可证 [2]。更复杂的是,一些 ebuild 包含在不同许可证下的可选组件。

为了适应这些情况,LICENSE 语法应适应 DEPEND 字符串提供的全部功能。为了保持简单,此 GLEP 建议语法与之相同。例如

LICENSE="mandatory-license
    || ( choosable-licence1 chooseable-license-2 )
    useflag? ( optional-component-license )"

许可证名称可以包含 [a-zA-Z0-9](英语字母数字字符)、_(下划线)、-(连字符)、.(点)和 +(加号)。它们不能以连字符、点或加号开头。

许可证组

几乎所有用户都愿意安装任何 FSF 认可的软件。其他用户愿意安装任何软件并隐式接受其许可证。为此,实现还需要处理许可证分组。

至少需要以下组GPL-COMPATIBLE, FSF-APPROVED, OSI-APPROVED以及NON-MUST-HAVE-READ. NON-MUST-HAVE-READ许可证是不需要手动接受即可被视为具有法律约束力的许可证。这是 portage 的当前行为。

这些组在新的文件中定义license_groupsprofiles树(或覆盖)的子目录中。处理覆盖中定义的组的细节取决于具体实现。

此文件的格式为

<groupname> <license1> <license2> ... <licenseN>

此外,任何以 # 开头的行都被忽略,可用于注释。组名使用与普通许可证名称相同的语法。此外,许可证组可以包含其他组。许可证组不能包含否定元素,因此组

mygroup foo -bar -bla

是非法的。

ACCEPT_LICENSE

此 GLEP 建议用户能够通过编辑新的变量显式接受或拒绝许可证ACCEPT_LICENSE/etc/make.conf中。再次,为了保持简单,语法应类似于其他增量。例如

ACCEPT_LICENSE="-* accepted-license -declined-license"

作为扩展,ACCEPT_LICENSE还必须支持 许可证组。此 GLEP 建议在许可证组前添加特殊字符“@”。例如

ACCEPT_LICENSE="-* @FSF-APPROVED"

许可证组可以通过否定来表示,结果是该组的所有元素也被否定。

Portage 还将提供一个 package.license 功能,以便在每个软件包基础上提供此功能(类似于 package.keywords),其他实现可能以不同方式或根本不实现此功能。

行为

未接受的许可证将像任何其他被屏蔽的软件包一样被处理,即实现的用户界面将显示一条消息,列出所有必须接受的许可证,以便将该软件包与指向确切许可证文本的指针一起合并。

该文档的先前版本建议将许可证屏蔽的软件包像阻断程序一样处理,但这与其他可见性过滤器以及当前的阻断程序系统(因为阻断程序会影响两个软件包)不一致,并且实现起来更复杂。

基本原理

此提案的实现应使希望规范其软件的用户易于使用,而不会影响那些不想规范的用户。

参考实现

在 portage svn 存储库中提供,位于 main/branches/license-masking 下

向后兼容性

如果没有用户明确选择这样做,则用户体验不应有任何变化。这要求配置变量名为ACCEPT_LICENSE,因为某些用户可能已经设置了它,因为 ebuild 使用了eutils.eclass的实现。它还要求默认ACCEPT_LICENSE设置为@NON-MUST-HAVE-READ在主 Gentoo 存储库中,因为实现不需要提供内部默认值。

参考资料

[1]Gentoo Linux Bug 17367 (https://bugs.gentoo.org/17367)
[2]Gentoo Linux Bug 34146 (https://bugs.gentoo.org/34146)