2018-08-25 14:50:09 -04:00
|
|
|
|
PEP: 8010
|
2018-11-04 20:29:40 -05:00
|
|
|
|
Title: The Technical Leader Governance Model
|
2018-08-25 14:50:09 -04:00
|
|
|
|
Author: Barry Warsaw <barry@python.org>
|
2018-12-17 11:09:10 -05:00
|
|
|
|
Status: Rejected
|
2018-08-25 14:50:09 -04:00
|
|
|
|
Type: Informational
|
2023-02-02 05:50:01 -05:00
|
|
|
|
Topic: Governance
|
2018-08-25 14:50:09 -04:00
|
|
|
|
Content-Type: text/x-rst
|
2021-02-09 11:54:26 -05:00
|
|
|
|
Created: 24-Aug-2018
|
2018-08-25 14:50:09 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
========
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
This PEP proposes a continuation of the singular technical project
|
|
|
|
|
leader model, euphemistically called the `Benevolent Dictator For Life
|
2018-10-07 23:18:39 -04:00
|
|
|
|
<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:
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
* The rationale for maintaining the singular technical leader model
|
2018-10-07 23:18:39 -04:00
|
|
|
|
* 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;
|
2018-08-25 14:50:09 -04:00
|
|
|
|
|
2018-11-15 12:38:45 -05:00
|
|
|
|
This PEP does *not* name a new BDFL. Should this model be adopted, it
|
2022-01-21 06:03:51 -05:00
|
|
|
|
will be codified in :pep:`13` along with the names of all officeholders
|
2018-11-15 12:38:45 -05:00
|
|
|
|
described in this PEP.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
|
2018-12-17 11:09:10 -05:00
|
|
|
|
PEP Rejection
|
|
|
|
|
=============
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`8010` was rejected `by a core developer vote
|
2018-12-17 11:09:10 -05:00
|
|
|
|
<https://discuss.python.org/t/python-governance-vote-december-2018-results/546/>`__
|
2022-01-21 06:03:51 -05:00
|
|
|
|
described in :pep:`8001` on Monday, December 17, 2018.
|
2018-12-17 11:09:10 -05:00
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`8016` and the governance model it describes were chosen instead.
|
2018-12-17 11:09:10 -05:00
|
|
|
|
|
|
|
|
|
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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.
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
The voting procedures and events described in this PEP will default to
|
2022-01-21 06:03:51 -05:00
|
|
|
|
the voting method specified in :pep:`8001`, although as that PEP is still
|
2018-11-04 20:29:40 -05:00
|
|
|
|
in discussion at the time of this writing, this is subject to change.
|
|
|
|
|
|
2018-10-07 23:18:39 -04:00
|
|
|
|
It is allowed, and perhaps even expected, that as experience is gained
|
|
|
|
|
with this model, these parameters may be tweaked as future GUIDOs are
|
2018-11-04 20:29:40 -05:00
|
|
|
|
named, in order to provide for a smoother governing process.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
Why a singular technical leader?
|
|
|
|
|
================================
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
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
|
2018-10-24 13:21:09 -04:00
|
|
|
|
contributors at the time. A famous aphorism is "a camel is a horse
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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?
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
A singular technical 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.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2018-11-30 22:23:48 -05:00
|
|
|
|
The GUIDO is the ultimate authority for decisions on PEPs and other
|
|
|
|
|
issues, 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.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
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
|
2021-02-03 09:06:23 -05:00
|
|
|
|
to the long-term vision for Python. This is done with compassion for
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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.
|
|
|
|
|
|
2018-11-30 22:23:48 -05:00
|
|
|
|
To sum up: the GUIDO has the authority to make a final pronouncement
|
|
|
|
|
on any topic, technical or non-technical, except for changing to the
|
|
|
|
|
governance PEP itself.
|
|
|
|
|
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
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
|
2021-02-03 09:06:23 -05:00
|
|
|
|
unlikely event. This is a sufficient stopgap for the worst-case
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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
|
2018-10-23 21:14:31 -04:00
|
|
|
|
years given the current release cadence. If Python’s release cadence
|
|
|
|
|
changes, the length of GUIDO’s term should change to 4.5 years rounded
|
|
|
|
|
to whole releases. How the rounding is done is left to the potential
|
|
|
|
|
release cadence PEP. 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.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
During the transition period, the CoP (see below) may carry out the
|
|
|
|
|
GUIDO's duties, however they may also prefer to leave substantive
|
|
|
|
|
decisions (such as technical PEP approvals) to the incoming GUIDO.
|
|
|
|
|
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
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
|
2022-01-21 06:03:51 -05:00
|
|
|
|
described in :pep:`8001`.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2018-11-15 12:38:45 -05:00
|
|
|
|
The CoP shall consist of 3 members, elected from among the core
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`8001`.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
The nomination and voting process is similar as with the GUIDO. There
|
2021-02-03 09:06:23 -05:00
|
|
|
|
is a three-week nomination period, where self-nominations are allowed
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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
|
2022-01-21 06:03:51 -05:00
|
|
|
|
both cases, voting is done by the same procedure as in :pep:`8001`, and
|
2018-10-07 23:18:39 -04:00
|
|
|
|
all core developers may participate in no confidence votes.
|
|
|
|
|
|
|
|
|
|
The first vote is whether to recall the current GUIDO or not. Should
|
2018-11-04 20:29:40 -05:00
|
|
|
|
a super majority of Python developers vote "no confidence", the GUIDO
|
2018-10-07 23:18:39 -04:00
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
2021-02-03 09:06:23 -05:00
|
|
|
|
Day-to-day operations
|
2018-10-07 23:18:39 -04:00
|
|
|
|
=====================
|
|
|
|
|
|
|
|
|
|
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
|
2018-11-04 20:29:40 -05:00
|
|
|
|
consensus does not arrive, ultimate authority on PEPs authored by the
|
|
|
|
|
GUIDO rests with the CoP.
|
2018-10-07 23:18:39 -04:00
|
|
|
|
|
|
|
|
|
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.
|
2018-08-25 14:50:09 -04:00
|
|
|
|
|
|
|
|
|
|
2018-11-04 20:29:40 -05:00
|
|
|
|
Version History
|
|
|
|
|
===============
|
|
|
|
|
|
|
|
|
|
Version 2
|
|
|
|
|
|
|
|
|
|
- Renamed to "The Technical Leader Governance Model"
|
|
|
|
|
- "singular leader" -> "singular technical leader"
|
2022-01-21 06:03:51 -05:00
|
|
|
|
- The adoption of :pep:`8001` voting procedures is tentative until that
|
2018-11-04 20:29:40 -05:00
|
|
|
|
PEP is approved
|
|
|
|
|
- Describe what happens if the GUIDO steps down
|
|
|
|
|
- Recall votes require a super majority of core devs to succeed
|
|
|
|
|
|
|
|
|
|
|
2018-08-25 14:50:09 -04:00
|
|
|
|
Copyright
|
|
|
|
|
=========
|
|
|
|
|
|
|
|
|
|
This document has been placed in the public domain.
|
|
|
|
|
|
|
|
|
|
|
2018-10-07 23:18:39 -04:00
|
|
|
|
.. _`Design by committee`: https://en.wikipedia.org/wiki/Design_by_committee
|