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_groups在profiles树(或覆盖)的子目录中。处理覆盖中定义的组的细节取决于具体实现。
此文件的格式为
<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) |
版权
此作品根据知识共享署名 - 相同方式共享 3.0 通用许可证授权。要查看此许可证的副本,请访问 https://creativecommons.org/licenses/by-sa/3.0/。