CINXE.COM

PEP 8012 – The Community Governance Model | peps.python.org

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="color-scheme" content="light dark"> <title>PEP 8012 – The Community Governance Model | peps.python.org</title> <link rel="shortcut icon" href="../_static/py.png"> <link rel="canonical" href="https://peps.python.org/pep-8012/"> <link rel="stylesheet" href="../_static/style.css" type="text/css"> <link rel="stylesheet" href="../_static/mq.css" type="text/css"> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" media="(prefers-color-scheme: light)" id="pyg-light"> <link rel="stylesheet" href="../_static/pygments_dark.css" type="text/css" media="(prefers-color-scheme: dark)" id="pyg-dark"> <link rel="alternate" type="application/rss+xml" title="Latest PEPs" href="https://peps.python.org/peps.rss"> <meta property="og:title" content='PEP 8012 – The Community Governance Model | peps.python.org'> <meta property="og:description" content="This PEP proposes a new model of Python governance based on consensus and voting by the Python community. This model relies on workgroups to carry out the governance of the Python language. This governance model works without the role of a centralized s..."> <meta property="og:type" content="website"> <meta property="og:url" content="https://peps.python.org/pep-8012/"> <meta property="og:site_name" content="Python Enhancement Proposals (PEPs)"> <meta property="og:image" content="https://peps.python.org/_static/og-image.png"> <meta property="og:image:alt" content="Python PEPs"> <meta property="og:image:width" content="200"> <meta property="og:image:height" content="200"> <meta name="description" content="This PEP proposes a new model of Python governance based on consensus and voting by the Python community. This model relies on workgroups to carry out the governance of the Python language. This governance model works without the role of a centralized s..."> <meta name="theme-color" content="#3776ab"> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-sun-half" viewBox="0 0 24 24" pointer-events="all"> <title>Following system colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="9"></circle> <path d="M12 3v18m0-12l4.65-4.65M12 14.3l7.37-7.37M12 19.6l8.85-8.85"></path> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24" pointer-events="all"> <title>Selected dark colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24" pointer-events="all"> <title>Selected light colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> </svg> <script> document.documentElement.dataset.colour_scheme = localStorage.getItem("colour_scheme") || "auto" </script> <section id="pep-page-section"> <header> <h1>Python Enhancement Proposals</h1> <ul class="breadcrumbs"> <li><a href="https://www.python.org/" title="The Python Programming Language">Python</a> &raquo; </li> <li><a href="../pep-0000/">PEP Index</a> &raquo; </li> <li>PEP 8012</li> </ul> <button id="colour-scheme-cycler" onClick="setColourScheme(nextColourScheme())"> <svg aria-hidden="true" class="colour-scheme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-light"><use href="#svg-sun"></use></svg> <span class="visually-hidden">Toggle light / dark / auto colour theme</span> </button> </header> <article> <section id="pep-content"> <h1 class="page-title">PEP 8012 – The Community Governance Model</h1> <dl class="rfc2822 field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd">Łukasz Langa &lt;lukasz&#32;&#97;t&#32;python.org&gt;</dd> <dt class="field-even">Status<span class="colon">:</span></dt> <dd class="field-even"><abbr title="Formally declined and will not be accepted">Rejected</abbr></dd> <dt class="field-odd">Type<span class="colon">:</span></dt> <dd class="field-odd"><abbr title="Non-normative PEP containing background, guidelines or other information relevant to the Python ecosystem">Informational</abbr></dd> <dt class="field-even">Topic<span class="colon">:</span></dt> <dd class="field-even"><a class="reference external" href="../topic/governance/">Governance</a></dd> <dt class="field-odd">Created<span class="colon">:</span></dt> <dd class="field-odd">03-Oct-2018</dd> </dl> <hr class="docutils" /> <section id="contents"> <details><summary>Table of Contents</summary><ul class="simple"> <li><a class="reference internal" href="#pep-rejection">PEP Rejection</a></li> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#rejected-models">Rejected Models</a><ul> <li><a class="reference internal" href="#let-s-have-another-bdfl">Let’s have another BDFL</a><ul> <li><a class="reference internal" href="#challenge-there-is-no-other-guido">Challenge: There is no other Guido</a></li> <li><a class="reference internal" href="#risk-malevolent-dictator-for-life">Risk: Malevolent Dictator For Life</a></li> <li><a class="reference internal" href="#observation-we-don-t-actually-need-a-dictator">Observation: We don’t actually need a Dictator</a></li> <li><a class="reference internal" href="#risk-the-warm-and-fuzzy-feeling-of-a-vague-proposal">Risk: The warm and fuzzy feeling of a vague proposal</a></li> </ul> </li> <li><a class="reference internal" href="#let-s-have-a-council">Let’s have a Council</a><ul> <li><a class="reference internal" href="#risk-dilution-and-confusion">Risk: Dilution and confusion</a></li> <li><a class="reference internal" href="#risk-internal-conflict">Risk: Internal Conflict</a></li> </ul> </li> </ul> </li> <li><a class="reference internal" href="#motivation">Motivation</a></li> <li><a class="reference internal" href="#rationale">Rationale</a></li> <li><a class="reference internal" href="#specification">Specification</a><ul> <li><a class="reference internal" href="#key-people-and-their-functions">Key people and their functions</a><ul> <li><a class="reference internal" href="#the-core-team">The core team</a></li> <li><a class="reference internal" href="#experts">Experts</a></li> <li><a class="reference internal" href="#moderators">Moderators</a></li> </ul> </li> <li><a class="reference internal" href="#regular-decision-process">Regular decision process</a></li> <li><a class="reference internal" href="#controversial-decision-process">Controversial decision process</a><ul> <li><a class="reference internal" href="#pep-enhanced">PEP, Enhanced</a></li> <li><a class="reference internal" href="#very-controversial-peps">Very controversial PEPs</a></li> <li><a class="reference internal" href="#revisiting-deferred-and-rejected-peps">Revisiting deferred and rejected PEPs</a></li> </ul> </li> <li><a class="reference internal" href="#other-voting-situations">Other Voting Situations</a><ul> <li><a class="reference internal" href="#nominating-a-new-core-developer">Nominating a new core developer</a></li> <li><a class="reference internal" href="#votes-of-no-confidence">Votes of no confidence</a></li> </ul> </li> <li><a class="reference internal" href="#voting-mechanics">Voting Mechanics</a></li> </ul> </li> <li><a class="reference internal" href="#omissions">Omissions</a></li> <li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> </details></section> <section id="pep-rejection"> <h2><a class="toc-backref" href="#pep-rejection" role="doc-backlink">PEP Rejection</a></h2> <p><a class="pep reference internal" href="../pep-8012/" title="PEP 8012 – The Community Governance Model">PEP 8012</a> was rejected <a class="reference external" href="https://discuss.python.org/t/python-governance-vote-december-2018-results/546/">by a core developer vote</a> described in <a class="pep reference internal" href="../pep-8001/" title="PEP 8001 – Python Governance Voting Process">PEP 8001</a> on Monday, December 17, 2018.</p> <p><a class="pep reference internal" href="../pep-8016/" title="PEP 8016 – The Steering Council Model">PEP 8016</a> and the governance model it describes were chosen instead.</p> </section> <section id="abstract"> <h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2> <p>This PEP proposes a new model of Python governance based on consensus and voting by the Python community. This model relies on workgroups to carry out the governance of the Python language. This governance model works without the role of a centralized singular leader or a governing council.</p> <p>It describes how, when, and why votes are conducted for decisions affecting the Python language. It also describes the criteria for voting eligibility.</p> <p>Should this model be adopted, it will be codified in <a class="pep reference internal" href="../pep-0013/" title="PEP 13 – Python Language Governance">PEP 13</a>.</p> <p>This model can be affectionately called “The Least Worst Governance Model” by its property that while far from ideal, it’s still the most robust one compared to the others. Since avoiding issues inherent to the other models is a paramount feature of the Community Governance Model, we start the discussion a bit unusually: by rejecting the other models.</p> </section> <section id="rejected-models"> <h2><a class="toc-backref" href="#rejected-models" role="doc-backlink">Rejected Models</a></h2> <section id="let-s-have-another-bdfl"> <h3><a class="toc-backref" href="#let-s-have-another-bdfl" role="doc-backlink">Let’s have another BDFL</a></h3> <p>This seems like a very attractive idea because it’s a model we know. One Dictator to rule us all.</p> <section id="challenge-there-is-no-other-guido"> <h4><a class="toc-backref" href="#challenge-there-is-no-other-guido" role="doc-backlink">Challenge: There is no other Guido</a></h4> <p>There is no other single person with the unique skillset of Guido van Rossum. Such a person would need to have the technical, communication, and organizational experience to lead the project successfully. Specifically, the person would need to:</p> <ul class="simple"> <li>set and articulate a cohesive long-term vision for the project;</li> <li>possess deep technical understanding of the runtime, the standard library, and the wider third-party library context;</li> <li>negotiate and resolve contentious issues in ways acceptable to all parties involved;</li> <li>have free time and possess the energy to sustain continuous involvement over periods of years.</li> </ul> </section> <section id="risk-malevolent-dictator-for-life"> <h4><a class="toc-backref" href="#risk-malevolent-dictator-for-life" role="doc-backlink">Risk: Malevolent Dictator For Life</a></h4> <p>What if we got somebody who is not as well suited for the position as our first Dictator? There are possible scenarios in which this could lead to severe consequences.</p> <p>The Dictator could gather insufficient trust due to missing technical depth, a “close” election, inconsistent vision, poor ability to deal with conflict or burnout, and so on. Given a controversial decision decided by the Dictator in a specific way, a Dictator with insufficient trust may cause a split within the project.</p> <p>The Dictator setup invites lobbying concentrated on a single person. Unless that person is immune to leverage due to wealth, health, and a stable life situation, this poses risk of malicious actors steering the project from behind the curtain.</p> <p>Finally, the Dictator coming from a particular part of the community may put more weight on the needs and interests of that particular part of the user base, alienating others.</p> </section> <section id="observation-we-don-t-actually-need-a-dictator"> <h4><a class="toc-backref" href="#observation-we-don-t-actually-need-a-dictator" role="doc-backlink">Observation: We don’t actually need a Dictator</a></h4> <p>The irony of the Dictator model is that it requires an election. Better yet, we need an election to even decide on which governance model to use.</p> <p>If we are already able solve two problems of this gravity via the community process, why not keep using it for all subsequent decisions?</p> </section> <section id="risk-the-warm-and-fuzzy-feeling-of-a-vague-proposal"> <h4><a class="toc-backref" href="#risk-the-warm-and-fuzzy-feeling-of-a-vague-proposal" role="doc-backlink">Risk: The warm and fuzzy feeling of a vague proposal</a></h4> <p>One last thing worth mentioning is that when a BDFL model is suggested, it’s easy to bypass the criticism above by not mentioning <em>who</em> the BDFL should be. That way the hopeful reader can project their best expectations and wants onto the abstract BDFL, making the idea appear more attractive. This is a mistake.</p> <p>Without naming the BDFL in the model proposal we are not talking about a concrete model. We can avoid asking and answering the hard questions. We can imagine our best-case scenario, a candidate we’d like to serve the role.</p> <p>Omitting a name for the BDFL also puts the Community Model at an unfair disadvantage. We already know the good, the bad, and the ugly of our core developer group. It’s no platonic ideal, no perfect sphere with no friction. In fact, we expect there to be a fair amount of friction and imperfections.</p> <p>Thus, to fairly assess the BDFL model proposal, dear reader, you should imagine the worst possible person within our team as that BDFL. A concrete human being. Imagine it’s me.</p> <p><strong>Conclusion</strong> While this has been our history, without Guido, this model does not serve the best interests of the language into the future.</p> </section> </section> <section id="let-s-have-a-council"> <h3><a class="toc-backref" href="#let-s-have-a-council" role="doc-backlink">Let’s have a Council</a></h3> <p>This group of people roughly shares the responsibilities of a Dictator. The group can also be called a Triumvirate, a Quorum, Elders, Steering Committee, and so on.</p> <section id="risk-dilution-and-confusion"> <h4><a class="toc-backref" href="#risk-dilution-and-confusion" role="doc-backlink">Risk: Dilution and confusion</a></h4> <p>This model favors a small group, between three and five people. That way it shares most of the criticism with the Dictator model, amplified. Having not one but, say, three people in position of power dilutes responsibility while still providing high risk of lobbying, insufficient trust, or alienating parts of the community.</p> </section> <section id="risk-internal-conflict"> <h4><a class="toc-backref" href="#risk-internal-conflict" role="doc-backlink">Risk: Internal Conflict</a></h4> <p>Additionally, having multiple people share the responsibility of governance creates ample opportunity for internal conflict, inconsistent long-term vision of the project, and multiplies the required continuous time involvement by its members (it’s no Quorum if they can’t “reach quorum” due to other time commitments).</p> <p>Just like with a frictionless spherical BDFL, reject ideas of Councils without considering how would it work for you if that Council consisted of three people you find inadequate for the role. Imagine if I had two friends.</p> <p>Most importantly, just like with a Dictator, we don’t need a Council. By the time we had one, we would have already had two successful elections. Why not keep voting?</p> <p><strong>Conclusion</strong> This model has similar risks like a Dictator, only worse.</p> </section> </section> </section> <section id="motivation"> <h2><a class="toc-backref" href="#motivation" role="doc-backlink">Motivation</a></h2> <p>Now that we rejected the basics of other governance models, let’s talk why we even need a governance model on top of a loosely defined group of committers.</p> <p><strong>Stability and Reliability</strong> We want to prevent single committers from making wide-reaching changes that impact the future of the language or its usability. Coherent vision and backwards compatibility are important in any programming language, but they are doubly important for Python which is very dynamic (e.g. has very complex backwards compatibility implications).</p> <p><strong>Diverse Uses of Python</strong> Moreover, Python is used by a diverse group of users, from school children through scientists to corporations with multi-million line codebases. We want to include all our varied audiences.</p> <p><strong>Vitality</strong> We want to avoid stagnation. Python is a mature project but it needs to keep evolving to stay relevant, both the runtime and the programming language. To do that, people interested in improving a particular part of the project should be able to do so without needless friction. But for substantial changes, we want some discourse and reflection to ensure the changes are wise.</p> </section> <section id="rationale"> <h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2> <p><strong>Inclusive</strong> The Community Model is the most inclusive model. No single person or a small group of people is in a distinguished position of power over others. Contributors and any workgroups in this model are self-selecting.</p> <p><strong>Pragmatic</strong> This model ensures no user group is put at a disadvantage due to the interests of a single person or a small group of people.</p> <p><strong>Proven</strong> This model works. There is a number of large open-source projects run this way (two of which, Rust and Django, are described in <a class="pep reference internal" href="../pep-8002/" title="PEP 8002 – Open Source Governance Survey">PEP 8002</a>). ECMAScript and C++ are similarly developed.</p> </section> <section id="specification"> <h2><a class="toc-backref" href="#specification" role="doc-backlink">Specification</a></h2> <section id="key-people-and-their-functions"> <h3><a class="toc-backref" href="#key-people-and-their-functions" role="doc-backlink">Key people and their functions</a></h3> <section id="the-core-team"> <h4><a class="toc-backref" href="#the-core-team" role="doc-backlink">The core team</a></h4> <p>The Python project is developed by a team of core developers. While membership is determined by presence in the “Python core” team in the “python” organization on GitHub, contribution takes many forms:</p> <ul class="simple"> <li>committing changes to the repository;</li> <li>reviewing pull requests by others;</li> <li>triaging bug reports on the issue tracker;</li> <li>discussing topics on official Python communication channels.</li> </ul> <p>Some contributors are may be considered dormant, in other words they did not contribute to the last two releases of CPython. Any dormant contributor can at any time resume contribution.</p> </section> <section id="experts"> <h4><a class="toc-backref" href="#experts" role="doc-backlink">Experts</a></h4> <p>The Python Developer’s Guide lists a number of interest areas along with names of core developers who are recognized as experts in the given area. An expert or a sub-team of experts has the following responsibilities:</p> <ul class="simple"> <li>responding to issues on the bug tracker triaged to the given interest area on a timely basis;</li> <li>reviewing pull requests identified as belonging to the given interest area on a timely basis;</li> <li>overviewing cohesive design in the evolution of the given interest area.</li> </ul> <p>A core developer can assign and unassign themselves at will to a given interest area. Existing experts listed for the given interest area must be made aware of this change and have to unanimously agree to it.</p> <p>If a given interest area lists multiple experts, they form a sub-team within the core team. They are responsible for the given interest area together.</p> <p>A core developer should avoid membership as an expert in too many interest areas at the same time. This document deliberately doesn’t specify a maximum number, it simply signals that overexertion leads to burnout and is a risk to the project’s ability to function without a given contributor.</p> </section> <section id="moderators"> <h4><a class="toc-backref" href="#moderators" role="doc-backlink">Moderators</a></h4> <p>There is a group of people, some of which are not core developers, responsible for ensuring that discussions on official communication channels adhere to the Code of Conduct. They take action in view of violations.</p> </section> </section> <section id="regular-decision-process"> <h3><a class="toc-backref" href="#regular-decision-process" role="doc-backlink">Regular decision process</a></h3> <p>Primary work happens through bug tracker issues and pull requests. Core developers should avoid pushing their changes directly to the cpython repository, instead relying on pull requests. Approving a pull request by a core developer allows it to be merged without further process.</p> <p>Notifying relevant experts about a bug tracker issue or a pull request is important. Reviews from experts in the given interest area are strongly preferred, especially on pull request approvals. Failure to do so might end up with the change being reverted by the relevant expert.</p> <p>Experts are not required to listen to the firehose of GitHub and bug tracker activity at all times. Notifying an expert explicitly during triage or bug/pull request creation may be necessary to get their attention.</p> </section> <section id="controversial-decision-process"> <h3><a class="toc-backref" href="#controversial-decision-process" role="doc-backlink">Controversial decision process</a></h3> <p>Substantial changes in a given interest area require a PEP. This includes:</p> <ul class="simple"> <li>Any semantic or syntactic change to the language.</li> <li>Backwards-incompatible changes to the standard library or the C API.</li> <li>Additions to the standard library, including substantial new functionality within an existing library.</li> <li>Removing language, standard library, or C API features.</li> </ul> <p>Failure to get a substantial change through the PEP process might result with the change being reverted.</p> <p>Changes that are bug fixes can be exempt from the PEP requirement. Use your best judgement.</p> <section id="pep-enhanced"> <h4><a class="toc-backref" href="#pep-enhanced" role="doc-backlink">PEP, Enhanced</a></h4> <p>The PEP process is augmented with the following changes and clarifications over information already present in <a class="pep reference internal" href="../pep-0001/" title="PEP 1 – PEP Purpose and Guidelines">PEP 1</a>:</p> <ul class="simple"> <li>PEPs are not merged until the final decision is made on them; they are open pull requests on GitHub until that moment;<ul> <li>to make review easier, all changes to the PEP under review should be made as separate commits, allowing for granular comparison;</li> </ul> </li> <li>a submitted PEP needs to identify the area of interest and relevant experts as the body that makes the final decision on it;</li> <li>if the PEP author is one of the experts of the relevant area of interest, they must name another person from outside of that interest area to contribute to the final decision in their place;</li> <li>the PEP author is responsible for gathering and integrating feedback on the PEP using the official communication channels, with the goal of building consensus;</li> <li>all community members must be enabled to give feedback;</li> <li>at some point, one of the named experts posts a “summary comment” that lays out the current state of discussion, especially major points of disagreement and tradeoffs; at the same time the expert proposes a “motion for final comment period” (<strong>FCP</strong>), along with a proposed disposition to either:<ul> <li>accept;</li> <li>accept provisionally;</li> <li>reject; or</li> <li>defer the PEP.</li> </ul> </li> <li>to enter the FCP, the PEP must be signed off by all experts of the relevant area of interest;</li> <li>the FCP lasts for fourteen calendar days to allow stakeholders to file any final objections before a decision is reached.</li> </ul> </section> <section id="very-controversial-peps"> <h4><a class="toc-backref" href="#very-controversial-peps" role="doc-backlink">Very controversial PEPs</a></h4> <p>If a core contributor feels strongly against a particular PEP, during its FCP they may raise a motion to reject it by vote. Voting details are described below in “Voting Mechanics”.</p> <p>This should be a last resort and thus a rare occurrence. It splits the core team and is a stressful event for all involved. However, the experts filing for a FCP for a PEP should have a good sense whether a motion to reject it by vote is likely. In such a case, care should be taken to avoid prematurely filing for a FCP.</p> <p>There is no recourse for the opposite situation, i.e. when the experts want to reject a PEP but others would like it accepted. This ensures that the relevant experts have the last say on what goes in. If you really want that change, find a way to convince them.</p> <p>Moderators on official communication channels enforce the Code of Conduct first and foremost, to ensure healthy interaction between all interested parties. Enforcement can result in a given participant being excluded from further discussion and thus the decision process.</p> </section> <section id="revisiting-deferred-and-rejected-peps"> <h4><a class="toc-backref" href="#revisiting-deferred-and-rejected-peps" role="doc-backlink">Revisiting deferred and rejected PEPs</a></h4> <p>If a PEP is deferred or rejected, the relevant experts should be contacted first before another attempt at the same idea is made. If the experts agree there is substantial evidence to justify revisiting the idea, a pull request editing the deferred or rejected PEP can be opened.</p> <p>Failure to get proper expert buy-in beforehand will likely result in immediate rejection of a pull request on a deferred or rejected PEP.</p> </section> </section> <section id="other-voting-situations"> <h3><a class="toc-backref" href="#other-voting-situations" role="doc-backlink">Other Voting Situations</a></h3> <section id="nominating-a-new-core-developer"> <h4><a class="toc-backref" href="#nominating-a-new-core-developer" role="doc-backlink">Nominating a new core developer</a></h4> <p>A champion nominates a person to become a new core developer by posting on official communication channels. A vote is opened.</p> <p>If any existing core developer does not feel comfortable with the nominee receiving the commit bit, they should preferably address this concern in the nomination thread. If there is no satisfactory resolution, they can cast a negative vote.</p> <p>In practice, nominating a person for a core developer should often meet with surprise by others that this person is not a core developer yet. In other words, it should be done when the candidate is already known and trusted well enough by others. We should avoid nominations based on <em>potential</em>.</p> </section> <section id="votes-of-no-confidence"> <h4><a class="toc-backref" href="#votes-of-no-confidence" role="doc-backlink">Votes of no confidence</a></h4> <ul class="simple"> <li>Removing a core developer from the core team;</li> <li>Disbanding the experts team for a given area of interest.</li> </ul> <p>Those describe a situation where a core developer is forcefully removed from the core team or an experts team is forcefully disbanded. Hopefully those will never have to be exercised but they are explicitly mentioned to demonstrate how a dysfunctional area of interest can be healed.</p> <p>If a core developer is removed by vote from the core team, they lose the ability to interact with the project. It’s up to the Moderators’ discretion to remove their ability to post on the bug tracker and GitHub or just moderate their future behavior on a case-by-case basis.</p> <p>If the experts team for an area of interest is disbanded, other core developers can step up to fill the void at will. Members of the disbanded experts team cannot self-nominate to return.</p> </section> </section> <section id="voting-mechanics"> <h3><a class="toc-backref" href="#voting-mechanics" role="doc-backlink">Voting Mechanics</a></h3> <p>All votes described in this document are +1/-1/0 (“Yea”/”Nay”/”Present”) recorded votes. There are no other vote values, in particular values out of range or fractions (like +0.5) are invalid.</p> <p>Votes take fourteen calendar days. The starting date is taken looking at the timezone of the person who filed for the motion to vote. The end date is fourteen days later Anywhere-On-Earth.</p> <p>Dormant core developers as defined in “Key people and their functions” above are not counted towards the totals if they abstain. However, they can vote if they choose to do so and that way they count as active. Voting is a form of contribution.</p> <p>Voting is done by a commit to a private repository in the “python” organization on GitHub. The repository is archived and publicized after the voting period is over. The repository’s name should start with “vote-“.</p> <p>Changes to one’s vote during the voting period is allowed. Peeking at other developers’ cast votes during the time of the vote is possible.</p> <p>Every situation requires a different vote percentage:</p> <ul class="simple"> <li>PEP rejection by vote requires over 1/3rd of the non-dormant core developer population to explicitly vote to reject. Note that if more than 1/3rd of core developers decide against a PEP, this means there exists no super-majority of core developers who are in favor of the change. This strongly suggests the change should not be made in the shape described by the PEP.</li> <li>New core developer nomination requires there to be no votes cast against it.</li> <li>Votes of no confidence require a super-majority of at least 2/3rds of the non-dormant core developer population to explicitly vote in favor of the motion.</li> </ul> </section> </section> <section id="omissions"> <h2><a class="toc-backref" href="#omissions" role="doc-backlink">Omissions</a></h2> <p>This document deliberately omits listing possible areas of interest within the project. It also does not address election and management of Moderators which are done by the Python Software Foundation and its Code of Conduct Working Group which can be contacted by mailing <a class="reference external" href="mailto:conduct-wg&#37;&#52;&#48;python&#46;org">conduct-wg<span>&#64;</span>python<span>&#46;</span>org</a>.</p> </section> <section id="acknowledgements"> <h2><a class="toc-backref" href="#acknowledgements" role="doc-backlink">Acknowledgements</a></h2> <p>Thank you to the authors of <a class="pep reference internal" href="../pep-8002/" title="PEP 8002 – Open Source Governance Survey">PEP 8002</a> which was a helpful resource in shaping this document.</p> <p>Thank you to Alex Crichton and the Rust team for a governance model that was a major inspiration for this document.</p> </section> <section id="copyright"> <h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2> <p>This document has been placed in the public domain.</p> </section> </section> <hr class="docutils" /> <p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-8012.rst">https://github.com/python/peps/blob/main/peps/pep-8012.rst</a></p> <p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-8012.rst">2025-02-01 08:55:40 GMT</a></p> </article> <nav id="pep-sidebar"> <h2>Contents</h2> <ul> <li><a class="reference internal" href="#pep-rejection">PEP Rejection</a></li> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#rejected-models">Rejected Models</a><ul> <li><a class="reference internal" href="#let-s-have-another-bdfl">Let’s have another BDFL</a><ul> <li><a class="reference internal" href="#challenge-there-is-no-other-guido">Challenge: There is no other Guido</a></li> <li><a class="reference internal" href="#risk-malevolent-dictator-for-life">Risk: Malevolent Dictator For Life</a></li> <li><a class="reference internal" href="#observation-we-don-t-actually-need-a-dictator">Observation: We don’t actually need a Dictator</a></li> <li><a class="reference internal" href="#risk-the-warm-and-fuzzy-feeling-of-a-vague-proposal">Risk: The warm and fuzzy feeling of a vague proposal</a></li> </ul> </li> <li><a class="reference internal" href="#let-s-have-a-council">Let’s have a Council</a><ul> <li><a class="reference internal" href="#risk-dilution-and-confusion">Risk: Dilution and confusion</a></li> <li><a class="reference internal" href="#risk-internal-conflict">Risk: Internal Conflict</a></li> </ul> </li> </ul> </li> <li><a class="reference internal" href="#motivation">Motivation</a></li> <li><a class="reference internal" href="#rationale">Rationale</a></li> <li><a class="reference internal" href="#specification">Specification</a><ul> <li><a class="reference internal" href="#key-people-and-their-functions">Key people and their functions</a><ul> <li><a class="reference internal" href="#the-core-team">The core team</a></li> <li><a class="reference internal" href="#experts">Experts</a></li> <li><a class="reference internal" href="#moderators">Moderators</a></li> </ul> </li> <li><a class="reference internal" href="#regular-decision-process">Regular decision process</a></li> <li><a class="reference internal" href="#controversial-decision-process">Controversial decision process</a><ul> <li><a class="reference internal" href="#pep-enhanced">PEP, Enhanced</a></li> <li><a class="reference internal" href="#very-controversial-peps">Very controversial PEPs</a></li> <li><a class="reference internal" href="#revisiting-deferred-and-rejected-peps">Revisiting deferred and rejected PEPs</a></li> </ul> </li> <li><a class="reference internal" href="#other-voting-situations">Other Voting Situations</a><ul> <li><a class="reference internal" href="#nominating-a-new-core-developer">Nominating a new core developer</a></li> <li><a class="reference internal" href="#votes-of-no-confidence">Votes of no confidence</a></li> </ul> </li> <li><a class="reference internal" href="#voting-mechanics">Voting Mechanics</a></li> </ul> </li> <li><a class="reference internal" href="#omissions">Omissions</a></li> <li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> <br> <a id="source" href="https://github.com/python/peps/blob/main/peps/pep-8012.rst">Page Source (GitHub)</a> </nav> </section> <script src="../_static/colour_scheme.js"></script> <script src="../_static/wrap_tables.js"></script> <script src="../_static/sticky_banner.js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10