---
title: Apache CloudStack Project Bylaws
---

<div class="row">

<div class="col-lg-12">

<div class="page-header">

<h1 id="indicators">Apache CloudStack: Project Bylaws</h1>

</div>

</div>

</div>

# 1. Introduction

1.1. This document defines the bylaws under which the Apache CloudStack project
operates. It defines the roles and responsibilities of the project, who may
vote, how voting works, how conflicts are resolved and specifies the rules for
specific project actions.

1.2. CloudStack is a project of the Apache Software Foundation. The foundation
holds the trademark on the name "CloudStack" and copyright on Apache code
including the code in the CloudStack codebase. The foundation FAQ explains the
operation and background of the foundation.

1.3. CloudStack operates under a set of principles known collectively as the
"Apache Way". Those principles are: Transparency, consensus, non-affiliation,
respect for fellow developers, and meritocracy, in no specific order.

# 2. Roles and Responsibilities

Apache projects define a set of roles with associated rights and
responsibilities. These roles govern what tasks an individual may perform
within the project. The roles are defined in the following sections:

2.1. Users

The most important participants in the project are people who use our software.
Users can contribute to the Apache projects by providing feedback to developers
in the form of bug reports and feature suggestions. As well, users can
participate in the Apache community by helping other users on mailing lists and
user support forums. Users who participate in the project through any mechanism
are considered to be Contributors.

2.2. Contributors

Contributors are all of the volunteers who are contributing time, code,
documentation, or resources to the CloudStack Project. Contributions are not
just code, but can be any combination of documentation, testing, user support,
code, code reviews, bug reporting, community organizing, project marketing, or
numerous other activities that help promote and improve the Apache CloudStack
project and community.

A Contributor that makes sustained, welcome contributions to the project may be
invited to become a Committer by the PMC. The invitation will be at the
discretion of a supporting PMC member.

2.3. Committers

The project's Committers are responsible for the project's technical
management. Committers have access to all project source control repositories.
Committers may cast binding votes on any technical discussion regarding the
project (or any sub-project).

2.3.1. Committer access is by invitation only and must be approved by a lazy
consensus of the active PMC members.

2.3.2. All Apache Committers are required to have a signed Individual
Contributor License Agreement (ICLA) on file with the Apache Software
Foundation. There is a Committer FAQ which provides more details on the
requirements for Committers at Apache.

2.3.3. A Committer who makes a sustained contribution to the project may be
invited by the PMC to become a member of the PMC, after approval of the PMC.

2.4. Project Management Committee

The Project Management Committee (PMC) for Apache CloudStack is responsible to
the board and the ASF for the management and oversight of the Apache CloudStack
codebase.

2.4.1. The responsibilities of the PMC include:

2.4.1.1. Fostering, supporting and growing the project's community.

2.4.1.2. Deciding what is distributed as products of the Apache CloudStack
project. In particular all releases must be approved by the PMC.

2.4.1.3. Maintaining the project's shared resources, including the codebase
repository, mailing lists, websites.

2.4.1.4. Speaking on behalf of the project.

2.4.1.5. Resolving license disputes regarding products of the project.

2.4.1.6. Nominating new PMC members and committers.

2.4.1.7. Maintaining these bylaws and other guidelines of the project.

2.4.1.8. Managing and protecting the project's trademarks and brand.

2.4.2. Membership of the PMC is by invitation only and must be approved by a
lazy consensus of active PMC members.

2.4.3. A PMC member is considered "emeritus" by their own declaration. An
emeritus member may request reinstatement to the PMC. Such reinstatement is
subject to lazy consensus of the active PMC members.

2.4.4. "Active PMC members" are all non-emeritus PMC members.

2.4.4. The chair of the PMC is appointed by the ASF board. The chair is an
office holder of the Apache Software Foundation (Vice President, Apache
CloudStack) and has primary responsibility to the board for the management of
the projects within the scope of the CloudStack PMC. The chair reports to the
board quarterly on developments within the CloudStack project. The chair must
be an active PMC member.

2.4.5. If the current chair of the PMC resigns, or the term of the current
chair expires, the PMC will attempt to reach consensus on a new chair through
discussion, confirming that consensus via a vote to recommend a new chair using
a lazy 2/3 majority voting method. In the case that consensus is not achieved,
the PMC will vote for a chair using Single Transferable Vote (STV) voting. Due
to the fact that the discussions are about specific individuals, this vote
would be held on the cloudstack-private mailing list. The decision must be
ratified by the Apache board.

2.4.6. The role of PMC chair will have a one year term.  The intention of this
term is to allow for a rotation of the role amongst the PMC members.  This
intention does not prohibit the PMC from selecting the same chair to serve
consecutive terms.

# 3. Decision Making

This section defines how voting is performed, the types of approvals, and which
types of decision require which type of approval.

3.1. Voting

3.1.1. Decisions regarding the project are made by votes on the primary project
development mailing list (dev@cloudstack.apache.org). Where necessary, PMC
voting may take place on the private CloudStack PMC mailing list. Votes are
clearly indicated by subject line starting with \[VOTE\]. Votes may contain
multiple items for approval and these should be clearly separated. Voting is
carried out by replying to the vote mail.

3.1.2. Voting may take four flavors:

3.1.2.1. \+1 "Yes," "Agree," or "the action should be performed." In general,
this vote also indicates a willingness on the behalf of the voter in "making it
happen"

3.1.2.2. \+0 This vote indicates a willingness for the action under
consideration to go ahead. The voter, however will not be able to help.

3.1.2.3. \-0 This vote indicates that the voter does not, in general, agree
with the proposed action but is not concerned enough to prevent the action
going ahead.

3.1.2.4. \-1 This is a negative vote. On issues where consensus is required,
this vote counts as a veto if binding. All vetoes must contain an explanation
of why the veto is appropriate. Vetoes with no explanation are void. It may
also be appropriate for a \-1 vote to include an alternative course of action.

3.1.3. All participants in the CloudStack project are encouraged to show their
agreement with or against a particular action by voting. For technical
decisions, only the votes of active committers are binding. Non-binding votes
are still useful for those with binding votes to understand the perception of
an action in the wider CloudStack community. For PMC decisions, only the votes
of PMC members are binding.

3.1.4. Voting can also be applied to changes made to the CloudStack codebase.
These typically take the form of a veto (-1) in reply to the commit message
sent when the commit is made.

3.1.5. Non-binding \-1 votes are not considered to be vetos for any decision.

3.2. Approvals

There are three types of approvals that can be sought. Section 3.4 describes
actions and types of approvals needed for each action.

3.2.1. Lazy Consensus - Lazy consensus requires 3 binding \+1 votes and no
binding \-1 votes.

3.2.2. Lazy Majority - A lazy majority vote requires 3 binding \+1 votes and
more binding \+1 votes than binding \-1 votes.

3.2.3. Lazy 2/3 Majority - Lazy 2/3 majority votes requires at least 3 binding
votes and twice as many binding \+1 votes as binding \-1 votes.

3.3. Vetoes

3.3.1. Vetoes are only possible in a lazy consensus vote.

3.3.2. A valid, binding veto cannot be overruled. If a veto is cast, it must be
accompanied by a valid reason explaining the reasons for the veto. The validity
of a veto, if challenged, can be confirmed by anyone who has a binding vote.
This does not necessarily signify agreement with the veto - merely that the
veto is valid.

3.3.3. If you disagree with a valid veto, you must lobby the person casting the
veto to withdraw their veto. If a veto is not withdrawn, any action that has
been vetoed must be reversed in a timely manner.

3.4. Actions

This section describes the various actions which are undertaken within the
project, the roles that have the right to start a vote on the action, the
corresponding approval required for that action and those who have binding
votes over the action.

3.4.1. Technical Decisions

A technical decision is any decision that involves changes to the source code
that we distribute in our official releases.

Technical decisions should normally be made by the entire community using
discussion-lead consensus gathering, and not through formal voting.

Technical decisions must be made on the project development mailing list.

During the consensus gathering process, technical decisions may be vetoed by
any Committer with a valid reason.

If a formal vote is started for a technical decision, the vote will be held as
a lazy consensus of active committers.

Any user, contributor, committer, or PMC member can initiate a technical
decision making process.

3.4.2. Non-Technical Decisions

A non-technical decisions is any decision that does not involve changes to the
source code that we distribute in our official releases (excluding questions of 
trademark usage).

Non-technical decisions should normally be made by the entire community using
discussion-lead consensus-building, and not through formal voting.

Non-technical decisions can be made on whichever project mailing list is most
appropriate.

Non-technical decisions cannot be vetoed, but if there is strong opposition
a formal vote can be used to resolve the dispute.

If a formal vote is started for a non-technical decision, the vote will be held
as a lazy 2/3 majority of active committers.

Any user, contributor, committer, or PMC member can initiate a non-technical
decision making process.

3.4.3. Release Plan

Defines the timetable and work items for a release. The plan also nominates a
Release Manager.

A lazy majority of active committers is required for approval.

Any active committer or PMC member may call a vote. The vote must occur on the
project development mailing list.

3.4.4. Product Release

When a release of one of the project's products is ready, a vote is required to
accept the release as an official release of the project.

Lazy Majority of active PMC members is required for approval.

Any active committer or PMC member may call a vote. The vote must occur on the
project development mailing list.

3.4.5. Adoption of New Codebase

When the codebase for an existing, released product is to be replaced with an
alternative codebase. If such a vote fails to gain approval, the existing code
base will continue.

This also covers the creation of new sub-projects within the project.

Lazy 2/3 majority of active PMC members.

Any active committer or PMC member may call a vote. The vote must occur on the
project development mailing list.

3.4.6. New Committer

When a new committer is proposed for the project.

Lazy consensus of active PMC members.

Any active PMC member may call a vote. The vote must occur on the PMC private
mailing list.

3.4.7. New PMC Member

When a committer is proposed for the PMC.

Lazy consensus of active PMC members.

Any active PMC member may call a vote. The vote must occur on the PMC private
mailing list.

3.4.8. Committer Removal

When removal of commit privileges is sought. Note: Such actions will also be
referred to the ASF board by the PMC chair

Lazy 2/3 majority of active PMC members (excluding the committer in question if
a member of the PMC).

Any active PMC member may call a vote. The vote must occur on the PMC private
mailing list.

3.4.9. PMC Member Removal

When removal of a PMC member is sought. Note: Such actions will also be
referred to the ASF board by the PMC chair.

Lazy 2/3 majority of active PMC members (excluding the member in question)

Any active PMC member may call a vote. The vote must occur on the PMC private
mailing list.

3.4.10. Modifying Bylaws

Modifying this document.

Lazy majority of active PMC members

Any active committer or PMC member may call a vote. The vote must occur on the
project development mailing list.

3.4.11. Trademark Usage Approvals

Our project maintains a formal Trademark Usage Guidelines document, which
serves as a additive reference to the Apache Software Foundation's trademark
policies. The Apache CloudStack PMC has had approval authority delegated to it
for requests from third parties to use our trademarks. It is the PMC's
responsibility to provide these approvals, and to ensure that any requests
are in compliance with both the project and the foundation's trademark
usage policies.

The CloudStack Trademark Guidelines specify how a requestor is expected to
request permission for usage of the trademarks.

The process of approval will typically be as follows:

* A request is made that includes the required information for the PMC to make 
a decision.
* A PMC member reviews the request and provides an initial acknowledgement 
response to the requester.
* If no PMC member raises a concern after 72 hours, the requester can assume 
approval.

In situations where a concern is raised, the PMC member is expected inform the
requster that there is some discussion that needs to be had prior to approval
from the PMC.  This notice serves to end the assumed approval after 72 hours.  

After raising a concern, the PMC member in question is required to forward the
concern to private@cloudstack.apache.org, explaining the issue that they have
with the request.  The use of private@cloudstack.apache.org for discussing the
request is to allow the PMC to deliberate without confusing the requester, and
to ensure that a formal approval or denial is clear at the end of the
discusion.

The PMC will then attempt to achieve consensus on how the request for approval
will be answered.  The requester may be asked for more information to help the
PMC make a decision, may be asked to make a change to the proposal in order to
gain approval, or may have their request be denied.

If consensus is not achieved within the PMC by discussion, then a formal VOTE
can be called as a Lazy 2/3 majority of voting PMC members.

Votes related to trademark usage approvals may be performed on the
private@cloudstack.apache.org mailing list.

3.5. Voting Timeframes

Formal votes are open for a period of at least 72 hours to allow all active
voters time to consider the vote.
