=  Management and Voting
:jbake-type: page
:jbake-status: published

==  Basic info

Apache has a few roles that relate to all Apache projects:

* Contributors http://www.apache.org/dev/contributors.html
* Committers http://www.apache.org/dev/committers.html
* PMC Members http://www.apache.org/dev/pmc.html

Despite there being various roles, we try extremely hard to keep the project flat.
All feedback is welcome, all people matter.
Everyone should feel very encouraged to participate regardless if they are new or old to the project.
If you are new and want to participate, please speak up, we'll always be happy to hear from you.

If anything there is a reverse hierarchy that is not unlike traffic laws;
pedestrians (users) always have the right of way, bikes (contributors) yield to pedestrians, automobiles (committers) yield to bikes and pedestrians.
Depending on what you're driving you have a greater responsibility to those around you.
Be careful not to run anyone over.

==  PMC

We don't focus on the PMC in this project so many may not have a clear concept of it.
Every project at Apache has a PMC which at minimum represents Apache from a legal perspective.
The people on it are expected to provide legal oversight, making sure that the legal entity that is Apache has awareness enough to legally protect the code that leaves it's doors, the users that use it, and the people who create it.
This means making sure any contributions going into the project are clean and can be legally projected and making sure any binaries going out meet the legal requirements so they as well can be legally protected.
It's a lot of watching all commits, keeping an eye on doc contributions, ensuring CLAs are on file for anything of substantial size, screening release binaries and source for headers, license files, making sure any binaries being widely distributed have been voted on, etc., etc.
If you are on the PMC and you vote on a release it means _you_ have done all these things to the best of your ability.
If you have not, you either should not be on the PMC or should not vote +1.

Being on the PMC is a service, not an achievement.
Therefore if someone is added to the PMC you should not say "congratulations", but simply "thank you."  It does not mean anything more than they have the time to help us function legally.
If someone is perpetually too busy to provide legal oversight and steps down or goes emeritus, it does not mean they are leaving, just that they are too busy for the extra legal responsibility.

Some projects go beyond that and use the PMC as the decision makers and leaders of the project.
We do not.
We make all our decisions on the dev list.
We don't even focus on who is a committer and who is not, which is a major factor of our family-like community and general "everyone is welcome and matters" spirit.
If someone doesn't feel like their input matters till they are a committer, or any other status, we've done something wrong.
Fortunately, this is one of our strongest attributes and part of the magic that is this community.

==  FAQ

===  Q. Whose votes count?

Apache requires a minimum of three +1 PMC votes which have legal significance to Apache as a corporation.
That said, all votes from the community are significant to the project and decision making and any -1 is cause for pause and discussion.
We frequently encourage and welcome votes from anyone in the community regardless of status.

===  Q. Voting on people: Is it hard to vote -1 in public / Can someone get their feelings hurt ?

Yes and yes.
Voting in public requires greater care and sensitivity on behalf of everyone;
the vote proposer, the voters, and the votee.
Prior to voting the proposer should create several opportunities for feedback, hopefully positive and constructive.
Community members with concerns should get involved early and actively mentor potential committers, taking opportunities for feedback as queues to get involved, encourage, and work through areas where they see said person needs more help.
The contributor should actively solicit and welcome all help and feedback and encouragement and feel welcome to give it in return.
Do not rush;
all parties (proposer, voters, and votee) have work to do in grooming contributors, etc., and that work takes time.
Votes that result in one or more -1s should not be seen as a failure of any one individual and instead be seen as an opportunity for all parties (proposer, voters, and votee) to make improvements, be more active, and give the process more time.
