= Apache James Project guidelines
:navtitle: Guidelines

This document defines the guidelines for the Apache James Project. It includes definitions of how conflict is being
resolved by voting and who is able to vote.

The objective here is to avoid unnecessary conflicts 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 conflicts to be resolved.

== People, Places, and Things

=== Apache James Project Management Committee

The group of volunteers who are responsible for managing the Apache James Project. This includes deciding what is
distributed as products of the Apache James Project, maintaining the Project's shared resources, speaking on behalf of
the Project, resolving license disputes regarding Apache James products, nominating new PMC members or committers,
and establishing these guidelines.

Membership in the Apache James PMC is by invitation only and must be approved by consensus of the active Apache James
PMC members. A PMC member is considered inactive by their own declaration or by not contributing in any form to the
project for over six months. An inactive member can become active again by reversing whichever condition made them
inactive (i.e., by reversing their earlier declaration or by once again contributing toward the project's work).
Membership can be revoked by a unanimous vote of all the active PMC members other than the member in question.

=== Apache James Committers

The group of volunteers who are responsible for the technical aspects of the Apache James Project. This group has write
access to the appropriate source repositories and these volunteers may cast non-binding votes on any technical discussion.

Membership as a Committer is by invitation only and must be approved by consensus of the active Apache James PMC members.
A Committer is considered inactive by their own declaration or by not contributing in any form to the project for over
six months. An inactive member can become active again by reversing whichever condition made them inactive (i.e., by
reversing their earlier declaration or by once again contributing toward the project's work). Membership can be revoked
by a unanimous vote of all the active PMC members (except the member in question if they are a PMC member).

=== Mailing list

The Apache committers' primary mailing list for discussion of issues and changes related to the project
(xref:mailing-lists.adoc#_server_developer_list[server-dev@james.apache.org]). Subscription to the list is open, but
only subscribers can post directly to the list.

=== Private list

The Apache James Project's private mailing list for discussion of issues that are inappropriate for public discussion,
such as legal, personal, or security issues prior to a published fix. Subscription to the list is only opened to Apache
James PMC members and Apache Software Foundation Members.

Topics to be discussed on the private mailing list:

 - Discussion of board reports. PMC members need to report quarterly project activity to the Apache board of directors,
which is done through link:https://reporter.apache.org[reporter.apache.org]. Prior report submission, the draft should
be discussed on the private mailing list.
 - Discussions of link:https://community.apache.org/newcommitter.html[new committers, new PMCs], including proposition discussions, votes and process follow up.
 - Handling of xref:contributing.adoc#_reporting_security_vulnerabilities[security vulnerability reports], and CVE publication.

Other topics should be discussed/voted on server-dev instead.

=== GIT

All of the Apache James products are maintained in shared information repositories using GIT on git-wip-us.apache.org.
The Apache committers have write access to these repositories; everyone has read access via anonymous GIT.

== Consensus

As a community we are seeking link:https://community.apache.org/committers/decisionMaking.html[consensus] in our
decision making.

We actively rely on link:https://community.apache.org/committers/lazyConsensus.html[lazy consensus] for most of our
decisions, be them validating xref:contributing.adoc#_how_to_contribute_some_code[code changes], enacting
xref:contributing.adoc#_idea_or_design_proposals[design decisions].

All code modifications should achieve lazy consensus under the form of GitHub pull requests.

=== Voting

Some decisions might require to vote:

 - xref:release.adoc[releases]
 - establishing a new sub-project
 - retiring sub-projects
 - taking a decision when lazy consensus failed.

Note that we encourage discussing the issues prior to trigger a vote. That way bad surprises may be avoided ahead of time.

Any of the Apache James Committers may vote on any issue or action item. However, the only binding votes are those cast
by active members of the Apache James 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
contributors 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 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 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:

*+1*
Yes, agree, or the action should be performed. On some issues, this vote is only binding if the voter has tested the
action on their own system(s).

*+-0*
Abstain, no opinion, or I am happy to let the other group members decide this issue. An abstention may have detrimental
effects if too many people abstain.

*-1*
No. On issues where consensus is required, this vote counts as a veto. All vetoes must include an explanation of why the
veto is appropriate. A veto with no explanation is void. No veto can be overruled. If you disagree with the veto, you
should lobby the person who casts the veto. Voters intending to veto an action item should make their opinions known to
the group immediately, so that the problem can be remedied as early as possible.

An action item requiring consensus approval must receive at least 3 binding +1 votes and no vetoes. 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.

All votes must be either sent to the mailing list for that action item.

Votes are to remain open for 72 hours after which the developer who put forth the vote should tabulate the result and
send this to the mailing list. A developer should be sensitive to holidays that could dampen participation in the vote.

== Section for new committers

First congratulation for your involvement!

As part of the link:https://community.apache.org/newcommitter.html[process to become a committer], the following steps should have had been emailed to you:

 - Signing of link:https://www.apache.org/licenses/#clas[Contributor License Agreement]
 - Establishing an Apache profile with the Apache secretary.
 - Access will directly be granted on the link:https://issues.apache.org/jira/projects/JAMES[JIRA],
the ASF Git repository and the link:https://ci-builds.apache.org/job/james/job/ApacheJames/[ci].
 - Extra steps should be taken for xref:#_accessing_apache_github_as_a_committer[GitHub access].
 - A PMC should have had announced your nomination. If you have not already been doing it, we strongly
encourage you to write an email on public mailing list, presenting you, and your motivations toward
contributing on Apache James. A reply to the announcement would do the trick!

=== Accessing Apache GitHub as a Committer

- Verify you have a GitHub ID enabled with link:https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/[2FA]
- Enter your GitHub ID into your link:https://id.apache.org/[Apache ID profile]
- Merge your Apache and GitHub accounts using link:https://gitbox.apache.org/setup/[GitBox] (Apache Account Linking utility). You should see 3 green checks in GitBox.

Wait at least 30  minutes for an email inviting you to Apache GitHub Organization and accept invitation.

- After accepting the GitHub Invitation verify that you are a member of the link:https://github.com/orgs/apache/teams/james-committers[GitHub Apache James team].
