<!DOCTYPE html>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE- 2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<html>
  <head>
    <title>Apache BookKeeper - Apache BookKeeper Project Bylaws</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <link href="/archives/css/bootstrap.min.css" rel="stylesheet">
    <link href="/archives/css/bootstrap-responsive.min.css" rel="stylesheet">
    <link href="/archives/css/styles.css" rel="stylesheet">
  </head>
  <body>
    <header class="navbar navbar-inverse navbar-static-top" role="banner">
      <div class="container">
    	<div class="navbar-header hidden-xs hidden-sm">
    	  <a class="navbar-brand navbar-logo" href="/archives/"><img class="img-responsive" src="/archives/img/bookkeeper_blk40.png" alt="Bookkeeper Logo" /></a>
    	</div>
    	<div class="navbar-header">
    	  <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
    	  </button>
    	  <a class="navbar-brand" href="/archives/">Apache BookKeeper</a>
    	</div>
    	<nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
    	  <ul class="nav navbar-nav">
    	    <li><a href="/archives/releases.html">Download</a></li>

    	    <li class="dropdown">
    	      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Documentation<span class="caret"></span></a>
    	      <ul class="dropdown-menu" role="menu">
		<li><a href="/archives/docs/master">Latest (master)</a></li>
		<li><ul>
		    <li><a href="/archives/docs/master/apidocs">Java API docs</a></li>
		    <li><a href="/archives/docs/master/bookkeeperTutorial.html">Tutorial</a></li>
		    <li><a href="/archives/docs/master/bookkeeperConfig.html">Admin guide</a></li>
		</ul><li>
                <li><a href="/archives/docs/r4.4.0">Release 4.4.0</a></li>
                <li class="divider"></li>
                <li>Older releases</li>
                <li><a href="/archives/docs/r4.3.2">Release 4.3.2</a></li>
                <li><a href="/archives/docs/r4.3.1">Release 4.3.1</a></li>
                <li><a href="/archives/docs/r4.3.0">Release 4.3.0</a></li>
                <li><a href="/archives/docs/r4.2.4">Release 4.2.4</a></li>
                <li><a href="/archives/docs/r4.2.3">Release 4.2.3</a></li>
                <li><a href="/archives/docs/r4.2.2">Release 4.2.2</a></li>
                <li><a href="/archives/docs/r4.2.1">Release 4.2.1</a></li>
                <li><a href="/archives/docs/r4.2.0">Release 4.2.0</a></li>
                <li><a href="/archives/docs/r4.1.0">Release 4.1.0</a></li>
                <li><a href="/archives/docs/r4.0.0">Release 4.0.0</a></li>
              </ul>
            </li>
            
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Get Involved<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="/archives/lists.html">Mailing Lists</a></li>
                <li><a href="/archives/irc.html">IRC</a></li>
                <li><a href="/archives/svn.html">Version Control</a></li>
                <li><a href="https://issues.apache.org/jira/browse/BOOKKEEPER">Issue Tracker</a></li>
              </ul>
            </li>

            <li><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/Index">Wiki</a></li>
            <!--<li><a href="#">Hedwig</a></li>//-->
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Project Info<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="/archives/credits.html">Who are we?</a></li>
                <li><a href="/archives/bylaws.html">Bylaws</a></li>
                <li><a href="http://www.apache.org/licenses/">License</a></li>
                <li class="divider"></li>
                <li><a href="/archives/privacy.html">Privacy Policy</a></li>
                <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsership</a></li>
                <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
              </ul>
            </li>
          </ul>
          <script>
            (function() {
            var cx = '017580107654524087317:iqnsyimpydg';
            var gcse = document.createElement('script');
            gcse.type = 'text/javascript';
            gcse.async = true;
            gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
            '//www.google.com/cse/cse.js?cx=' + cx;
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(gcse, s);
            })();
          </script>
          
          <div class="navbar-form navbar-right visible-lg" id="googlebox">
            <gcse:searchbox-only></gcse:searchbox-only>
          </div>
        </nav>
      </div>
    </header>
    <div class="container">

 <p>This is version 1 of the bylaws. The BookKeeper <span class="caps">PMC </span>ratified these bylaws by a 2/3 majority vote on 2014/12/11.</p>

<h1>Introduction</h1>

<p>This document defines the bylaws under which the Apache BookKeeper project operates. It defines the roles and responsibilities of the project, who may vote, how voting works, how conflicts are resolved, etc.</p>

<p>BookKeeper is a project of the <a href="http://www.apache.org/">Apache Software Foundation</a>. The foundation holds the copyright on Apache code including the code in the BookKeeper codebase. The <a href="http://www.apache.org/foundation/faq.html">foundation <span class="caps">FAQ</span></a> explains the operation and background of the foundation.</p>

<p>BookKeeper is typical of Apache projects in that it operates under a set of principles, known collectively as the <a href="http://incubator.apache.org/learn/theapacheway.html">Apache Way</a>. If you are new to Apache development, please refer to the <a href="http://incubator.apache.org">Incubator project</a> for more information on how Apache projects operate.</p>

<h1>Roles and Responsibilities</h1>

<p>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.</p>

<h2>Users</h2>

<p>The most important participants in the project are people who use our software. The majority of our contributors start out as users and guide their development efforts from the user's perspective.</p>

<p>Users contribute to the Apache projects by providing feedback to contributors in the form of bug reports and feature suggestions. As well, users participate in the Apache community by helping other users on mailing lists and user support forums.</p>

<h2>Contributors</h2>

<p>All of the volunteers who are contributing time, code, documentation, or resources to the BookKeeper Project. A contributor that makes sustained, welcome contributions to the project may be invited to become a committer, though the exact timing of such invitations depends on many factors.</p>

<h2>Committers</h2>

<p>The project's committers are responsible for the project's technical management. Committers have access to a specified set of subproject's subversion repositories. Committers on subprojects may cast binding votes on any technical discussion regarding that subproject.</p>

<p>Committer access is by invitation only and must be approved by lazy consensus of the active <span class="caps">PMC </span>members. A Committer is considered emeritus by his or her own declaration or by not reviewing patches or committing patches to the project for over six months. An emeritus committer may request reinstatement of commit access from the <span class="caps">PMC </span>which must be approved by lazy consensus of the active <span class="caps">PMC </span>members.</p>

<p>Commit access can be revoked by a unanimous vote of all the active <span class="caps">PMC </span>members (except the committer in question if he or she is also a <span class="caps">PMC </span>member).</p>

<p>All Apache committers are required to have a signed <a href="http://www.apache.org/licenses/icla.txt">Contributor License Agreement</a> on file with the Apache Software Foundation. There is a <a href="http://www.apache.org/dev/committers.html">Committer <span class="caps">FAQ</span></a> which provides more details on the requirements for committers.</p>

<p>A committer who makes a sustained contribution to the project may be invited to become a member of the <span class="caps">PMC.</span> The form of contribution is not limited to code. It can also include code review, helping out users on the mailing lists, documentation, etc.</p>

<h2>Project Management Committee</h2>

<p>The <span class="caps">PMC </span>is responsible to the board and the <span class="caps">ASF </span>for the management and oversight of the Apache BookKeeper codebase. The responsibilities of the <span class="caps">PMC </span>include:</p>

<ul>
<li>Deciding what is distributed as products of the Apache BookKeeper project. In particular all releases must be approved by the <span class="caps">PMC.</span></li>
<li>Maintaining the project's shared resources, including the codebase repository, mailing lists, websites.</li>
<li>Speaking on behalf of the project.</li>
<li>Resolving license disputes regarding products of the project.</li>
<li>Nominating new <span class="caps">PMC </span>members and committers.</li>
<li>Maintaining these bylaws and other guidelines of the project.</li>
<li>Membership of the <span class="caps">PMC </span>is by invitation only and must be approved by a lazy consensus of active <span class="caps">PMC </span>members. A <span class="caps">PMC </span>member is considered emeritus by his or her own declaration or by not contributing in any form to the project for over six months. An emeritus member may request reinstatement to the <span class="caps">PMC, </span>which must be approved by a lazy consensus of active <span class="caps">PMC </span>members.</li>
</ul>

<p>Membership of the <span class="caps">PMC </span>can be revoked by an unanimous vote of all the active <span class="caps">PMC </span>members other than the member in question.</p>

<p>The chair of the <span class="caps">PMC </span>is appointed by the <span class="caps">ASF </span>board. The chair is an office holder of the Apache Software Foundation (Vice President, Apache BookKeeper) and has primary responsibility to the board for the management of the projects within the scope of the BookKeeper <span class="caps">PMC.</span> The chair reports to the board quarterly on developments within the BookKeeper project.</p>

<p>When the current chair of the <span class="caps">PMC </span>resigns, the <span class="caps">PMC </span>votes to recommend a new chair using lazy consensus, but the decision must be ratified by the Apache board</p>

<h1>Decision Making</h1>

<p>Within the BookKeeper project, different types of decisions require different forms of approval. For example, the previous section describes several decisions which require 'lazy consensus' approval. This section defines how voting is performed, the types of approvals, and which types of decision require which type of approval.</p>

<h2>Voting</h2>

<p>Decisions regarding the project are made by votes on the primary project development mailing list dev@bookkeeper.apache.org. Where necessary, <span class="caps">PMC </span>voting may take place on the private BookKeeper <span class="caps">PMC </span>mailing list private@bookkeeper.apache.org. 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. Voting may take four flavors.</p>

<table class="table" cellspacing="0"><tr><td>Vote</td><td>Meaning</td></tr><tr><td>+1</td><td>'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'.</td></tr><tr><td>+0</td><td>This vote indicates a willingness for the action under consideration to go ahead. The voter, however will not be able to help.</td></tr><tr><td>-0</td><td>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.</td></tr><tr><td>-1</td><td>This is a negative vote. On issues where consensus is required, this vote counts as a veto. 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.</td></tr></table>

<p>All participants in the BookKeeper 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 BookKeeper community. For <span class="caps">PMC </span>decisions, only the votes of <span class="caps">PMC </span>members are binding.</p>

<p>Voting can also be applied to changes already made to the BookKeeper codebase. These typically take the form of a veto (-1) in reply to the commit message sent when the commit is made. Note that this should be a rare occurrence. All efforts should be made to discuss issues when they are still patches before the code is committed.</p>

<h2>Approvals</h2>

<p>There are the types of approvals that can be sought. Different actions require different types of approvals.</p>

<table class="table" cellspacing="0"><tr><td>Approval Type</td><td>Definition</td></tr><tr><td>Consensus</td><td>For this to pass, all voters with binding votes must vote and there can be no binding vetoes (-1). Consensus votes are rarely required due to the impracticality of getting all eligible voters to cast a vote.</td></tr><tr><td>Lazy Consensus</td><td>Lazy consensus requires 3 binding + 1 votes and no binding vetoes.</td></tr><tr><td>Lazy Majority</td><td>A lazy majority vote requires 3 binding +1 votes and more binding +1 votes that -1 votes.</td></tr><tr><td>Lazy Approval</td><td>An action with lazy approval is implicitly allowed unless a -1 vote is received, at which time, depending on the type of action, either lazy majority or lazy consensus approval must be obtained.</td></tr><tr><td>2/3 Majority</td><td>Some actions require a 2/3 majority of active committers or <span class="caps">PMC </span>members to pass. Such actions typically affect the foundation of the project (e.g. adopting a new codebase to replace an existing product). The higher threshold is designed to ensure such changes are strongly supported. To pass this vote requires at least 2/3 of binding vote holders to vote +1.</td></tr></table>

<h2>Vetoes</h2>

<p>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.</p>

<p>If you disagree with a valid veto, you must lobby the person casting the veto to withdraw his or her veto. If a veto is not withdrawn, the action that has been vetoed must be reversed in a timely manner.</p>

<h2>Actions</h2>

<p>This section describes the various actions which are undertaken within the project, the corresponding approval required for that action and those who have binding votes over the action. It also specifies the<br />
minimum length of time that a vote must remain open, measured in business days. In general votes should not be called at times when it is known that interested members of the project will be unavailable.</p>

<table class="table" cellspacing="0"><tr><th>Action</th><th>Description</th><th>Approval</th><th>Binding Votes</th><th>Min. Length (days)</th></tr><tr><td>Code Change</td><td>A change made to a codebase of the project and committed by a committer. This includes source code, documentation, website content, etc.</td><td>Lazy approval (not counting the vote of the contributor), moving to lazy majority if a -1 is received</td><td>Active committer</td><td>1</td></tr><tr><td>Release Plan</td><td>Defines the timetable and actions for a release. The plan also nominates a Release Manager.</td><td>Lazy majority</td><td>Active committers</td><td>3</td></tr><tr><td>Product Release</td><td>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.</td><td>Lazy Majority</td><td>Active <span class="caps">PMC </span>members</td><td>3</td></tr><tr><td>Adoption of New Codebase</td><td>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.</td><td>2/3 majority</td><td>Active <span class="caps">PMC </span>members</td><td>6</td></tr><tr><td>New Committer or reinstatement</td><td>When a new committer is proposed for the project.</td><td>Lazy consensus</td><td>Active <span class="caps">PMC </span>members</td><td>3</td></tr><tr><td>New <span class="caps">PMC</span> Member or reinstatement</td><td>When a committer is proposed for the <span class="caps">PMC.</span></td><td>Lazy consensus</td><td>Active <span class="caps">PMC </span>members</td><td>3</td></tr><tr><td>Committer Removal</td><td>When removal of commit privileges is sought. Note: Such actions will also be referred to the <span class="caps">ASF </span>board by the <span class="caps">PMC </span>chair.</td><td>Consensus</td><td>Active <span class="caps">PMC </span>members (excluding the committer in question if a member of the <span class="caps">PMC</span>).</td><td>6</td></tr><tr><td><span class="caps">PMC</span> Member Removal</td><td>When removal of a <span class="caps">PMC </span>member is sought. Note: Such actions will also be referred to the <span class="caps">ASF </span>board by the <span class="caps">PMC </span>chair.</td><td>Consensus</td><td>Active <span class="caps">PMC </span>members (excluding the member in question).</td><td>6</td></tr><tr><td>Modifying Bylaws</td><td>Modifying this document.</td><td>2/3 majority</td><td>Active <span class="caps">PMC </span>members</td><td>6</td></tr></table>

    </div>
    <footer class="footer">
      <div class="container">
        <p class="text-muted">Copyright &copy; 2014 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.<br/>
	Apache BookKeeper, BookKeeper, Apache, Apache ZooKeeper, ZooKeeper, the Apache feather logo, and the Apache BookKeeper project logo are trademarks of The Apache Software Foundation.</p>
      </div>
    </footer>

    <script src="//code.jquery.com/jquery.js"></script>
    <script src="/archives/js/bootstrap.min.js"></script>
  </body>
</html>
