The information on these pages may be out of date, or may refer to
resources that have moved or have been made read-only.
For more information please refer to the Apache Attic
This document defines the guidelines for the Apache Harmony Project. It includes definitions of how conflict is resolved by voting, who is able to vote, and the procedures to follow for proposing and making changes to the Apache products.
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.
Any of the Apache Developers may vote on any issue or action item. However, the only binding votes are those cast by active members of the Apache Harmony PMC; if the vote is about a change to source code or documentation, the primary author of what is being changed may also cast a binding vote on that issue. All other votes are non-binding. All developers are encouraged to participate in decisions, but the decision itself is made by those who have been long-time contributors to the project. In other words, the Apache Harmony Project is a minimum-threshold meritocracy.
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 Harmony Project. Since we are all volunteers, members often become inactive for periods of time in order to take care of their "real jobs" or devote more time to other projects. It is therefore unlikely that the entire group membership will vote on every issue. To account for this, all voting decisions are based on a minimum quorum.
Each vote can be made in one of three flavors:
An action item requiring consensus approval must receive at least 3 binding +1 votes and no vetos. An action item requiring majority approval must receive at least 3 binding +1 votes and more +1 votes than -1 votes (i.e., a majority with a minimum quorum of three positive votes). All other action items are considered to have lazy approval until someone votes -1, after which point they are decided by either consensus or a majority vote, depending upon the type of action item.
Votes are tallied within the STATUS file, adjacent to the action item under vote. All votes must be sent to the mailing list.
All product changes to the currently active repository are subject to lazy consensus. All product changes to a prior-branch (old version) repository require consensus before the change is committed.
Ideas must be review-then-commit; patches can be commit-then-review. With a commit-then-review process, we trust that the developer doing the commit has a high degree of confidence in the change. Doubtful changes, new features, and large-scale overhauls need to be discussed before being committed to a repository. Any major change must receive consensus approval on the mailing list before being committed. For detailed instructions on reporting, resolving and closing issues, refer to Good Issue Resolution Guideline.
Each developer is responsible for notifying the mailing list and adding an action item to STATUS when they have an idea for a new feature or major change to propose for the product. The distributed nature of the Apache project requires an advance notice of 48 hours in order to properly review a major change -- consensus approval of either the concept or a specific patch is required before the change can be committed. Note that a committer might veto the concept (with an adequate explanation), but later rescind that veto if a specific patch satisfies their objections. No advance notice is required to commit singular bug fixes.
Related changes should be committed as a group, or very closely together. Half-completed projects should not be committed unless doing so is necessary to pass the baton to another developer who has agreed to complete the project in short order. All code changes must be successfully compiled on the developer's platform before being committed.
The current source code tree should be capable of complete compilation at all times. However, it is sometimes impossible for a developer on one platform to avoid breaking some other platform when a change is committed, particularly when completing the change requires access to a special development tool on that other platform. If it is anticipated that a given change will break some other platform, the committer must indicate that in the commit log.
The committer is responsible to follow the Apache Harmony procedure for any third-party code or documentation they commit to the repository. All software committed to the repository must be covered by the Apache LICENSE or contain a copyright and license that allows redistribution under the same conditions as the Apache LICENSE.
A committed change must be reversed if it is vetoed by one of the voting committers and the veto conditions cannot be immediately satisfied by the equivalent of a "bug fix" commit. The veto must be rescinded before the change can be included in any public release.
When a specific change to the software is proposed for discussion or
voting on the mailing list, it should be presented in the form of input
to the patch command. When sent to the mailing list, the message
should contain a Subject beginning with
[PATCH] and a
distinctive one-line summary corresponding to the action item for that
patch. Afterwards, the patch summary in the STATUS file should be
updated to point to the Message-ID of that message.
The patch should be created by using the
command from the original software file(s) to the modified software
diff -u http_main.c.orig http_main.c >> patchfile.txt
cvs diff -u http_main.c >> patchfile.txt
All patches necessary to address an action item should be concatenated within a single patch message. If later modification of the patch proves necessary, the entire new patch should be posted and not just the difference between two patches. The STATUS file entry should then be updated to point to the new patch message.
The completed patchfile should produce no errors or prompts when the command,
patch -s < patchfile
is issued in the target repository.