Rough draft of PEP 8010 (#800)
This commit is contained in:
parent
6a7a3028fd
commit
2aae87c77d
271
pep-8010.rst
271
pep-8010.rst
|
@ -7,24 +7,268 @@ Content-Type: text/x-rst
|
|||
Created: 2018-08-24
|
||||
|
||||
|
||||
.. note:: This is just a placeholder until the actual governance PEPs are
|
||||
written. It is possible that the title, content, model proposed,
|
||||
and authorship will change once the PEP is actually written.
|
||||
|
||||
|
||||
Abstract
|
||||
========
|
||||
|
||||
This PEP proposes a continuation of the `Benevolent Dictator For Life
|
||||
<https://en.wikipedia.org/wiki/Benevolent_dictator_for_life>`_ (BDFL) model of
|
||||
Python governance. While currently a placeholder, it will describe such
|
||||
processes as how the Guido+1 BDFL will be selected, how future successors will
|
||||
be chosen, the role of the BDFL, and the role and size of any advisory
|
||||
council.
|
||||
This PEP proposes a continuation of the singular project leader model,
|
||||
euphemistically called the `Benevolent Dictator For Life
|
||||
<https://en.wikipedia.org/wiki/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.
|
||||
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
|
||||
|
@ -33,6 +277,9 @@ Copyright
|
|||
This document has been placed in the public domain.
|
||||
|
||||
|
||||
.. _`Design by committee`: https://en.wikipedia.org/wiki/Design_by_committee
|
||||
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
|
|
Loading…
Reference in New Issue