Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PEP 772: A round of updates #4320

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
133 changes: 68 additions & 65 deletions peps/pep-0772.rst
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,8 @@ The council shall work to:
* Establish appropriate decision-making processes.
* Improve Python packaging's user experience.
* Make contributing as accessible, inclusive, and sustainable as possible.
* Strive to seek consensus among contributors before acting in a formal capacity.
* Strive to seek consensus among contributors before acting in a formal
capacity.

Responsibilities
================
Expand All @@ -167,19 +168,17 @@ publicly in a timely fashion.
Delegations
-----------

The Python Steering Council is expected to delegate decision making to
the Packaging Council for PEPs related to the Python packaging. The bodies
would work together on issues that intersect the packaging domain and language
stewardship (including the CPython implementation, standard library, and
distribution).
The Python Steering Council will delegate decision making to the Packaging
Council for PEPs related to the Python packaging. The bodies would work
together on issues that intersect the packaging domain and language stewardship
(including the CPython implementation, standard library, and distribution).
Comment on lines +171 to +174
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've seen two such PEPs recently (776 & 780). Would it make sense to recommend something like a joint PEP delegate? Clearly not to be mandated, but it may help alleviate coordination delays between the packaging and steering councils.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting examples @AA-Turner!

Would it make sense to recommend something like a joint PEP delegate?

Could you elaborate? Who would do the delegation (presumably, the SC) and who would be the delegate (not the SC and PC together, right? Seems weird that the SC would delegate to itself).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is to reduce co-ordination friction between the two bodies. Taking two extremes:

  • Each body considers only aspects within its own remit. Pros: no requirement for coordination, perhaps faster decisions. Cons: the decisions could differ (one rejects & one acceps), no consideration of overlap, decisions could be on different timelines, discussion could fracture.
  • Both bodies consider the PEP together. Pros: consistency of position, one decision. Cons: likely to take longer to corral ten people, takes up time for both committees, slower pace of innovation.

My proposal instead is for the PEP to recommend that both bodies agree an individual/set of individuals to serve as the PEP delegate for each 'joint PEP', perhaps a nominated member from each committee, perhaps a domain expert, etc. This aligns with the mandate in PEP 13 "Instead of ruling on individual PEPs, it’s better to define a standard process for PEP decision making", and I would argue is more productive than the alternatives above.

Regardless of if you take my idea, though, I think it would be useful to add more detail on how 'joint PEPs' are decided. Currently it says "will work together", but this is vague. For example, what happens in the accept/reject scenario above, does one body have 'more' authority than the other, etc. There is no bright line between the language & its packaging, so there will inevitably be overlap!

A


The PSF Board is encouraged to formally deprecate the Packaging Workgroup
and the Packaging Council would take on the responsibilities of the
PSF's Packaging Workgroup.
The PSF Board is encouraged to formally deprecate the Packaging Workgroup and
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"close" or "end" instead of "deprecate"?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or "deactivate"? Following the language of https://www.python.org/psf/workgroups/

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed that "deprecate" doesn't have the finality and closure I think we expect. @hugovk I'd be fine with "deactivate" although I can't find that word used at the workgroups link.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, no "deactivate" at the link, but it has a list of "Active Work Groups" and "Inactive Committees & Work Groups".

the Packaging Council would take on the responsibilities of the PSF's Packaging
Workgroup.

The PyPA is expected to work with the Packaging Council to establish a
decision making process that governs the technical projects under the PyPA
umbrella.
The PyPA is expected to work with the Packaging Council to establish a decision
making process that governs the technical projects under the PyPA umbrella.

Processes
=========
Expand All @@ -189,13 +188,14 @@ Election of the council

A council election consists of two phases:

* Phase 1: A member of the Packaging community (defined later in this document)
can self-nominate themselves for the council elections.
* Phase 2: Each Packaging community member can assign zero to five stars to
each candidate. Voting is performed anonymously. The outcome of the vote is
determined using the `STAR voting system`_, modified to use the `Multi-winner
Bloc STAR`_ approach. If a tie occurs, it may be resolved by mutual agreement
among the candidates, or else the winner will be chosen at random.
* Phase 1: A voting member (defined later in this document) can self-nominate
themselves for the council elections. Such a nomination must include
information about the member's relevant affiliations.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't say anything about non-self-nominations, but maybe we should allow voting members to also nominate other people, whether those nominees are themselves voting members or not (similar to how the SC and core dev nominations work).

* Phase 2: Each voting member can assign zero to five stars to each candidate.
Voting is performed anonymously. The outcome of the vote is determined using
the `STAR voting system`_, modified to use the `Multi-winner Bloc STAR`_
approach. If a tie occurs, it may be resolved by mutual agreement among the
candidates, or else the winner will be chosen at random.

Each phase should last two weeks.

Expand All @@ -209,8 +209,8 @@ election for the council.
Term
----

There shall be two cohorts of council members: Cohort A composed of two
members and Cohort B composed of three members.
There shall be two cohorts of council members: Cohort A composed of two members
and Cohort B composed of three members.

Each council member shall be elected for a two-year term, unless they are
replacing a council member that resigned, was removed, or otherwise becomes
Expand All @@ -223,9 +223,9 @@ finalised until the next elections for their cohort are finalised.

Only for elections involving the entire council (like the initial council
election), the two candidates receiving the highest number of votes shall be
designated Cohort A with a two year term, and the three candidates
receiving the highest number of votes after shall be designated Cohort B with a
one year term.
designated Cohort A with a two year term, and the three candidates receiving
the highest number of votes after shall be designated Cohort B with a one year
term.

There are no term limits for individual council members.

Expand All @@ -245,14 +245,18 @@ Conflicts of interest
---------------------

No more than two Packaging Council members should be employed by or
significantly affiliated with the same entity. An entity would be a company,
a company and its subsidiaries, or another incorporated entity such as a
non-profit or educational institution with its own mission and goals. PSF members are explicitly exempt from this restriction, but _not_ PSF employees, directors, or officers.
significantly affiliated with the same entity. An entity is a company, a
company and its subsidiaries, or another incorporated entity such as a
non-profit or educational institution with its own mission and goals. PSF
members are explicitly exempt from this restriction, but *not* PSF directors
or officers.

While we trust council members to act in the best interests of Python rather
than themselves or their employers, the mere appearance of any one company
dominating Python development could itself be harmful and erode trust.

PSF staff members are not permitted to be members of the Packaging Council.

In a council election, if more than two of the top five vote-getters work for
the same employer, then whichever of them ranked lowest is disqualified and the
6th-ranking candidate moves up into 5th place; this is repeated until a valid
Expand All @@ -263,48 +267,47 @@ During a council term, if changing circumstances cause this rule to be broken
council members must resign to remedy the issue, and the resulting vacancies
can then be filled as normal.

-------------------
Packaging community
-------------------
--------------
Voting members
--------------

Responsibility
==============

Packaging community members participate in formal votes to elect the Packaging
Council.
Voting members participate in formal votes to elect the Packaging Council.


Processes
=========

Initial membership
------------------

Initial membership in the Packaging community will include anyone who has taken
the time to formalise their participation in the Packaging community. This
includes:
Initial set of voting members will include anyone who has taken the time to
formalise their participation in the packaging community. This includes:

* PyPA members: Anyone with the triage bit or commit bit, or at least one
project in the PyPA organisation.
* Packaging workgroup members: Anyone who is listed on the Packaging WG charter
will be moved into the Packaging community.
who is willing to participate is welcome.
* Interested core team members: Any Python core team member who is willing to
participate is welcome.
* Wider community members: Non-profit organisations that participate in
packaging or working with new packagers. For example, PyOpenSci, NumFocus,
Django, are encouraged to initially nominate up to seven members by sending
an email to \[todo\].
* Wider community members: An initial set of for-profit companies, nonprofit
organizations, academic or educational institutions and smaller unaffiliated
projects would be invited to nominate three individuals to represent them.
[TODO: add a link here for the initial set, that the authors curate]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentionally left as a TODO.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For history/archival reasons, can we have the eventual full list in the PEP itself, rather than an external resource?


Adding a new member
-------------------

Members are added to the Packaging community by a simple majority vote by the
current membership. Quorum for adding new members is 50%.
New voting members are added by a simple majority vote by the current
membership. Quorum for adding new members is 50%.

A vote to add a new member is triggered when a Packaging community member calls
for one publicly on an appropriate communication channel, and another Packaging
community member seconds the call within two weeks.
A vote to add a new member is triggered when a voting member calls for one
publicly on an appropriate communication channel, and another voting member
seconds the call within two weeks.

The vote lasts for two weeks. Packaging community members vote for or against.
The vote lasts for one week. Each member can vote for or against.

Removal of a member
-------------------
Expand All @@ -316,28 +319,28 @@ re-submit their intention to resume their participation to the Packaging
Council in writing.

In exceptional circumstances, it may be necessary to remove someone from the
Packaging community against their will (for example: egregious and ongoing code
of conduct violations). A Packaging community member may be removed by a
two-thirds majority vote by the Packaging Council (in practice: 4:1 for a
council with five members).
voting members against their will (for example: egregious and ongoing code of
conduct violations). A voting member may be removed by a two-thirds majority
vote by the Packaging Council (in practice: 4:1 for a council with five
members).

If the relevant Packaging community member is also on the Packaging Council,
then they can participate in the vote. They are removed from the Packaging
Council if the vote removes them from the Packaging community. The vacancy is
filled as per the process for filling vacancies in the Packaging Council.
If the relevant voting member is also on the Packaging Council, then they can
participate in the vote. They are removed from the Packaging Council if the
vote removes them as a voting member. The vacancy is filled as per the process
for filling vacancies in the Packaging Council.

Vote of no confidence
---------------------

In exceptional circumstances, the Packaging community may remove a sitting
council member, or the entire council, via a vote of no confidence.
In exceptional circumstances, the voting members may remove a sitting council
member, or the entire council, via a vote of no confidence.

A no-confidence vote is triggered when a Packaging community member calls for
one publicly on an appropriate public communication channel, and another
Packaging community member seconds the call within two weeks.
A no-confidence vote is triggered when a voting member calls for one publicly
on an appropriate public communication channel, and another voting member
seconds the call within two weeks.

The vote lasts for two weeks. Packaging community members vote for or against.
If at least two thirds of voters express a lack of confidence, then the vote
The vote lasts for two weeks. Each voting member votes for or against. If at
least two thirds of voters express a lack of confidence, then the vote
succeeds. Quorum for a vote of no confidence is 50%.

There are two forms of no-confidence votes: those targeting a single member,
Expand All @@ -352,8 +355,8 @@ Changing the governance
-----------------------

Changes to this governance model, once it is accepted, will require at least a
two-thirds majority of votes cast in a Packaging community vote which should be
open for two weeks.
two-thirds majority of votes cast in a vote, which should be open for two
weeks.

==============
Rejected Ideas
Expand Down Expand Up @@ -401,7 +404,7 @@ two individuals related to a single organisation can be on the council.
Limiting it to one is workable; although it hasn't come up in the SC, people do
move around, and we wouldn't want good candidates to either make employment
decisions based on PC membership, or have to resign based on an employment
change. Limiting it to a maximum of two, plus votes of no confidence is
change. Limiting it to a maximum of two, plus votes of no confidence is
probably sufficient safety from any undue employer influence.

---------------------------------------------------------------------------
Expand Down Expand Up @@ -442,7 +445,7 @@ Packaging Council will meet on a regular basis (twice a month).
* Coordinate with the Steering Council on PEPs that need input from both
groups.
* Coordinate with PyPA on their ongoing work to support individual projects.
* Delegate to domain experts or working groups in the Packaging community, for
* Delegate to domain experts or working groups in the packaging community, for
initiatives/PEPs with a niche focus (analogous to how the Steering Council
sends certain PEPs to the C API working group).
* Scope out work that might best be done by hiring someone and then work with
Expand Down