本文档现已过时。请参阅 Apache 项目指南 获取最新信息。


Apache 投票规则和指南

本文档定义了 Apache 小组成员在对 Apache HTTP Server 的补丁、文档或其他待执行项目进行投票时应遵循的规则和指南。

这里的目标是避免对更改进行不必要的冲突,并继续以及时的方式生成高质量的系统。并非所有冲突都能避免,但至少我们可以就解决冲突的程序达成一致。

下面使用了一些缩写...

邮件列表
Apache 开发人员的邮件列表。订阅列表仅限邀请,只有订阅者才能直接发布到列表中。
CURRENT
最新版本的源代码。用作将新补丁合并到的基础代码。
C_VERSION
CURRENT 的版本号。
NEXT
源代码的下一个版本。将已批准的补丁应用于 CURRENT 的结果。

o 问题和待执行项目

项目将遇到许多问题,每个问题都会导致零个或多个待执行项目。所有待执行项目都可以进行投票,但并非所有项目都需要正式投票。问题应在识别后立即在邮件列表中提出。待执行项目 **必须** 在邮件列表中提出。

待执行项目类型

代码更改
代码更改需要同行评审和在各种服务器平台上进行测试。因此,所有代码更改都必须通过正式的“补丁投票”,如 下文 所述。所有参与补丁投票的人员都必须愿意并且能够测试已打补丁的系统。
文档更改
文档更改仅在更改后(或期间)进行投票。更改的作者必须通知邮件列表(最好是在工作之前,以避免重复工作),说明更改的位置。如果更改是对现有文档的更改,则在通知列表至少 24 小时后才能替换现有文档。任何小组成员都可以否决更改,但必须随后为作者提供实际帮助来纠正问题(如果可以纠正),并且必须在问题得到纠正后撤销否决权(这可以被认为是善意)。
长期计划
长期计划只是宣布小组成员正在处理与 Apache 软件相关的特定问题。这些计划不进行投票,但不同意特定计划或认为替代计划更好的小组成员有义务将他们的感受告知小组。一般来说,在花费时间寻找不太充分的解决方案之前,最好 **事先** 了解替代计划。

o 投票

邮件列表中的任何人都可以对任何问题进行投票。但是,投票行为会带来某些义务——投票成员不仅是在表达他们的意见,他们还同意帮助完成 Apache 项目的工作。

每个投票都可以以三种方式进行

+1
是,同意,或应执行该操作。对于某些问题,只有在投票者在其自己的系统上测试了该操作后才能进行此投票。

±0
弃权,没有意见,或者我很乐意让其他小组成员决定这个问题。如果太多人弃权,弃权可能会产生不利影响。

-1
否,我 **否决** 此操作。所有否决都必须包含对否决为何合适的解释。没有解释的否决无效。

所有投票都必须发送到邮件列表。

o 正式补丁投票

如上所述,对源代码的更改需要同行评审并在许多平台上进行充分测试。正式的补丁投票规则旨在确保即使我们都急于看到问题得到解决,也能做到这一点。但是,另请参阅有关 懒惰投票 模式的部分。

补丁投票流程中有四个不同的角色,每个角色都可能由多个小组成员共享:补丁提供者、投票协调员、投票者和版本构建者。

补丁提供者包括任何提出待执行项目的人员。除非不可行,否则源代码更改必须以补丁命令的输入形式提出。可行性由每个投票者和版本构建者定义,他们可能会否决待执行项目,如果该操作需要超出他们预期执行的工作量。

上传待执行项目

待执行项目(通常是补丁)通过 FTP 上传到 hyperreal(apache.org),可以直接上传到 CURRENT 的补丁目录(/httpd/patches/for_Apache_C_VERSION/)中,或者上传到传入的 FTP 目录中,以便稍后转移到补丁目录中。

每个文件名至少应该暗示操作目标,并包含对以下内容的引用

  1. (C_VERSION) CURRENT 的版本号
  2. (ID) 唯一的待执行项目编号
  3. (p) 补丁字母,如果提出了备用补丁文件

不包含补丁的文件名的语法为

    ID.description
例如,
    01.Modula3_rewrite
如果待执行项目不是(尚未)补丁形式。

包含补丁的文件名的语法为

    IDp.description.C_VERSION.patch
例如,
    01.ScriptAliasKaboom.0.8.11.patch
    01a.ScriptAliasKaboom.0.8.11.patch
    01b.ScriptAliasKaboom.0.8.11.patch

ID 号应从 01 开始,并为上传的每个新待执行项目递增。

待执行项目格式

待执行项目应包含一个标题信息列表(格式类似于电子邮件或 HTTP 标题)

From
补丁作者和/或识别问题的人员列表。
Subject
对正在解决的问题的描述。
Requires
必须在此补丁之前应用的其他补丁列表。
Affects
此补丁影响的源文件名列表
Changelog
用于未来更改日志的几行,以便记录补丁(如果被接受)。
Comments
有关问题的任何其他评论。
后面是一个空行,然后是补丁(如果有)。

补丁格式

补丁应通过在 CURRENT 源代码和修改后的源代码上使用 diff -u 来创建。例如,

    diff -u http_main.c.orig http_main.c

解决待执行项目所需的所有补丁必须在一个补丁文件中连接起来。补丁文件影响的源文件应列在 Affects 标题中。

完成的补丁文件在执行以下命令时不应产生任何错误或提示,

    patch -s < patchfile

如果补丁产生错误或提示,则其他人可能会拒绝它。补丁问题应在发现后立即报告给邮件列表。补丁之间的依赖关系必须在补丁文件标题中使用 Requires 行进行注释。

备用补丁

上传后,对补丁文件内容的更改仅限于标题信息(即,除补丁本身以外的所有内容)。例如,可以更改 Changelog 条目,但不能更改 diff 命令的输出。

如果补丁本身需要更改,则应使用新的补丁字母在 ID 后创建新的补丁文件。任何人都可以上传补丁来解决单个问题,因此可以为同一个问题提供备用补丁。补丁的作者是唯一被允许(或给予许可)删除现有补丁的人。删除补丁意味着删除补丁文件。

每个补丁文件都独立进行投票。新的备用补丁必须获得自己的投票——它们不会自动继承替换它们的补丁的投票。

CURRENT 的补丁可以在投票会议之前或期间的任何时间上传。

投票会议

只要能找到志愿者来执行以下操作,任何人都可以发起投票会议

自愿执行这些任务的人员会商定一个时间表并在邮件列表中宣布。时间表的重要部分是投票截止日期,它指定了何时统计投票结果以及何时可以构建新版本。除非是 紧急情况,否则初始截止日期应至少在宣布后三天。

如果使用与补丁相同的投票规则,有足够的投票且没有否决,则可以移动投票截止日期。当前截止日期不能进行投票。

小组成员可以随时投票和评论正在考虑的补丁。一个人的最终投票(如果投票发生变化)被认为使之前的投票无效。

投票如下进行;

+1
如果该人已,则可以对补丁进行投票,
  1. 阅读补丁标题以了解它解决的问题
  2. 已成功将其打补丁到 CURRENT
  3. 观察到补丁没有造成任何不良副作用。

-1
是对补丁的否决。所有否决都必须附带对否决为何合适的解释。没有解释的否决无效。

任何否决都不能被推翻。如果您不同意否决,您应该游说投出否决的人。打算否决补丁的投票者应立即将他们的意见告知小组,以便在投票截止日期之前尽可能地解决问题。

投票收集

投票协调员在最终投票截止日期过后立即统计投票结果。然后,投票结果将发布到邮件列表中。

为了获得批准,待执行项目文件必须至少获得 3 票赞成票,并且 **没有** 否决票。

投票协调员可以自行决定忽略或接受迟到的 +1 票。迟到的否决票无效:它只能用于试图说服赞成票重新考虑。如果赞成票更改为否决票,则该否决票即使是迟到的也是有效的。

发布构建和公告

在投票协调员将结果提供给版本构建者后,通过将已批准的补丁应用于 CURRENT 来创建 NEXT,进行其他已批准的(非补丁)待执行项目所要求的更改,将已批准的待执行项目描述添加到更改日志中,并递增版本号。

然后,版本构建者将 NEXT 上传到 hyperreal 并将其放置在预发布目录(/httpd/dist)中,以压缩和 gzip 压缩的 tar 文件形式命名新版本号。然后,将在私人邮件列表中宣布新版本的可用性。

版本发布公告后,构建者所犯的错误可以无需投票直接修正,但必须向小组公布。

除非在投票环节开始时另有说明,否则**NEXT**默认将发布到公众。如果有人反对公开发布,则需要进行多数决投票来决定是否公开发布。与其他投票不同,少数意见无法阻止公开发布。

如果**NEXT**将公开发布,邮件列表中的每个人都应尽力下载并试用。**NEXT**在创建并向小组公布后 24 小时内不得公开发布。

如果用于创建**NEXT**的补丁之一被发现会导致比其修复的问题更严重的问题,则应向小组报告此问题,并将任何公开发布推迟到获得关于如何解决此问题的多数决意见为止。

紧急补丁投票

在紧急补丁/投票环节以修复安全问题的情况下,小组可能需要绕过上述正常操作流程,以便在公开宣布问题之前进行修复。任何小组成员都可以在邮件列表中宣布紧急情况,并在被告知严重问题时立即这样做。任何小组成员都可以否决紧急情况,以迫使其通过正常流程。

用于解决紧急问题的补丁可以在补丁创建并由其作者测试后立即从 Apache 主页直接链接。但是,如果原始补丁被否决,则必须删除或更改此链接。

在补丁创建后 24 小时或获得三个 +1 投票后,无论哪个先发生,都可以向公众宣布紧急补丁的可用性。

懒人投票模式

在某些情况下,例如在开发周期的早期,可能需要在所谓的“懒人”投票模式下运行。这与正式投票流程基本相同,只是“沉默即同意”——如果 48 小时内没有否决,即使没有正式收集,也会假设有足够的“赞成”票。

正式投票环境和懒人投票环境可以共存;某些主题可能需要正式投票,而另一些主题则不需要。应运用常识,潜在的极具争议性的补丁不应在懒人规则下提交。

当补丁提交者希望利用懒人投票模式时,必须在补丁提交中明确说明。


Rob Hartill 和 Roy Fielding
1995 年 9 月 3 日
1997 年 8 月 26 日由 Ken Coar 修改