PEP: 8010 Title: The BDFL Governance Model Author: Barry Warsaw Status: Active Type: Informational Content-Type: text/x-rst Created: 2018-08-24 Abstract ======== This PEP proposes a continuation of the singular project leader model, euphemistically called the `Benevolent Dictator For Life `_ (BDFL) model of Python governance, to be henceforth called in this PEP the Gracious Umpire Influencing Decisions Officer (GUIDO). This change in name reflects both the expanded view of the GUIDO as final arbiter for the Python language decision making process in consultation with the wider development community, and the recognition that "for life" while perhaps aspirational, is not necessarily in the best interest of the well-being of either the language or the GUIDO themselves. This PEP describes: * The rationale for maintaining the singular leader model * The process for how the GUIDO will be selected, elected, retained, recalled, and succeeded; * The roles of the GUIDO in the Python language evolution process; * The term length of service; * The relationship of the GUIDO with a Council of Pythonistas (CoP) that advise the GUIDO on technical matters; * The size, election, and roles of the CoP; * The decision delegation process; * Any changes to the PEP process to fit the new governance model; This PEP does *not* name a new BDFL. Should this model be adopted, it will be codified in PEP 13 along with the names of all officeholders described in this PEP, as voted on per the guidelines in PEP 8001. Open discussion points ====================== Various tweaks to the parameters of this PEP are allowed during the governance discussion process, such as the exact size of the CoP, term lengths of service, and voting procedures. These will be codified by the time the PEP is ready to be voted on. It is allowed, and perhaps even expected, that as experience is gained with this model, these parameters may be tweaked as future GUIDOs are named, in order to provide for a smoother governing process. The process for tweaking these parameters will generally be the same voting process as described in PEP 8001. Why a singular leader? ====================== Why this model rather than any other? It comes down to "vision". `Design by committee`_ has many known downsides, leading to a language that accretes new features based on the varied interests of the contributors at the time. An famous aphorism is "a camel is a horse designed by committee". Can a language that is designed by committee "hang together"? Does it feel like a coherent, self-consistent language where the rules make sense and are easily remembered? A singular leader can promote that vision more than a committee can, whether that committee is small (e.g. 3 or 5 persons) or spans the entire Python community. Every participant will have their own vision of what "Python" is, and this can lead to indecision or illogical choices when those individual visions are in conflict. Should CPython be 3x faster or should we preserve the C API? That's a very difficult question to get consensus on, since neither choice is right or wrong. But worse than making the wrong decision might be accepting the status quo because no consensus could be found. Flexibility =========== Degrees of flexibility are given to both the GUIDO and CoP by way of underspecification. This PEP describes how conflicts will be resolved, but expects all participants, including core developers, community members, and office holders, to always have the best interest of Python and its users at heart. The PEP assumes that mutual respect and the best intentions will always lead to consensus, and that the Code of Conduct governs all interactions and discussions. The role of the GUIDO ===================== One of the most important roles of the GUIDO is to provide an overarching, broad, coherent vision for the evolution of the Python language, spanning multiple releases. This is especially important when decision have lasting impact and competing benefits. For example, if backward incompatible changes to the C API leads to a 2x improvement in Python performance, different community members will likely advocate convincingly on both sides of the debate, and a clear consensus may not emerge. Either choice is equally valid. In consultation with the CoP, it will be the GUIDO's vision that guides the ultimate decision. The GUIDO is the ultimate authority for decisions on PEPs, including whether any particular change is PEP-worthy. As is the case today, many --in fact perhaps most-- decisions are handled by discussion and resolution on the issue tracker, merge requests, and discussion forums, usually with input or lead by experts in the particular field. Where this operating procedure works perfectly well, it can continue unchanged. This also helps reduce the workload on the CoP and GUIDO, leaving only the most important decisions and broadest view of the landscape to the central authority. Similarly, should a particular change be deemed to require a PEP, but the GUIDO, in consultation with the CoP, identifies experts that have the full confidence to make the final decision, the GUIDO can name a Delegate for the PEP. While the GUIDO remains the ultimate authority, it is expected that the GUIDO will not undermine, and in fact will support the authority of the Delegate as the final arbiter of the PEP. The GUIDO has full authority to shut down unproductive discussions, ideas, and proposals, when it is clear that the proposal runs counter to the long term vision for Python. This is done with compassion for the advocates of the change, but with the health and well-being of all community members in mind. A toxic discussion on a dead-end proposal does no one any good, and they can be terminated by fiat. Authority comes from the community ================================== The GUIDO's authority ultimately resides with the community. A rogue GUIDO that loses the confidence of the majority of the community can be recalled and a new vote conducted. This is an exceedingly rare and unlikely event. This is a sufficient stopgap for the worst case scenario, so it should not be undertaken lightly. The GUIDO should not fear being deposed because of one decision, even if that decision isn't favored by the majority of Python developers. Recall should be reserved for actions severely detrimental to the Python language or community. The Council of Pythonistas (see below) has the responsibility to initiate a vote of no-confidence. Length of service and term limits ================================= The GUIDO shall serve for three Python releases, approximately 4.5 years given the current release cadence. After this time, a new election is held according to the procedures outlined below. There are no term limits, so the GUIDO may run for re-election for as long as they like. We expect GUIDOs to serve out their entire term of office, but of course, Life Happens. Should the GUIDO need to step down before their term ends, the vacancy will be filled by the process outlined below as per choosing a new GUIDO. However, the new GUIDO will only serve for the remainder of the original GUIDO's term, at which time a new election is conducted. The GUIDO stepping down may continue to serve until their replacement is selected. Choosing a GUIDO ================ The selection process is triggered whenever a vacancy exists for a new GUIDO, or when the GUIDO is up for re-election in the normal course of events. When the selection process is triggered, either by the GUIDO stepping down, or two months before the end of the GUIDO's regular term, a new election process begins. For three weeks prior to the vote, nominations are open. Candidates must be chosen from the current list of core Python developers. Non-core developers are ineligible to serve as the GUIDO. Candidates may self-nominate, but all nominations must be seconded. Nominations and seconds are conducted as merge requests on a private repository. Once they accept their nomination, nominees may post short position statements using the same private repository, and may also post them to the committers discussion forum. Maybe we'll even have debates! This phase of the election runs for two weeks. Core developers then have three weeks to vote, using the process described in PEP 8001. The Council of Pythonistas (CoP) ================================ Assisting the GUIDO is a small team of elected Python experts. They serve on a team of technical committee members. They provide insight and offer discussion of the choices before the GUIDO. Consultation can be triggered from either side. For example, if the GUIDO is still undecided about any particular choice, discussions with the CoP can help clarify the remaining issues, identify the right questions to ask, and provide insight into the impact on other users of Python that the GUIDO may not be as familiar with. The CoP are the GUIDO's trusted advisers, and a close working relationship is expected. The CoP shall consistent of 3 members, elected from among the core developers. Their term runs for 3 years and members may run for re-election as many times as they want. To ensure continuity, CoP members are elected on a rotating basis; every year, one CoP member is up for re-election. In order to bootstrap the stagger for the initial election, the CoP member with the most votes shall serve for 3 years, the second most popular vote getter shall serve for 2 years, and CoP member with the least number of votes shall serve initially for 1 year. All ties in voting will be broken with a procedure to be determined in PEP 8001. The nomination and voting process is similar as with the GUIDO. There is a three week nomination period, where self-nominations are allowed and must be seconded, followed by a period of time for posting position statements, followed by a vote. By unanimous decision, the CoP may begin a no-confidence vote on the GUIDO, triggering the procedure in that section. No confidence votes =================== As mentioned above, the CoP may, by unanimous decision, initiate a vote of no-confidence in the GUIDO. This process should not be undertaken lightly, but once begun, it triggers up to two votes. In both cases, voting is done by the same procedure as in PEP 8001, and all core developers may participate in no confidence votes. The first vote is whether to recall the current GUIDO or not. Should a simple majority of Python developers vote "no confidence", the GUIDO is recalled. A second vote is then conducted to select the new GUIDO, in accordance with the procedures for initial section of this office holder. During the time in which there is no GUIDO, major decisions are put on hold, but normal Python operations may of course continue. Day to day operations ===================== The GUIDO is not needed for all -- or even most -- decisions. Python developers already have plenty of opportunity for delegation, responsibility, and self-direction. The issue tracker and pull requests serve exactly the same function as they did before this governance model was chosen. Most discussions of bug fixes and minor improvements can just happen on these forums, as they always have. PEP considerations ================== The GUIDO, members of the CoP, and anyone else in the Python community may propose a PEP. Treatment of the prospective PEP is handled the same regardless of the author of the PEP. However, in the case of the GUIDO authoring a PEP, an impartial PEP Delegate should be selected, and given the authority to accept or reject the PEP. The GUIDO should recuse themselves from the decision making process. In the case of controversial PEPs where a clear consensus does not arrive, ultimate authority rests with the CoP. The PEP propose is further enhanced such that a core developer must always be chose as the PEP Shepherd. This person ensure that proper procedure is maintained. The Shepherd must be chosen from among the core developers. This means that while anyone can author a PEP, all PEPs must have some level of sponsorship from at least one core developer. Copyright ========= This document has been placed in the public domain. .. _`Design by committee`: https://en.wikipedia.org/wiki/Design_by_committee .. Local Variables: mode: indented-text indent-tabs-mode: nil sentence-end-double-space: t fill-column: 70 coding: utf-8 End: