由于包管理器处于更高的支持状态,因此对它有更高的要求。这些要求的目的是确保发行版和包树的统一性。为此,需要只有一个主要包管理器。这是从 Gentoo 的角度来看的。从用户的角度来看,完全可以使用其他包管理器。候选主要包管理器和次要包管理器在 bug 等方面也得到支持。
主要包管理器是为树设置标准的包管理器。树中的所有 ebuild 都必须与主要包管理器一起工作。由于主要包管理器设置了标准,因此它不必维护与其他包管理器的兼容性。但这并不意味着实际实现就是标准,而是指维护人员有能力与其他相关的 Gentoo 项目一起定义新标准。
然而,主要包管理器有责任确保它非常稳定。主要包管理器必须在很长一段时间内保持与旧版本的兼容性。此兼容性时间由理事会设定。建议的时间是从所有受支持体系结构都有兼容的稳定版本起的一年时间。
主要包管理器的另一个兼容性要求是有限的前向兼容性。必须始终能够从主要包管理器的非稳定版本过渡到稳定版本。这可以通过首先引入对新格式的读取兼容性,然后才提供写入支持来实现。另一种方法是提供一个转换工具,确保包管理器维护的磁盘上的信息受稳定包管理器支持。
主要包管理器维护人员还必须承担允许竞争的责任。这意味着必须应用来自次要或候选主要包管理器维护人员的合理补丁,前提是这些补丁尽可能独立于该包管理器。
主要包管理器在 Gentoo 开发人员控制下的官方 Gentoo 基础设施上维护。
候选主要包管理器旨在取代主要包管理器。理事会负责决定是否这样做。这些要求是为了确保能够将候选主要包管理器过渡到主要包管理器。
首先,必须存在一个过渡路径。这意味着主要包管理器的磁盘上数据可用于(或转换为候选主要包管理器可用的格式)。
其次,必须存在一个测试路径。开发者必须能够在他们的工作系统上测试候选主要包管理器。这意味着过渡路径必须存在。这也意味着恢复到当前主要包管理器没有严重的障碍。当决定候选者不会成为主要包管理器时,例如由于发现严重的设计缺陷或 bug,恢复也必须可用。理想情况下,候选主要包管理器和主要包管理器可以同时安装。如果不是,必须提供明确的说明来指导两种过渡方式。
第三,必须存在一个 ebuild 测试路径。包管理器必须能够在一个树中为主要包管理器和候选主要包管理器测试 ebuild。如果这需要候选主要包管理器的一种特殊模式,则不是问题。如果可以通过让候选主要包管理器取消合并包来实现兼容性,则也不是问题。
第四,必须有支持。这意味着包管理器在 Gentoo 的控制下积极维护。如果它不在 Gentoo 基础设施上维护,那么必须有方法将包管理器及其变更历史迁移到 Gentoo 基础设施上。这意味着它必须在 Gentoo 支持的版本控制系统上维护,或者在历史记录可转换为 Gentoo 支持的版本控制系统的版本控制系统上维护。
第五,发布功能。必须存在使用候选主要包管理器创建与使用旧主要包管理器发布的媒体具有类似功能的发布媒体的自动化工具。具体要求由发布工程项目确定,但应该不会显著超出目前使用主要包管理器实施的内容。
次要包管理器是一种包管理器,它不直接旨在取代当前主要包管理器作为主要包管理器,而是旨在与主要包管理器合作。因此,次要包管理器不设置树上的标准,而是遵循主要包管理器设置的标准。
有两种类型的次要包管理器。第一种类型由那些不维护自己的已安装包数据库,而是与主要包管理器的包数据库一起工作的包管理器构成。虽然这些包管理器可以在数据库中添加额外信息,但这些条目必须与主要包管理器的条目保持兼容。主要包管理器的验证、引用和卸载功能必须保持有效。
第二种类型由那些维护自己的包数据库或与主要包管理器不兼容的包数据库的包管理器构成。为了确保这些包管理器的次要角色,树中对这些包管理器的支持是与限制一起提供的。
第一个限制是树中的任何包都不能依赖于次要包管理器。虽然包可以提供一定程度的支持(同时与主要包管理器兼容),但这不会导致功能显著增加。如果允许这样做,这意味着虽然它们在技术上与主要包管理器一起工作,但使用次要包管理器将会有很大的激励。由于使用这个次要包管理器不允许并行使用主要包管理器,这将导致用户使用次要包管理器作为他们的主要包管理器。
用户可以做出自己的选择。但是,通过让树偏向于不是主要包管理器的包管理器,这将导致次要包管理器成为有效的主要包管理器。由于这将是默认决定而不是理事会的有意识选择,这是一个不可取的结果。
对于只与次要包管理器一起工作或对次要包管理器有显著改进的包的限制有一个例外。那就是那些本质上只能与这个次要包管理器一起使用的包。例如,次要包管理器的图形前端。
如果一个辅助包管理器与主包管理器一起工作,但本身没有成为主包管理器的能力,那么默认选择的风险就会降低。因此,委员会可以选择允许包含仅与这个辅助包管理器一起工作或效果更好的软件包。例如,在存在一个稳定、功能性的包管理器能够处理 RPM 格式软件包的情况下,委员会可以决定直接将这些软件包包含在树中,而不是使用包装脚本,这些包装脚本仅用于以 RPM 格式提供的软件包。这样的决定确实意味着主包管理器的维护人员必须考虑这个辅助包管理器。
第三方包管理器就是这么回事。它是一个没有 Gentoo 支持的包管理器。由于 Gentoo 对包管理器没有控制权,这意味着对包管理器没有要求。
然而,这种完全缺乏控制也意味着 Gentoo 无法进行包管理器特定的更改来支持这个包管理器。包管理器特定意味着可以请求更改,使树更独立于主包管理器。但是,这些更改必须与包管理器无关,并且只能使其更容易拥有替代的包管理器。
可以选择一个候选主包管理器来成为主包管理器。这只能通过委员会决议来实现。只有当候选主包管理器在所有稳定架构上稳定时(除了实验性架构以外的所有架构),才能做出这个决定。在候选主包管理器可以成为主包管理器之前,有一个至少为期 3 个月的孵化期。
在决定更换主包管理器之后,过渡阶段开始。必须在 6 个月内继续支持使用旧的稳定包管理器。这意味着核心软件包必须可以通过此包管理器安装。此外,至少在 18 个月内(最好更长时间)必须提供将系统自动转换为新的主包管理器的可能性(启用从旧包管理器安装新的包管理器)。
在过渡阶段,树中允许使用新主包管理器的新的功能的软件包。虽然必须保持与先前主包管理器的向后兼容性,但不再需要向前兼容性。
从辅助包管理器到候选主包管理器的过渡非常简单。辅助包管理器必须满足候选主包管理器的所有要求。在那时,其维护人员可以宣布他们正在将状态更改为候选主包管理器。这使得 Gentoo 可以提供更大的支持来实现这一目标。
当第三方包管理器想要过渡到其他类别(除了主包管理器)时,它必须满足该类别的所有要求。