<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
  <meta charset="UTF-8">
  <title>Apache Mnemonic Bylaws</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <meta name="generator" content="Jekyll v2.4.0">
  <link rel="stylesheet" href="/css/font-awesome.min.css">
  <link rel="stylesheet" href="/css/screen.css">
  <link rel="icon" type="image/x-icon" href="/favicon.ico">
  <script src="/js/jquery-3.2.1.min.js"></script>
  <!--[if lt IE 9]>
  <script src="/js/html5shiv.min.js"></script>
  <script src="/js/respond.min.js"></script>
  <![endif]-->
  <script src="/js/screen.js"></script>
  <script type="text/javascript" src="/assets/javascripts/bundle.js" charset="utf-8"></script>
</head>


<body>
  <header role="banner">
  <nav class="mobile-nav show-on-mobiles">
    <ul>
  <li class="">
    <a href="/">Home</a>
  </li>
  <li class="">
    <a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
  </li>
  </li>
  <li class="">
    <a href="/downloads/">Downloads</a>
  </li>
  <li class="">
    <a href="/talks/">Talks</a>
  </li>
  <li class="">
    <a href="/news/">News</a>
  </li>
  <li class="current">
    <a href="/develop/">Develop</a>
  </li>
  <li class="">
    <a href="/help/">Help</a>
  </li>
</ul>

  </nav>
  <div class="grid">
    <div class="unit one-third center-on-mobiles">
      <h1>
        <a href="/">
          <span class="sr-only">Apache Mnemonic</span>
          <img src="/img/mnemonic_logo_v2.png" width="289" alt="Mnemonic Logo" class="logo">
        </a>
        <a  href="https://www.apache.org/events/current-event.html">
          <img src="https://www.apache.org/events/current-event-234x60.png"/>
        </a>
      </h1>
    </div>
    <nav class="main-nav unit two-thirds hide-on-mobiles">
      <ul>
  <li class="">
    <a href="/">Home</a>
  </li>
  <li class="">
    <a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
  </li>
  </li>
  <li class="">
    <a href="/downloads/">Downloads</a>
  </li>
  <li class="">
    <a href="/talks/">Talks</a>
  </li>
  <li class="">
    <a href="/news/">News</a>
  </li>
  <li class="current">
    <a href="/develop/">Develop</a>
  </li>
  <li class="">
    <a href="/help/">Help</a>
  </li>
</ul>

    </nav>
  </div>
  <!-- Return to Top -->
  <a href="#top" id="return-to-top"><i class="fa fa-chevron-up"></i></a>
</header>


  <section class="standalone">
  <div class="grid">

    <div class="unit whole">
      <article>
        <h1>Apache Mnemonic Bylaws</h1>
        <h2 id="introduction">Introduction</h2>

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

<p>mnemonic is a project of the Apache Software Foundation (ASF) and the foundation
holds the trademark on the name “mnemonic” and copyright on the combined
code base. The <a href="http://www.apache.org/foundation/faq.html">Apache Foundation
FAQ</a> and
<a href="http://www.apache.org/foundation/how-it-works.html">How-It-Works</a>
explain the operation and background of the foundation.</p>

<p>Apache has a <a href="http://www.apache.org/foundation/policies/conduct.html">code of
conduct</a> that
it expects its members to follow. In particular:</p>

<ul>
  <li>
    <p>Be <strong>open and welcoming</strong>. It is important that we grow and
encourage the community of users and developers for our project.</p>
  </li>
  <li>
    <p>Be <strong>collaborative</strong>. Working together on the open mailing lists and
bug database to make decisions helps the project grow.</p>
  </li>
  <li>
    <p>Be <strong>respectful</strong> of others. Everyone is volunteering their time and
efforts to work on this project. Please be respectful of everyone
and their views.</p>
  </li>
</ul>

<h2 id="roles-and-responsibilities">Roles and Responsibilities</h2>

<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>

<h3 id="users">Users</h3>

<p>The most important participants in the project are people who use our
software. The majority of our developers start out as users and guide
their development efforts from the user’s perspective.  Users
contribute to the Apache projects by providing feedback to developers
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>

<h3 id="contributors">Contributors</h3>

<p>Contributors include all of the volunteers who donate time, code,
documentation,
or resources to the mnemonic 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>

<h3 id="committers">Committers</h3>

<p>The project’s committers are responsible for the project’s technical
management. Committers have the right to commit to the project’s git
repository. Committers may cast binding votes on any technical
discussion.</p>

<p>Committer access is by invitation only and must be approved by
consensus approval of the active Project Management Committee (PMC)
members.</p>

<p>If a committer wishes to leave the project or does not contribute to
the project in any form for six months, the PMC may make them emeritus.
Emeritus committers lose their ability to commit code or cast binding
votes. An emeritus committer may
request reinstatement of commit access from the PMC. Such
reinstatement is subject to consensus approval of active PMC members.</p>

<p>All Apache committers are required to have a signed <a href="https://www.apache.org/licenses/icla.txt">Individual
Contributor License
Agreement</a> (ICLA) on file
with the Apache Software Foundation. There is a <a href="http://www.apache.org/dev/committers.html">Committer
FAQ</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 PMC. The form of contribution
is not limited to code. It can also include code review, helping out
users on the mailing lists, documentation, testing, etc.</p>

<h3 id="release-manager">Release Manager</h3>

<p>A Release Manager (RM) is a committer who volunteers to produce a
Release Candidate. The RM shall publish a Release Plan on the
dev mailing list stating the branch from which they intend to
make a Release Candidate.</p>

<h3 id="project-management-committee">Project Management Committee</h3>

<p>The Project Management Committee (PMC) for Apache mnemonic was created by
the Apache Board in February 2016 when mnemonic moved out of Intel’s github
repositories and became an incubated project at Apache.
The PMC is responsible to the board and
the ASF for the management and oversight of the Apache mnemonic
codebase. The responsibilities of the PMC include</p>

<ul>
  <li>
    <p>Deciding what is distributed as products of the Apache mnemonic
project. In particular all releases must be approved by the PMC.</p>
  </li>
  <li>
    <p>Maintaining the project’s shared resources, including the codebase
repository, mailing lists, and websites.</p>
  </li>
  <li>
    <p>Speaking on behalf of the project.</p>
  </li>
  <li>
    <p>Resolving license disputes regarding products of the project</p>
  </li>
  <li>
    <p>Nominating new PMC members and committers</p>
  </li>
  <li>
    <p>Maintaining these bylaws and other guidelines of the project</p>
  </li>
</ul>

<p>Membership of the PMC is by invitation only and must be approved by a
consensus approval of active PMC members.</p>

<p>A PMC member is considered
emeritus by their own declaration or by not contributing in any form
to the project for over six months. An emeritus member may request
reinstatement to the PMC. Such reinstatement is subject to consensus
approval of the active PMC members.</p>

<p>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 mnemonic) and has primary responsibility to the board for the
management of the project within the scope of the mnemonic PMC. The
chair reports to the board quarterly on developments within the mnemonic
project.</p>

<p>When the project desires a new PMC chair, the PMC votes to recommend a
new chair using <a href="http://wiki.apache.org/general/BoardVoting">Single Transferable
Vote</a> voting. The decision
must be ratified by the Apache board.</p>

<h2 id="decision-making">Decision Making</h2>

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

<h3 id="voting">Voting</h3>

<p>Decisions regarding the project are made by votes on the primary
project development mailing list (dev@mnemonic.apache.org). Where
necessary, PMC voting may take place on the private mnemonic 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. Voting may take five flavors:</p>

<ul>
  <li>
    <p><strong>+1</strong> – “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.”</p>
  </li>
  <li>
    <p><strong>+0</strong> – This vote indicates a willingness for the action under
consideration to go ahead. The voter, however, will not be able to
help.</p>
  </li>
  <li>
    <p><strong>0</strong> – The voter is neutral on the topic under discussion.</p>
  </li>
  <li>
    <p><strong>-0</strong> – 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.</p>
  </li>
  <li>
    <p><strong>-1</strong> – 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.</p>
  </li>
</ul>

<p>All participants in the mnemonic project are encouraged to show their
agreement for or against a particular action by voting, regardless of
whether their vote is binding. Nonbinding votes are useful for
encouraging discussion and understanding the scope of opinions within
the project.</p>

<h3 id="approvals">Approvals</h3>

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

<ul>
  <li>
    <p><strong>Consensus Approval</strong> – Consensus approval requires 3 binding +1
votes and no binding vetoes.</p>
  </li>
  <li>
    <p><strong>Lazy Consensus</strong> – Lazy consensus requires at least one +1 vote and
no -1 votes (‘silence gives assent’).</p>
  </li>
  <li>
    <p><strong>Lazy Majority</strong> – A lazy majority vote requires 3 binding +1 votes
 and more binding +1 votes than -1 votes.</p>
  </li>
  <li>
    <p><strong>Lazy 2/3 Majority</strong> – Lazy 2/3 majority votes requires at least 3
votes and twice as many +1 votes as -1 votes.</p>
  </li>
</ul>

<h3 id="vetoes">Vetoes</h3>

<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.  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 already been taken  must be reversed in a timely manner.</p>

<h3 id="actions">Actions</h3>

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

<h4 id="code-change">Code Change</h4>

<p>A change made to a codebase of the project requires <em>lazy consensus</em>
of active committers other than the author of the patch. The code can
be committed after the first +1.</p>

<h4 id="product-release">Product Release</h4>

<p>To make a release, the release manager creates a release candidate and
a vote requiring a <em>lazy majority</em> of the active PMC members is
required. Once the vote passes, the release candidate becomes an
official release.</p>

<h4 id="adoption-of-new-codebase">Adoption of New Codebase</h4>

<p>When the codebase for an existing, released product is to be replaced
with an alternative codebase, it requires a <em>lazy 2/3 majority</em> of PMC
members. This also covers the creation of new sub-projects and
submodules within the project.</p>

<h4 id="new-committer">New Committer</h4>

<p>When a new committer is proposed for the project, <em>consensus approval</em>
of the active PMC members is required.</p>

<h4 id="new-pmc-member">New PMC Member</h4>

<p>To promote a committer to a PMC member requires <em>consensus approval</em>
of active PMC members.</p>

<p>If the vote passes, the Apache Board must be notified to make the change
official.</p>

<h4 id="committer-removal">Committer Removal</h4>

<p>Removal of commit privileges requires a <em>lazy 2/3 majority</em> of active
PMC members.</p>

<h4 id="pmc-member-removal">PMC Member Removal</h4>

<p>Removing a PMC member requires a <em>lazy 2/3 majority</em> of active PMC
members, excluding the member in question.</p>

<p>If the vote passes, the Apache Board must be notified to make the change
official.</p>

<h4 id="modifying-bylaws">Modifying Bylaws</h4>

<p>Modifying this document requires a <em>lazy majority</em> of active PMC members.</p>

<h3 id="voting-timeframes">Voting Timeframes</h3>

<p>Votes are open for a minimum period of 72 hours to allow all active
voters time to consider the vote. For holiday weekends or conferences,
consider using a longer vote window. Votes relating to code changes are
not subject to a strict timetable but should be made as timely as
possible.</p>

      </article>
    </div>

    <div class="clear"></div>

  </div>
</section>


  <footer role="contentinfo">
    <p><div align="center">Apache Mnemonic, Mnemonic, Apache, and the Mnemonic logo are trademarks of The Apache Software Foundation.</div>
<div align="center"> Copyright &copy;&nbsp;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a></div></p>
</footer>

  <script>
  var anchorForId = function (id) {
    var anchor = document.createElement("a");
    anchor.className = "header-link";
    anchor.href      = "#" + id;
    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
    anchor.title = "Permalink";
    return anchor;
  };

  var linkifyAnchors = function (level, containingElement) {
    var headers = containingElement.getElementsByTagName("h" + level);
    for (var h = 0; h < headers.length; h++) {
      var header = headers[h];

      if (typeof header.id !== "undefined" && header.id !== "") {
        header.appendChild(anchorForId(header.id));
      }
    }
  };

  document.onreadystatechange = function () {
    if (this.readyState === "complete") {
      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
      if (!contentBlock) {
        return;
      }
      for (var level = 1; level <= 6; level++) {
        linkifyAnchors(level, contentBlock);
      }
    }
  };
</script>


</body>
</html>
