| <HTML> | |
| <HEAD> | |
| <TITLE>Apache voting rules and guidelines</TITLE> | |
| </HEAD> | |
| <!-- Background white, links blue (unvisited), navy (visited), red (active) --> | |
| <BODY | |
| BGCOLOR="#FFFFFF" | |
| TEXT="#000000" | |
| LINK="#0000FF" | |
| VLINK="#000080" | |
| ALINK="#FF0000" | |
| > | |
| <H1>This document is now obsolete. Please refer to <A | |
| HREF="guidelines.html">the Apache Project guidelines</A> for | |
| up-to-date info.</H1> | |
| <H1 ALIGN=CENTER> | |
| <IMG SRC="images/apache_logo.gif" ALT=""><BR> | |
| Apache voting rules and guidelines | |
| </H1> | |
| <P> | |
| This document defines the rules and guidelines for Apache Group members | |
| to follow when voting on patches, documentation, or other action items | |
| to be applied to the Apache HTTP Server. | |
| </P> | |
| <P> | |
| The objective here is to avoid unnecessary conflict over changes and | |
| continue to produce a quality system in a timely manner. Not all conflict | |
| can be avoided, but at least we can agree on the procedures for conflict | |
| to be resolved. | |
| </P> | |
| <P> | |
| Some abbreviations used below... | |
| </P> | |
| <DL> | |
| <DT><STRONG>mailing list</STRONG></DT> | |
| <DD>The Apache developers' mailing list. | |
| Subscription to the list is by invitation only, and only subscribers | |
| can post directly to the list.</DD> | |
| <DT><STRONG>CURRENT</STRONG></DT> | |
| <DD>The most recent version of the source. Used as | |
| the base code into which new patches are to be merged.</DD> | |
| <DT><STRONG>C_VERSION</STRONG></DT> | |
| <DD>The version number of <STRONG>CURRENT</STRONG>.</DD> | |
| <DT><STRONG>NEXT</STRONG></DT> | |
| <DD>The next version of the source. The product of | |
| applying approved patches to <STRONG>CURRENT</STRONG></DD> | |
| </DL> | |
| <HR SIZE=6> | |
| <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o "> | |
| Issues and Action Items</H2> | |
| Many issues will be encountered by the project, each resulting in zero | |
| or more proposed action items. All action items may be voted on, but not all | |
| of them will require a formal vote. Issues should be raised on the | |
| mailing list as soon as they are identified. Action items | |
| <STRONG>must</STRONG> be raised on the mailing list. | |
| <H3>Types of Action Items</H3> | |
| <DL> | |
| <DT><STRONG>Code Changes</STRONG></DT> | |
| <DD>Code changes require peer review and testing over a wide range | |
| of server platforms. Therefore, all code changes must pass through | |
| a formal "patch vote", as described <A HREF="#patchvote">below</A>. | |
| All those participating in a patch vote must be willing and able | |
| to test the patched system.</DD> | |
| <DT><STRONG>Documentation Changes</STRONG></DT> | |
| <DD>Documentation changes are only voted on after (or during) the change. | |
| The author of the changes must notify the mailing list, preferably | |
| in advance of the work to avoid duplicate efforts, of where the | |
| changes are being made. If the changes are to existing documents, | |
| the existing documents should not be replaced until at least | |
| 24 hours after notifying the list. Any group member may veto a | |
| change, but must then provide real assistance to the author | |
| in correcting the problem if it can be corrected, and must rescind | |
| the veto once the problem has been corrected (this may be assumed | |
| in good faith).</DD> | |
| <DT><STRONG>Long Term Plans</STRONG></DT> | |
| <DD>Long term plans are simply announcements that group members | |
| are working on particular issues related to the Apache software. | |
| These are not voted on, | |
| but group members who do not agree with a particular plan, | |
| or think an alternate plan would be better, are obligated to | |
| inform the group of their feelings. In general, it is always | |
| better to hear about alternate plans <STRONG>prior</STRONG> to | |
| spending time on less adequate solutions. | |
| </DL> | |
| <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o "> | |
| Casting Votes</H2> | |
| <P> | |
| Anyone on the mailing list may vote on any issue. However, the act | |
| of voting carries certain obligations -- voting members are not only | |
| stating their opinion, they are agreeing to help do the work of the | |
| Apache Project.</P> | |
| <P>Each vote can be made in one of three flavors: | |
| <DL COMPACT> | |
| <DT><STRONG>+1</STRONG></DT> | |
| <DD> Yes, agree, or the action should be performed. On some issues, this | |
| vote must only be given after the voter has tested the action on | |
| their own system(s). | |
| </DD><P> | |
| <DT><STRONG>±0</STRONG></DT> | |
| <DD> Abstain, no opinion, or I am happy to let the other group members | |
| decide this issue. An abstention may have detrimental affects if | |
| too many people abstain. | |
| </DD><P> | |
| <DT><STRONG>-1</STRONG></DT> | |
| <DD> No, I <STRONG>veto</STRONG> this action. All vetos must include | |
| an explanation of why the veto is appropriate. A veto with | |
| no explanation is void. | |
| </DD> | |
| </DL> | |
| <P>All votes must be sent to the mailing list. | |
| <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o "> | |
| <A NAME="patchvote">Formal Patch Votes</A></H2> | |
| <P> | |
| As mentioned above, changes to the source code require peer review | |
| and adequate testing across many platforms. The formal patch vote | |
| rules are intended to ensure that this happens even when we are all in a | |
| hurry to see things fixed. However, also see the section on | |
| <A | |
| HREF="#lazy-voting" | |
| >lazy voting</A> | |
| mode. | |
| </P> | |
| <P>There are four distinct roles in the patch vote process, each of which | |
| may be shared by multiple group members: patch provider, vote coordinator, | |
| voter, and version builder. | |
| <P>Patch providers include anyone that has an action item to propose. | |
| Unless it is infeasible to do so, source code changes must be proposed in | |
| the form of input to the patch command. Feasibility is defined by each | |
| voter and the version builder(s), who may veto an action item if the | |
| action requires effort beyond what they are expected to perform. | |
| <H3>Uploading an Action Item</H3> | |
| <P>Action items (usually patches) are uploaded to hyperreal (apache.org) | |
| via FTP, either directly into the directory for patches to <STRONG>CURRENT</STRONG> | |
| (/httpd/patches/for_Apache_<STRONG>C_VERSION</STRONG>/), or into an incoming | |
| FTP directory for later transfer into the patch directory.<P> | |
| <P>Each filename should at least hint at the action objective and | |
| include reference to: | |
| <OL> | |
| <LI>(C_VERSION) the version number of <STRONG>CURRENT</STRONG></LI> | |
| <LI>(ID) the unique action item numeric ID</LI> | |
| <LI>(p) the patch letter, if an alternate patchfile is proposed</LI> | |
| </OL> | |
| <P>The syntax for filenames not containing patches is: | |
| <PRE> ID.description</PRE> | |
| e.g.,<BR> | |
| <PRE> 01.Modula3_rewrite</PRE> | |
| if the action item is not (yet) in the form of a patch. | |
| <P>The syntax for filenames containing patches is: | |
| <PRE> IDp.description.<STRONG>C_VERSION</STRONG>.patch</PRE> | |
| e.g., <BR> | |
| <PRE> 01.ScriptAliasKaboom.0.8.11.patch | |
| 01a.ScriptAliasKaboom.0.8.11.patch | |
| 01b.ScriptAliasKaboom.0.8.11.patch</PRE> | |
| <P>The ID number should start at 01, and be incremented for each new | |
| action item uploaded.</P> | |
| <H3>Action Item Format</H3> | |
| <P>An action item should contain a list of header information | |
| (formatted like e-mail or HTTP headers): | |
| <DL> | |
| <DT><STRONG>From:</STRONG></DT> | |
| <DD>A list of patch authors and/or people who identified the problem. | |
| <DT><STRONG>Subject:</STRONG></DT> | |
| <DD>A description of the problem being addressed. | |
| <DT><STRONG>Requires:</STRONG></DT> | |
| <DD>A list of other patches that must be applied before this one. | |
| <DT><STRONG>Affects:</STRONG></DT> | |
| <DD>A list of source file names that this patch affects | |
| <DT><STRONG>Changelog:</STRONG></DT> | |
| <DD>A couple of lines for use in a future changelog, so that the | |
| patch (if accepted) can be recorded. | |
| <DT><STRONG>Comments:</STRONG></DT> | |
| <DD>Any additional comments about the problem. | |
| </DL> | |
| followed by an empty line and then the patch (if any). | |
| <H3>Patch Format</H3> | |
| <P>The patch should be created by using <CODE>diff -u</CODE> on the | |
| <STRONG>CURRENT</STRONG> source and the modified source. E.g.,</P> | |
| <PRE> diff -u http_main.c.orig http_main.c</PRE> | |
| <P>All patches necessary to address an action item must be concatenated | |
| within a single patchfile. The source files affected by the patchfile | |
| should be listed in an Affects header.</P> | |
| <P>The completed patchfile should produce no errors or prompts when the | |
| command,</P> | |
| <PRE> patch -s < patchfile</PRE> | |
| is issued. | |
| <P>If the patch produces errors or prompts, then it may be rejected by | |
| others. Problems with patches should be reported to the mailing list | |
| as soon as they are noticed. Dependencies between patches must be | |
| noted with a Requires line in the patchfile headers.</P> | |
| <H3>Alternate Patches</H3> | |
| <P>Once uploaded, changes to the contents of a patchfile are limited | |
| to the header information (i.e., everything other than the patch itself). | |
| For example, the Changelog entry can be changed, but not the output | |
| of the <CODE>diff</CODE> command(s). | |
| <P>Should the patch itself need changing, a new patchfile should be created | |
| with a new patchletter after the ID. Anyone can upload a patch to address | |
| a single problem, so alternative patches can be offered for the same problem. | |
| The author of the patch is the only person allowed to (or give permission to) | |
| have an existing patch removed. Removal of a patch means removal of the | |
| patchfile.</P> | |
| <P>Each patchfile is voted on independently. New alternate patches must | |
| garner their own votes -- they do not automatically inherit the votes | |
| for patches they replace.</P> | |
| <P>Patches for <STRONG>CURRENT</STRONG> can be uploaded at any time before or | |
| during a voting session.</P> | |
| <H3>The Voting Session</H3> | |
| <P>A voting session can be initiated by anyone so long as a volunteer | |
| or volunteers can be found to: | |
| <UL> | |
| <LI>be the vote coordinator: collect the votes cast by group members</LI> | |
| <LI>be the version builder: apply approved patches to create the | |
| <STRONG>NEXT</STRONG> version of the system.</LI> | |
| </UL> | |
| <P>The person or persons volunteering to perform these tasks agree | |
| on a timetable and announce it on the mailing list. The important | |
| part of the timetable is the vote deadline, which specifies when | |
| the votes will be tallied and the new version can be built. | |
| Unless it is an <A HREF="#emergency">emergency</A>, the initial | |
| deadline should be at least three days after the announcement.</P> | |
| <P>The vote deadline can be moved if, using the same voting rules | |
| as for patches, there are enough votes and no vetos. The current deadline | |
| cannot be voted on.</P> | |
| <P>Group members can vote and comment on the patches under consideration | |
| as often as they want. The final vote (if votes are changed) of a person | |
| is assumed to invalidate previous votes.</P> | |
| <P>Votes are cast as follows; | |
| <DL COMPACT> | |
| <DT><STRONG>+1</STRONG></DT> | |
| <DD> can be given to a patch if the person has, | |
| <OL> | |
| <LI>read the patch header to see what problem it addresses</LI> | |
| <LI>successfully patched it into <STRONG>CURRENT</STRONG></LI> | |
| <LI>observed no bad side-effects resulting from the patch.</LI> | |
| </OL> | |
| </DD><P> | |
| <DT><STRONG>-1</STRONG></DT> | |
| <DD> is a veto on the patch. All vetos must come | |
| with an explanation of why the veto is appropriate. A veto with | |
| no explanation is void. | |
| </DD> | |
| </DL> | |
| <P>No veto can be overruled. If you disagree with the veto, you | |
| should lobby the person who cast the veto. Voters intending to veto | |
| a patch should make their opinions known to the group immediately, | |
| so that the problem can be remedied prior to the vote deadline, if | |
| possible.</P> | |
| <H3>Vote Collection</H3> | |
| <P>Votes are tallied by the vote coordinator as soon as the final | |
| vote deadline has passed. The results of the vote are then posted | |
| to the mailing list.</P> | |
| <P><STRONG>In order to be approved, an action item file must receive | |
| at least 3 positive votes and NO vetos.</STRONG></P> | |
| <P>Late <STRONG>+1</STRONG> votes can be ignored or accepted by the vote coordinator | |
| at his/her discretion. A late veto has no value: It can only be used | |
| to try to convince positive voters to rethink. If a positive voter changes | |
| to a veto, that veto is valid even though it is late.</P> | |
| <H3>Release Build and Announcement</H3> | |
| <P>After the vote coordinator gives the version builder the results, | |
| <STRONG>NEXT</STRONG> is created by applying the approved patches | |
| to <STRONG>CURRENT</STRONG>, making the changes called for by other approved | |
| (non-patch) action items, adding the approved action item descriptions | |
| to the changelog, and incrementing the version number.</P> | |
| <P><STRONG>NEXT</STRONG> is then uploaded by the version builder to hyperreal | |
| and placed in the pre-release directory (/httpd/dist) in compressed | |
| and gzip'd tar files that name the new version number. The availability | |
| of the new version is then announced on the private mailing list.</P> | |
| <P>After the version announcement, accidental mistakes made by the builder | |
| can be rectified without a vote, but must be announced to the group.</P> | |
| <P>Unless stated otherwise at the start of the vote session, <STRONG>NEXT</STRONG> | |
| is assumed to be intended for public release. If an objection to the | |
| public release is put forward, a majority decision vote will determine | |
| whether or not the release is made public. Unlike the other votes, | |
| a minority opinion cannot stop a public release.</P> | |
| <P>If <STRONG>NEXT</STRONG> is to be released publically, everyone on the mailing | |
| list should make the effort to download it and try it out. <STRONG>NEXT</STRONG> | |
| should not be publically released until 24 hours after it has been created | |
| and announced to the group.</P> | |
| <P>If one of the patches used to create <STRONG>NEXT</STRONG> is subsequently | |
| found to cause a more serious problem than those it fixed, this problem | |
| should be reported to the group and any public release postponed until | |
| a majority decision on how to rectify the problem is obtained.</P> | |
| <H3><A NAME="emergency">Emergency Patch Votes</A></H3> | |
| <P>In the event of an emergency patch/vote session to fix a security | |
| problem, the group may need to bypass the normal operating procedures | |
| described above in order to get a fix in place prior to any public | |
| announcement of the problem. Any group member may announce an emergency | |
| on the mailing list and is encouraged to do so immediately if notified | |
| about a severe problem. Any group member may veto an emergency in order | |
| to force it through the normal procedures.</P> | |
| <P>Patches created to solve an emergency problem may be linked directly | |
| from the Apache home page as soon as the patch has been created and | |
| tested by its author. However, this link must be removed or changed | |
| if the original patch is vetoed.</P> | |
| <P>The availability of an emergency patch may be announced to the public | |
| after 24hours or three +1 votes are given for the patch, whichever comes | |
| first.</P> | |
| <H2> | |
| <A NAME="lazy-voting"> | |
| Lazy-Voting Mode | |
| </A> | |
| </H2> | |
| <P> | |
| At some times, such as early in the devlopment cycle, it may be | |
| desirable to operate in what has been called "lazy" voting | |
| mode. This is essentially identical to the | |
| <A | |
| HREF="#patchvote" | |
| >formal voting process</A>, | |
| except that "silence gives assent" -- if 48 hours pass without | |
| a veto, a quorum of "aye" votes is assumed even not officially | |
| collected. | |
| </P> | |
| <P> | |
| Formal and lazy voting environments may co-exist; some topics may | |
| require formal votes whilst others may not. Common sense should be | |
| exercised, and potentially highly-controversial patches shouldn't | |
| be submitted under the lazy rules. | |
| </P> | |
| <P> | |
| When a patch submitter expects to take advantage of lazy voting mode, it | |
| <EM>must</EM> be explicitly stated in the patch submission. | |
| </P> | |
| <HR SIZE=6> | |
| <ADDRESS> | |
| Rob Hartill and Roy Fielding<BR> | |
| 3 September 1995 | |
| </ADDRESS> | |
| <ADDRESS> | |
| Modified 26 August 1997 by Ken Coar | |
| </ADDRESS> | |
| </BODY> | |
| </HTML> |