From c31e924ec4c8f8b1b3383b840dfc78e8ea87ab26 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 31 Dec 2024 17:59:50 +0530 Subject: [PATCH 01/13] PEP 772: Packaging governance process --- .github/CODEOWNERS | 1 + peps/pep-0772.rst | 292 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 293 insertions(+) create mode 100644 peps/pep-0772.rst diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6ac66492831..b1a06059ef9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -648,6 +648,7 @@ peps/pep-0767.rst @carljm peps/pep-0768.rst @pablogsal peps/pep-0769.rst @facundobatista peps/pep-0770.rst @sethmlarson @brettcannon +peps/pep-0772.rst @warsaw @pradyunsg # ... peps/pep-0777.rst @warsaw # ... diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst new file mode 100644 index 00000000000..818da156358 --- /dev/null +++ b/peps/pep-0772.rst @@ -0,0 +1,292 @@ +PEP: 772 +Title: Packaging governance process +Author: Barry Warsaw , + Deb Nicholson , + Pradyun Gedam +Status: Draft +Type: Process +Topic: Governance, Packaging +Created: 31-Dec-2024 +Replaces: 609 + + +======== +Abstract +======== + +This PEP proposes a Python Packaging Council with broad authority over packaging standards, tools, and implementations. Like the Python Steering Council, they seek to exercise this authority as rarely as possible; instead, they use this power to establish standard processes. + +Like :pep:`8016`, instead of trying to do everything in one PEP, this PEP focuses on providing a minimal-but-solid foundation for further governance decisions. + +======================== +Motivation and Rationale +======================== + +As Python packaging has matured, several interrelated problems with the current way of managing the technical development, decision making and processes have become apparent. + +---- +PyPA +---- + +The `Python Packaging Authority (PyPA)`_ was created to take over the maintenance of `pip`_ and `virtualenv`_ from Ian Bicking, led by Brian Rosner, Carl Meyer and Jannis Leidel. Over the years, additional projects got added to the PyPA and the tooling maintained by the PyPA became the baseline tooling for Python packaging, with additional package ecosystems using and building on top of the tools and interoperability standards maintained by the PyPA. + +:pep:`609` formalised PyPA's authority over the existing packaging tools, the interoperability standards and their operation as a group of independent projects under the same umbrella that aim to be interoperable. It also stated that PyPA should be expected to provide opinions, insight and experience when ecosystem-wide changes are being proposed. In particular, the work to support existing projects and maintain a user guide has been excellent. + +At the time of writing, PyPA is still less formal than its counterpart on the CPython side. It does not have a community elected body and individuals within the group meet ad hoc, rather than on a regular cadence. The PyPA itself is defined by a group of projects rather than as a group of individuals, with no direct oversight over its individuals. + +------------ +Packaging-WG +------------ + +The PSF's `Packaging Workgroup`_ was created to support the larger efforts of improving and maintaining the packaging ecosystem in Python through fundraising and disbursement of raised funds. It was expected to largely focus on efforts such as PyPI, pip, packaging.python.org, setuptools, and cross-project efforts. + +The group made very good progress here in the past, but the scope and scale of supporting Python's packaging ecosystem has grown considerably in the last few years. There is both more work to be done and more stakeholders than ever before. The Packaging Workgroup is also not a community elected body and does not have a regular mechanism for changing, adding or removing members. + +-------------------------- +Interoperability Standards +-------------------------- + +The PyPA is responsible for creating and maintaining the interoperability standards for Python packaging tools. The decision making for updating these standards involves a standing delegation from the Python Steering Council to specific individuals based on specific topics, and these individuals have the ability to further delegate the decision making on the changes to other individuals. + +We know that this process is not sustainable and there has been a desire expressed by many to have a designated body to make these decisions (including the individuals with the standing delegations). + +----------------------- +Python Steering Council +----------------------- + +While there is overlap between the PyPA, Packaging-WG as well as the Python core team, the Steering Council is not well-placed to make decisions over Python packaging matters directly. Packaging only tangentially intersects with Python language evolution, packaging requires specialised expertise and deep domain knowledge (much like typing or the C API), and there is a different cohort of potential electors for a Packaging Council than the Steering Council. + +------------ +Expectations +------------ + +An elected Packaging Council that has authority over the interoperability standards and Python packaging tooling would have the mandate to coordinate efforts around Python packaging. This would provide a better, more consistent experience to packagers, package consumers, tool developers, PyPI, and other index maintainers. With greater transparency and clearer goals via an elected Packaging Council, the PSF will also be able to offer more tactical work, longer term strategic vision, and fundraising support to all parts of this ecosystem. + +Some expectations around the formation of a Packaging Council are that they will facilitate: + +* Work with PSF staff and the newly formed `User Success Workgroup`_ toward improving the user experience around packaging. +* A more stable packaging ecosystem that is more responsive to community input. +* Increased transparency and clearer shared goals for the packaging ecosystem. +* Increased tactical and fundraising support from the PSF, to increase capacity and funding available to packaging tools. + +============= +Specification +============= + +----------------- +Packaging Council +----------------- + +The Packaging Council will be composed of 5 individuals. + +Mandate +======= + +The council shall work to: + +* Improve Python packaging's user experience. +* Maintain the quality and stability of the Python packaging standards. +* Formalise and maintain the relationship with the core team as well as the PSF. +* Establish appropriate decision-making processes. +* Seek consensus among contributors before acting in a formal capacity. +* Make contributing as accessible, inclusive, and sustainable as possible. + +Responsibilities +================ + +The council shall: + +* have broad authority over the Python packaging standards and Python Packaging User Guide, that are maintained on packaging.python.org. +* establish processes for making binding decisions regarding packaging standards, tools and implementations as well as for considering ecosystem-wide changes. +* look for ways to use their direct authority as little as possible – seeking consensus/consent over voting. + +To use its powers, the council votes. Every council member must either vote or explicitly abstain. Members with conflicts of interest on a particular vote must abstain. Passing requires support from a majority of non-abstaining council members. + +Whenever possible, the council is expected to share its decisions and processes publicly in a timely fashion. + +Delegations +----------- + +The Python Steering Council would be 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 PSF Board would be encouraged to formally deprecate the Packaging workgroup and the Packaging Council would wholly take on the responsibilities of the PSF's Packaging workgroup. + +The PyPA would be expected to work with the Packaging Council to establish a decision making process that governs the technical projects under the PyPA umbrella. + +Processes +========= + +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 core team 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. + +The election process is managed by a returns officer nominated by the outgoing Packaging Council. For the initial election, the returns officer will be nominated by the PSF Executive Director. + +The PSF shall maintain records of the elections as well as run the annual election for the council. + +Term +---- + +There shall be two cohorts of council members: Cohort A composed of two (2) members and Cohort B composed of three (3) 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 vacant, in which case such replacement members shall be elected to a term sufficient to complete a two-year term as measured from the term of the original cohort. + +Each council member's term will be two (2) years, from when their elections are 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 (2) year term, and the three candidates receiving the highest number of votes after shall be designated Cohort B with a one (1) year term. + +There are no term limits for individual council members. + +Vacancies +--------- + +Council members may resign their position at any time. + +Whenever there is a vacancy during the regular council term, the council may vote to appoint a replacement to serve out the rest of the term. + +If a council member drops out of touch and cannot be contacted for a month or longer, then the rest of the council may vote to replace them (with a simple majority vote, not counting the relevant member). + +Conflicts of interest +--------------------- + +No more than two Packaging Council members should be employed by or significantly affiliated with the same entity. + +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. + +In a council election, if more than 2 of the top 5 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 council is formed. + +During a council term, if changing circumstances cause this rule to be broken (for instance, due to a council member changing employment), then one or more council members must resign to remedy the issue, and the resulting vacancies can then be filled as normal. + +------------------- +Packaging community +------------------- + +Responsibility +============== + +Packaging community 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: + +* 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. +* 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 7 members by sending an email to \[todo\]. + +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%. + +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. + +Removal of a member +------------------- + +In order to maintain a reasonable expectation of quorum, failure to participate in Packaging Council elections for two consecutive council elections automatically removes a person from the list of voting members, until they 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 5 individuals). If the ejected Packaging community member is also on the Packaging Council, then they are removed from the council as well. + +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. + +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. + +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 succeeds. Quorum for a vote of no confidence is 50%. + +There are two forms of no-confidence votes: those targeting a single member, and those targeting the council as a whole. The initial call for a no-confidence vote must specify which type is intended. If a single-member vote succeeds, then that member is removed from the council and the resulting vacancy can be handled in the usual way. If a whole-council vote succeeds, the council is dissolved and a new council election is triggered immediately. + +----------------------- +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. + +============== +Rejected Ideas +============== + +---------------------------------------- +Annual elections for all council members +---------------------------------------- + +An annual term for council members is the approach taken for the Python steering council's elections. This PEP uses a cohort-based model, derived from the PSF Board's elections which enables continuity of members across a changing council. + +There is a trade-off between continuity of the council and reshuffles. This PEP takes the position that continuity will be more valuable for the Python Packaging space, especially combined with the vote of no confidence, automatic removal of inactive voters and regular elections. + +------------------------------- +Term limits for council members +------------------------------- + +While this is viewed as valuable for boards in general, this was rejected because of the size of the pool of interested and qualified people who might serve. + +------------------------------- +Approval voting in the election +------------------------------- + +An earlier non-public draft of this PEP utilised an approval voting process, which aligned with what :pep:`13` stated at the time of writing. The Python core team has changed their governance to utilise BLOC-STAR and this PEP was updated to align with that for the same reasons as the core teams' move to BLOC STAR: it better captures voter intention in the results. + +------------------------------------------------------------------ +Disallow multiple people from the same organisation on the council +------------------------------------------------------------------ + +This PEP currently mirrors the Python Steering Council's limit, that at most 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 max 2, plus votes of no confidence is probably sufficient safety from any undo employer influence. + +--------------------------------------------------------------------------- +Establishing specific processes for Packaging Council and PyPA relationship +--------------------------------------------------------------------------- + +As noted in the abstract, the focus of this PEP is on providing a minimal-but-solid foundation for further governance decisions. The specifics of this relationship would be figured out by the inaugural council. + +======================================= +Appendix: Approval process for this PEP +======================================= + +This PEP would likely require an atypical process for approval given that it requires changes to PyPA's governance (which involves a PyPA-committers vote) and it requires the Python Steering Council to change their delegations. + +To that end, the process for approval for this PEP will be: + +* Submit this PEP for a vote on pypa-committers, in accordance with the process outline in :pep:`609`. +* Submit this PEP for the Python Steering Council's comments and approval. +* Reconcile any outstanding variances in text and repeat, if necessary. + +================================================= +Appendix: Operational suggestions for the council +================================================= + +This section is based on what the PEP's authors view as things that would be beneficial for the Packaging Council to establish operational processes for. These are non-binding yet strongly encouraged. + +The PSF will designate a staff person to be the Packaging Council's official liaison who will regularly attend meetings, since it is expected that the 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 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 PSF to establish outcomes and a reasonable budget. +* The Packaging Council (similar to the Steering Council) is encouraged to communicate with and when necessary seek advice from the PSF's Conduct Working Group. +* Find ways to regularly synchronise with the Steering Council. +* Publish public agendas and minutes in a timely fashion. +* Provide casual real-time opportunities for people to bring topics that are not PEPs, like office hours, a forum channel, or panels at Python events. + +.. _Python Packaging Authority (PyPA): https://packaging.python.org/en/latest/glossary/#term-Python-Packaging-Authority-PyPA +.. _pip: https://packaging.python.org/en/latest/key_projects/#pip +.. _virtualenv: https://packaging.python.org/en/latest/key_projects/#virtualenv +.. _Packaging Workgroup: https://wiki.python.org/psf/PackagingWG +.. _User Success Workgroup: https://github.com/psf/user-success-wg/ +.. _STAR voting system: https://www.starvoting.org/ +.. _Multi-winner Bloc STAR: https://www.starvoting.org/multi_winner From 6fe0aece6dfb5c0e90a9ac7700228e746de5658b Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2025 22:43:05 +0000 Subject: [PATCH 02/13] !fixup Rewrap at column 79 --- peps/pep-0772.rst | 307 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 235 insertions(+), 72 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 818da156358..d794a57ebc0 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -14,60 +14,110 @@ Replaces: 609 Abstract ======== -This PEP proposes a Python Packaging Council with broad authority over packaging standards, tools, and implementations. Like the Python Steering Council, they seek to exercise this authority as rarely as possible; instead, they use this power to establish standard processes. +This PEP proposes a Python Packaging Council with broad authority over +packaging standards, tools, and implementations. Like the Python Steering +Council, they seek to exercise this authority as rarely as possible; instead, +they use this power to establish standard processes. -Like :pep:`8016`, instead of trying to do everything in one PEP, this PEP focuses on providing a minimal-but-solid foundation for further governance decisions. +Like :pep:`8016`, instead of trying to do everything in one PEP, this PEP +focuses on providing a minimal-but-solid foundation for further governance +decisions. ======================== Motivation and Rationale ======================== -As Python packaging has matured, several interrelated problems with the current way of managing the technical development, decision making and processes have become apparent. +As Python packaging has matured, several interrelated problems with the current +way of managing the technical development, decision making and processes have +become apparent. ---- PyPA ---- -The `Python Packaging Authority (PyPA)`_ was created to take over the maintenance of `pip`_ and `virtualenv`_ from Ian Bicking, led by Brian Rosner, Carl Meyer and Jannis Leidel. Over the years, additional projects got added to the PyPA and the tooling maintained by the PyPA became the baseline tooling for Python packaging, with additional package ecosystems using and building on top of the tools and interoperability standards maintained by the PyPA. - -:pep:`609` formalised PyPA's authority over the existing packaging tools, the interoperability standards and their operation as a group of independent projects under the same umbrella that aim to be interoperable. It also stated that PyPA should be expected to provide opinions, insight and experience when ecosystem-wide changes are being proposed. In particular, the work to support existing projects and maintain a user guide has been excellent. - -At the time of writing, PyPA is still less formal than its counterpart on the CPython side. It does not have a community elected body and individuals within the group meet ad hoc, rather than on a regular cadence. The PyPA itself is defined by a group of projects rather than as a group of individuals, with no direct oversight over its individuals. +The `Python Packaging Authority (PyPA)`_ was created to take over the +maintenance of `pip`_ and `virtualenv`_ from Ian Bicking, led by Brian Rosner, +Carl Meyer and Jannis Leidel. Over the years, additional projects got added to +the PyPA and the tooling maintained by the PyPA became the baseline tooling for +Python packaging, with additional package ecosystems using and building on top +of the tools and interoperability standards maintained by the PyPA. + +:pep:`609` formalised PyPA's authority over the existing packaging tools, the +interoperability standards and their operation as a group of independent +projects under the same umbrella that aim to be interoperable. It also stated +that PyPA should be expected to provide opinions, insight and experience when +ecosystem-wide changes are being proposed. In particular, the work to support +existing projects and maintain a user guide has been excellent. + +At the time of writing, PyPA is still less formal than its counterpart on the +CPython side. It does not have a community elected body and individuals within +the group meet ad hoc, rather than on a regular cadence. The PyPA itself is +defined by a group of projects rather than as a group of individuals, with no +direct oversight over its individuals. ------------ Packaging-WG ------------ -The PSF's `Packaging Workgroup`_ was created to support the larger efforts of improving and maintaining the packaging ecosystem in Python through fundraising and disbursement of raised funds. It was expected to largely focus on efforts such as PyPI, pip, packaging.python.org, setuptools, and cross-project efforts. +The PSF's `Packaging Workgroup`_ was created to support the larger efforts of +improving and maintaining the packaging ecosystem in Python through fundraising +and disbursement of raised funds. It was expected to largely focus on efforts +such as PyPI, pip, packaging.python.org, setuptools, and cross-project efforts. -The group made very good progress here in the past, but the scope and scale of supporting Python's packaging ecosystem has grown considerably in the last few years. There is both more work to be done and more stakeholders than ever before. The Packaging Workgroup is also not a community elected body and does not have a regular mechanism for changing, adding or removing members. +The group made very good progress here in the past, but the scope and scale of +supporting Python's packaging ecosystem has grown considerably in the last few +years. There is both more work to be done and more stakeholders than ever +before. The Packaging Workgroup is also not a community elected body and does +not have a regular mechanism for changing, adding or removing members. -------------------------- Interoperability Standards -------------------------- -The PyPA is responsible for creating and maintaining the interoperability standards for Python packaging tools. The decision making for updating these standards involves a standing delegation from the Python Steering Council to specific individuals based on specific topics, and these individuals have the ability to further delegate the decision making on the changes to other individuals. +The PyPA is responsible for creating and maintaining the interoperability +standards for Python packaging tools. The decision making for updating these +standards involves a standing delegation from the Python Steering Council to +specific individuals based on specific topics, and these individuals have the +ability to further delegate the decision making on the changes to other +individuals. -We know that this process is not sustainable and there has been a desire expressed by many to have a designated body to make these decisions (including the individuals with the standing delegations). +We know that this process is not sustainable and there has been a desire +expressed by many to have a designated body to make these decisions (including +the individuals with the standing delegations). ----------------------- Python Steering Council ----------------------- -While there is overlap between the PyPA, Packaging-WG as well as the Python core team, the Steering Council is not well-placed to make decisions over Python packaging matters directly. Packaging only tangentially intersects with Python language evolution, packaging requires specialised expertise and deep domain knowledge (much like typing or the C API), and there is a different cohort of potential electors for a Packaging Council than the Steering Council. +While there is overlap between the PyPA, Packaging-WG as well as the Python +core team, the Steering Council is not well-placed to make decisions over +Python packaging matters directly. Packaging only tangentially intersects with +Python language evolution, packaging requires specialised expertise and deep +domain knowledge (much like typing or the C API), and there is a different +cohort of potential electors for a Packaging Council than the Steering Council. ------------ Expectations ------------ -An elected Packaging Council that has authority over the interoperability standards and Python packaging tooling would have the mandate to coordinate efforts around Python packaging. This would provide a better, more consistent experience to packagers, package consumers, tool developers, PyPI, and other index maintainers. With greater transparency and clearer goals via an elected Packaging Council, the PSF will also be able to offer more tactical work, longer term strategic vision, and fundraising support to all parts of this ecosystem. +An elected Packaging Council that has authority over the interoperability +standards and Python packaging tooling would have the mandate to coordinate +efforts around Python packaging. This would provide a better, more consistent +experience to packagers, package consumers, tool developers, PyPI, and other +index maintainers. With greater transparency and clearer goals via an elected +Packaging Council, the PSF will also be able to offer more tactical work, +longer term strategic vision, and fundraising support to all parts of this +ecosystem. -Some expectations around the formation of a Packaging Council are that they will facilitate: +Some expectations around the formation of a Packaging Council are that they +will facilitate: -* Work with PSF staff and the newly formed `User Success Workgroup`_ toward improving the user experience around packaging. +* Work with PSF staff and the newly formed `User Success Workgroup`_ toward + improving the user experience around packaging. * A more stable packaging ecosystem that is more responsive to community input. * Increased transparency and clearer shared goals for the packaging ecosystem. -* Increased tactical and fundraising support from the PSF, to increase capacity and funding available to packaging tools. +* Increased tactical and fundraising support from the PSF, to increase capacity + and funding available to packaging tools. ============= Specification @@ -86,7 +136,8 @@ The council shall work to: * Improve Python packaging's user experience. * Maintain the quality and stability of the Python packaging standards. -* Formalise and maintain the relationship with the core team as well as the PSF. +* Formalise and maintain the relationship with the core team as well as the + PSF. * Establish appropriate decision-making processes. * Seek consensus among contributors before acting in a formal capacity. * Make contributing as accessible, inclusive, and sustainable as possible. @@ -96,22 +147,38 @@ Responsibilities The council shall: -* have broad authority over the Python packaging standards and Python Packaging User Guide, that are maintained on packaging.python.org. -* establish processes for making binding decisions regarding packaging standards, tools and implementations as well as for considering ecosystem-wide changes. -* look for ways to use their direct authority as little as possible – seeking consensus/consent over voting. +* have broad authority over the Python packaging standards and Python Packaging + User Guide, that are maintained on packaging.python.org. +* establish processes for making binding decisions regarding packaging + standards, tools and implementations as well as for considering + ecosystem-wide changes. +* look for ways to use their direct authority as little as possible – seeking + consensus/consent over voting. -To use its powers, the council votes. Every council member must either vote or explicitly abstain. Members with conflicts of interest on a particular vote must abstain. Passing requires support from a majority of non-abstaining council members. +To use its powers, the council votes. Every council member must either vote or +explicitly abstain. Members with conflicts of interest on a particular vote +must abstain. Passing requires support from a majority of non-abstaining +council members. -Whenever possible, the council is expected to share its decisions and processes publicly in a timely fashion. +Whenever possible, the council is expected to share its decisions and processes +publicly in a timely fashion. Delegations ----------- -The Python Steering Council would be 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 would be 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 PSF Board would be encouraged to formally deprecate the Packaging workgroup and the Packaging Council would wholly take on the responsibilities of the PSF's Packaging workgroup. +The PSF Board would be encouraged to formally deprecate the Packaging workgroup +and the Packaging Council would wholly take on the responsibilities of the +PSF's Packaging workgroup. -The PyPA would be expected to work with the Packaging Council to establish a decision making process that governs the technical projects under the PyPA umbrella. +The PyPA would be expected to work with the Packaging Council to establish a +decision making process that governs the technical projects under the PyPA +umbrella. Processes ========= @@ -121,25 +188,43 @@ 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 core team 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 member of the Packaging community (defined later in this document) + can self-nominate themselves for the council elections. +* Phase 2: Each core team 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. -The election process is managed by a returns officer nominated by the outgoing Packaging Council. For the initial election, the returns officer will be nominated by the PSF Executive Director. +The election process is managed by a returns officer nominated by the outgoing +Packaging Council. For the initial election, the returns officer will be +nominated by the PSF Executive Director. -The PSF shall maintain records of the elections as well as run the annual election for the council. +The PSF shall maintain records of the elections as well as run the annual +election for the council. Term ---- -There shall be two cohorts of council members: Cohort A composed of two (2) members and Cohort B composed of three (3) members. +There shall be two cohorts of council members: Cohort A composed of two (2) +members and Cohort B composed of three (3) 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 vacant, in which case such replacement members shall be elected to a term sufficient to complete a two-year term as measured from the term of the original cohort. +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 +vacant, in which case such replacement members shall be elected to a term +sufficient to complete a two-year term as measured from the term of the +original cohort. -Each council member's term will be two (2) years, from when their elections are finalised until the next elections for their cohort are finalised. +Each council member's term will be two (2) years, from when their elections are +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 (2) year term, and the three candidates receiving the highest number of votes after shall be designated Cohort B with a one (1) year term. +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 (2) year term, and the three candidates +receiving the highest number of votes after shall be designated Cohort B with a +one (1) year term. There are no term limits for individual council members. @@ -148,20 +233,32 @@ Vacancies Council members may resign their position at any time. -Whenever there is a vacancy during the regular council term, the council may vote to appoint a replacement to serve out the rest of the term. +Whenever there is a vacancy during the regular council term, the council may +vote to appoint a replacement to serve out the rest of the term. -If a council member drops out of touch and cannot be contacted for a month or longer, then the rest of the council may vote to replace them (with a simple majority vote, not counting the relevant member). +If a council member drops out of touch and cannot be contacted for a month or +longer, then the rest of the council may vote to replace them (with a simple +majority vote, not counting the relevant member). Conflicts of interest --------------------- -No more than two Packaging Council members should be employed by or significantly affiliated with the same entity. +No more than two Packaging Council members should be employed by or +significantly affiliated with the same entity. -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. +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. -In a council election, if more than 2 of the top 5 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 council is formed. +In a council election, if more than 2 of the top 5 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 +council is formed. -During a council term, if changing circumstances cause this rule to be broken (for instance, due to a council member changing employment), then one or more council members must resign to remedy the issue, and the resulting vacancies can then be filled as normal. +During a council term, if changing circumstances cause this rule to be broken +(for instance, due to a council member changing employment), then one or more +council members must resign to remedy the issue, and the resulting vacancies +can then be filled as normal. ------------------- Packaging community @@ -170,7 +267,8 @@ Packaging community Responsibility ============== -Packaging community members participate in formal votes to elect the Packaging Council. +Packaging community members participate in formal votes to elect the Packaging +Council. Processes ========= @@ -178,43 +276,75 @@ 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: - -* 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. -* 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 7 members by sending an email to \[todo\]. +Initial membership in the Packaging community 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. +* 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 7 members by sending an + email to \[todo\]. 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%. +Members are added to the Packaging community 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 Packaging community member calls +for one publicly on an appropriate communication channel, and another Packaging +community member seconds the call within two weeks. Removal of a member ------------------- -In order to maintain a reasonable expectation of quorum, failure to participate in Packaging Council elections for two consecutive council elections automatically removes a person from the list of voting members, until they re-submit their intention to resume their participation to the Packaging Council in writing. +In order to maintain a reasonable expectation of quorum, failure to participate +in Packaging Council elections for two consecutive council elections +automatically removes a person from the list of voting members, until they +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 5 individuals). If the ejected Packaging community member is also on the Packaging Council, then they are removed from the council as well. +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 5 individuals). If the ejected Packaging community member is also +on the Packaging Council, then they are removed from the council as well. 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 Packaging community 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 Packaging community member calls for +one publicly on an appropriate public communication channel, and another +Packaging community 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 succeeds. Quorum for a vote of no confidence is 50%. +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 +succeeds. Quorum for a vote of no confidence is 50%. -There are two forms of no-confidence votes: those targeting a single member, and those targeting the council as a whole. The initial call for a no-confidence vote must specify which type is intended. If a single-member vote succeeds, then that member is removed from the council and the resulting vacancy can be handled in the usual way. If a whole-council vote succeeds, the council is dissolved and a new council election is triggered immediately. +There are two forms of no-confidence votes: those targeting a single member, +and those targeting the council as a whole. The initial call for a +no-confidence vote must specify which type is intended. If a single-member vote +succeeds, then that member is removed from the council and the resulting +vacancy can be handled in the usual way. If a whole-council vote succeeds, the +council is dissolved and a new council election is triggered immediately. ----------------------- 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. +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. ============== Rejected Ideas @@ -224,45 +354,67 @@ Rejected Ideas Annual elections for all council members ---------------------------------------- -An annual term for council members is the approach taken for the Python steering council's elections. This PEP uses a cohort-based model, derived from the PSF Board's elections which enables continuity of members across a changing council. +An annual term for council members is the approach taken for the Python +steering council's elections. This PEP uses a cohort-based model, derived from +the PSF Board's elections which enables continuity of members across a changing +council. -There is a trade-off between continuity of the council and reshuffles. This PEP takes the position that continuity will be more valuable for the Python Packaging space, especially combined with the vote of no confidence, automatic removal of inactive voters and regular elections. +There is a trade-off between continuity of the council and reshuffles. This PEP +takes the position that continuity will be more valuable for the Python +Packaging space, especially combined with the vote of no confidence, automatic +removal of inactive voters and regular elections. ------------------------------- Term limits for council members ------------------------------- -While this is viewed as valuable for boards in general, this was rejected because of the size of the pool of interested and qualified people who might serve. +While this is viewed as valuable for boards in general, this was rejected +because of the size of the pool of interested and qualified people who might +serve. ------------------------------- Approval voting in the election ------------------------------- -An earlier non-public draft of this PEP utilised an approval voting process, which aligned with what :pep:`13` stated at the time of writing. The Python core team has changed their governance to utilise BLOC-STAR and this PEP was updated to align with that for the same reasons as the core teams' move to BLOC STAR: it better captures voter intention in the results. +An earlier non-public draft of this PEP utilised an approval voting process, +which aligned with what :pep:`13` stated at the time of writing. The Python +core team has changed their governance to utilise BLOC-STAR and this PEP was +updated to align with that for the same reasons as the core teams' move to BLOC +STAR: it better captures voter intention in the results. ------------------------------------------------------------------ Disallow multiple people from the same organisation on the council ------------------------------------------------------------------ -This PEP currently mirrors the Python Steering Council's limit, that at most two individuals related to a single organisation can be on the council. +This PEP currently mirrors the Python Steering Council's limit, that at most +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 max 2, plus votes of no confidence is probably sufficient safety from any undo employer influence. +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 max 2, plus votes of no confidence is probably +sufficient safety from any undo employer influence. --------------------------------------------------------------------------- Establishing specific processes for Packaging Council and PyPA relationship --------------------------------------------------------------------------- -As noted in the abstract, the focus of this PEP is on providing a minimal-but-solid foundation for further governance decisions. The specifics of this relationship would be figured out by the inaugural council. +As noted in the abstract, the focus of this PEP is on providing a +minimal-but-solid foundation for further governance decisions. The specifics of +this relationship would be figured out by the inaugural council. ======================================= Appendix: Approval process for this PEP ======================================= -This PEP would likely require an atypical process for approval given that it requires changes to PyPA's governance (which involves a PyPA-committers vote) and it requires the Python Steering Council to change their delegations. +This PEP would likely require an atypical process for approval given that it +requires changes to PyPA's governance (which involves a PyPA-committers vote) +and it requires the Python Steering Council to change their delegations. To that end, the process for approval for this PEP will be: -* Submit this PEP for a vote on pypa-committers, in accordance with the process outline in :pep:`609`. +* Submit this PEP for a vote on pypa-committers, in accordance with the process + outline in :pep:`609`. * Submit this PEP for the Python Steering Council's comments and approval. * Reconcile any outstanding variances in text and repeat, if necessary. @@ -270,18 +422,29 @@ To that end, the process for approval for this PEP will be: Appendix: Operational suggestions for the council ================================================= -This section is based on what the PEP's authors view as things that would be beneficial for the Packaging Council to establish operational processes for. These are non-binding yet strongly encouraged. +This section is based on what the PEP's authors view as things that would be +beneficial for the Packaging Council to establish operational processes for. +These are non-binding yet strongly encouraged. -The PSF will designate a staff person to be the Packaging Council's official liaison who will regularly attend meetings, since it is expected that the Packaging Council will meet on a regular basis (twice a month). +The PSF will designate a staff person to be the Packaging Council's official +liaison who will regularly attend meetings, since it is expected that the +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 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 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 PSF to establish outcomes and a reasonable budget. -* The Packaging Council (similar to the Steering Council) is encouraged to communicate with and when necessary seek advice from the PSF's Conduct Working Group. +* 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 + PSF to establish outcomes and a reasonable budget. +* The Packaging Council (similar to the Steering Council) is encouraged to + communicate with and when necessary seek advice from the PSF's Conduct + Working Group. * Find ways to regularly synchronise with the Steering Council. * Publish public agendas and minutes in a timely fashion. -* Provide casual real-time opportunities for people to bring topics that are not PEPs, like office hours, a forum channel, or panels at Python events. +* Provide casual real-time opportunities for people to bring topics that are + not PEPs, like office hours, a forum channel, or panels at Python events. .. _Python Packaging Authority (PyPA): https://packaging.python.org/en/latest/glossary/#term-Python-Packaging-Authority-PyPA .. _pip: https://packaging.python.org/en/latest/key_projects/#pip From f0ea955e4ade08811ac9de97343a95942f62b41a Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2025 22:52:03 +0000 Subject: [PATCH 03/13] !fixup Address Hugo's review comments Co-Authored-By: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- peps/pep-0772.rst | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index d794a57ebc0..30023f2998d 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -6,7 +6,7 @@ Author: Barry Warsaw , Status: Draft Type: Process Topic: Governance, Packaging -Created: 31-Dec-2024 +Created: 21-Jan-2025 Replaces: 609 @@ -62,7 +62,7 @@ Packaging-WG The PSF's `Packaging Workgroup`_ was created to support the larger efforts of improving and maintaining the packaging ecosystem in Python through fundraising and disbursement of raised funds. It was expected to largely focus on efforts -such as PyPI, pip, packaging.python.org, setuptools, and cross-project efforts. +such as PyPI, pip, packaging.python.org, Setuptools, and cross-project efforts. The group made very good progress here in the past, but the scope and scale of supporting Python's packaging ecosystem has grown considerably in the last few @@ -172,9 +172,9 @@ would work together on issues that intersect the packaging domain and language stewardship (including the CPython implementation, standard library, and distribution). -The PSF Board would be encouraged to formally deprecate the Packaging workgroup +The PSF Board would be encouraged to formally deprecate the Packaging Workgroup and the Packaging Council would wholly take on the responsibilities of the -PSF's Packaging workgroup. +PSF's Packaging Workgroup. The PyPA would be expected to work with the Packaging Council to establish a decision making process that governs the technical projects under the PyPA @@ -314,8 +314,8 @@ 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 5 individuals). If the ejected Packaging community member is also -on the Packaging Council, then they are removed from the council as well. +council with 5 members). If the ejected Packaging community member is also on +the Packaging Council, then they are removed from the council as well. Vote of no confidence --------------------- @@ -355,7 +355,7 @@ Annual elections for all council members ---------------------------------------- An annual term for council members is the approach taken for the Python -steering council's elections. This PEP uses a cohort-based model, derived from +Steering Council's elections. This PEP uses a cohort-based model, derived from the PSF Board's elections which enables continuity of members across a changing council. @@ -376,11 +376,11 @@ serve. Approval voting in the election ------------------------------- -An earlier non-public draft of this PEP utilised an approval voting process, -which aligned with what :pep:`13` stated at the time of writing. The Python -core team has changed their governance to utilise BLOC-STAR and this PEP was -updated to align with that for the same reasons as the core teams' move to BLOC -STAR: it better captures voter intention in the results. +An earlier non-public draft of this PEP used an approval voting process, which +aligned with what :pep:`13` stated at the time of writing. The Python core team +has changed their governance to use Bloc STAR and this PEP was updated to align +with that for the same reasons as the core team's move to Bloc STAR: it better +captures voter intention in the results. ------------------------------------------------------------------ Disallow multiple people from the same organisation on the council @@ -393,7 +393,7 @@ 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 max 2, plus votes of no confidence is probably -sufficient safety from any undo employer influence. +sufficient safety from any undue employer influence. --------------------------------------------------------------------------- Establishing specific processes for Packaging Council and PyPA relationship @@ -413,8 +413,8 @@ and it requires the Python Steering Council to change their delegations. To that end, the process for approval for this PEP will be: -* Submit this PEP for a vote on pypa-committers, in accordance with the process - outline in :pep:`609`. +* Submit this PEP for a vote on the pypa-committers mailing list, in accordance + with the process outlined in :pep:`609`. * Submit this PEP for the Python Steering Council's comments and approval. * Reconcile any outstanding variances in text and repeat, if necessary. From 52be81ae0ddfddd7733ea8ab2e141a3aa47163e8 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2025 22:57:00 +0000 Subject: [PATCH 04/13] !fixup Clarify what an entity means --- peps/pep-0772.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 30023f2998d..404e9dc1ceb 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -244,7 +244,9 @@ Conflicts of interest --------------------- No more than two Packaging Council members should be employed by or -significantly affiliated with the same entity. +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. 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 From 60694f948f32537361f64a498c54c9d334980895 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2025 23:02:35 +0000 Subject: [PATCH 05/13] !fixup Add voting timeline for adding a new member --- peps/pep-0772.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 404e9dc1ceb..695b9e52a99 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -303,6 +303,8 @@ 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. +The vote lasts for two weeks. Packaging community members vote for or against. + Removal of a member ------------------- From 35bcce8112ae0da5abb28bfcdebf323edf613e35 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2025 23:09:05 +0000 Subject: [PATCH 06/13] !fixup Clarify the language around removal of council member --- peps/pep-0772.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 695b9e52a99..0e72ef3e283 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -318,8 +318,12 @@ 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 5 members). If the ejected Packaging community member is also on -the Packaging Council, then they are removed from the council as well. +council with 5 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. Vote of no confidence --------------------- From c083a36812bb689bfb4612c706e3c40c9b1e9327 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Sat, 25 Jan 2025 10:30:33 -0800 Subject: [PATCH 07/13] Update SC synchronization language --- peps/pep-0772.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 0e72ef3e283..ef3bd318182 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -449,7 +449,7 @@ Packaging Council will meet on a regular basis (twice a month). * The Packaging Council (similar to the Steering Council) is encouraged to communicate with and when necessary seek advice from the PSF's Conduct Working Group. -* Find ways to regularly synchronise with the Steering Council. +* Regularly synchronize with the Steering Council on a mutually agreed cadence, with a recommended frequency of no less than once per quarter. * Publish public agendas and minutes in a timely fashion. * Provide casual real-time opportunities for people to bring topics that are not PEPs, like office hours, a forum channel, or panels at Python events. From 6ca8243aa59a778429875e6e9a082958f6c40766 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 25 Jan 2025 19:36:36 +0000 Subject: [PATCH 08/13] Address various review comments --- peps/pep-0772.rst | 75 ++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index ef3bd318182..3664d92c4bb 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -16,8 +16,8 @@ Abstract This PEP proposes a Python Packaging Council with broad authority over packaging standards, tools, and implementations. Like the Python Steering -Council, they seek to exercise this authority as rarely as possible; instead, -they use this power to establish standard processes. +Council, the Packaging Council seeks to exercise this authority as rarely as +possible; instead, they use this power to establish standard processes. Like :pep:`8016`, instead of trying to do everything in one PEP, this PEP focuses on providing a minimal-but-solid foundation for further governance @@ -49,11 +49,10 @@ that PyPA should be expected to provide opinions, insight and experience when ecosystem-wide changes are being proposed. In particular, the work to support existing projects and maintain a user guide has been excellent. -At the time of writing, PyPA is still less formal than its counterpart on the -CPython side. It does not have a community elected body and individuals within -the group meet ad hoc, rather than on a regular cadence. The PyPA itself is -defined by a group of projects rather than as a group of individuals, with no -direct oversight over its individuals. +At the time of writing, PyPA does not have a community elected body and +individuals within the group meet ad hoc, rather than on a regular cadence. The +PyPA itself is defined by a group of projects rather than as a group of +individuals, with no direct oversight over its individuals. ------------ Packaging-WG @@ -62,7 +61,8 @@ Packaging-WG The PSF's `Packaging Workgroup`_ was created to support the larger efforts of improving and maintaining the packaging ecosystem in Python through fundraising and disbursement of raised funds. It was expected to largely focus on efforts -such as PyPI, pip, packaging.python.org, Setuptools, and cross-project efforts. +such as Python Package Index (PyPI), pip, packaging.python.org, Setuptools, and +cross-project efforts. The group made very good progress here in the past, but the scope and scale of supporting Python's packaging ecosystem has grown considerably in the last few @@ -89,25 +89,25 @@ the individuals with the standing delegations). Python Steering Council ----------------------- -While there is overlap between the PyPA, Packaging-WG as well as the Python -core team, the Steering Council is not well-placed to make decisions over -Python packaging matters directly. Packaging only tangentially intersects with -Python language evolution, packaging requires specialised expertise and deep -domain knowledge (much like typing or the C API), and there is a different -cohort of potential electors for a Packaging Council than the Steering Council. +While there is overlap between the PyPA, Packaging-WG, and the Python core +team, the Steering Council is not well-placed to make decisions over Python +packaging matters directly. Packaging only tangentially intersects with Python +language evolution, packaging requires specialised expertise and deep domain +knowledge (much like typing or the C API), and there is a different cohort of +potential electors for a Packaging Council than the Steering Council. ------------ Expectations ------------ -An elected Packaging Council that has authority over the interoperability -standards and Python packaging tooling would have the mandate to coordinate -efforts around Python packaging. This would provide a better, more consistent -experience to packagers, package consumers, tool developers, PyPI, and other -index maintainers. With greater transparency and clearer goals via an elected -Packaging Council, the PSF will also be able to offer more tactical work, -longer term strategic vision, and fundraising support to all parts of this -ecosystem. +An elected Packaging Council would have authority over the interoperability +standards, would guide the packaging tooling provided with CPython, and have +the mandate to coordinate Python packaging efforts. This would provide a +better, more consistent experience to packagers, package consumers, tool +developers, PyPI, and other index maintainers. With greater transparency and +clearer goals via an elected Packaging Council, the PSF will also be able to +offer more tactical work, longer term strategic vision, and fundraising support +to all parts of this ecosystem. Some expectations around the formation of a Packaging Council are that they will facilitate: @@ -147,13 +147,13 @@ Responsibilities The council shall: -* have broad authority over the Python packaging standards and Python Packaging - User Guide, that are maintained on packaging.python.org. -* establish processes for making binding decisions regarding packaging +* Have broad authority over the Python packaging standards and Python Packaging + User Guide, that are maintained on https://packaging.python.org. +* Establish processes for making binding decisions regarding packaging standards, tools and implementations as well as for considering ecosystem-wide changes. -* look for ways to use their direct authority as little as possible – seeking - consensus/consent over voting. +* Look for ways to use their direct authority as little as possible - seeking + consensus and consent over voting. To use its powers, the council votes. Every council member must either vote or explicitly abstain. Members with conflicts of interest on a particular vote @@ -166,17 +166,17 @@ publicly in a timely fashion. Delegations ----------- -The Python Steering Council would be expected to delegate decision making to +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 PSF Board would be encouraged to formally deprecate the Packaging Workgroup -and the Packaging Council would wholly take on the responsibilities of the +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 PyPA would be expected to work with the Packaging Council to establish a +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. @@ -208,8 +208,8 @@ election for the council. Term ---- -There shall be two cohorts of council members: Cohort A composed of two (2) -members and Cohort B composed of three (3) 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 @@ -217,14 +217,14 @@ vacant, in which case such replacement members shall be elected to a term sufficient to complete a two-year term as measured from the term of the original cohort. -Each council member's term will be two (2) years, from when their elections are +Each council member's term will be two years, from when their elections are 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 (2) year term, and the three candidates +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 (1) year term. +one year term. There are no term limits for individual council members. @@ -449,7 +449,8 @@ Packaging Council will meet on a regular basis (twice a month). * The Packaging Council (similar to the Steering Council) is encouraged to communicate with and when necessary seek advice from the PSF's Conduct Working Group. -* Regularly synchronize with the Steering Council on a mutually agreed cadence, with a recommended frequency of no less than once per quarter. +* Regularly synchronize with the Steering Council on a mutually agreed cadence, + with a recommended frequency of no less than once per quarter. * Publish public agendas and minutes in a timely fashion. * Provide casual real-time opportunities for people to bring topics that are not PEPs, like office hours, a forum channel, or panels at Python events. From 41b4490c6de45c2d435976033be52f1b980cb62a Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 25 Jan 2025 20:44:08 +0000 Subject: [PATCH 09/13] Substitute single digit values with numerical words --- peps/pep-0772.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 3664d92c4bb..da1eeb9322e 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -127,7 +127,7 @@ Specification Packaging Council ----------------- -The Packaging Council will be composed of 5 individuals. +The Packaging Council will be composed of five individuals. Mandate ======= @@ -252,8 +252,8 @@ 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. -In a council election, if more than 2 of the top 5 vote-getters work for the -same employer, then whichever of them ranked lowest is disqualified and the +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 council is formed. @@ -290,8 +290,8 @@ includes: 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 7 members by sending an - email to \[todo\]. + Django, are encouraged to initially nominate up to seven members by sending + an email to \[todo\]. Adding a new member ------------------- @@ -318,7 +318,7 @@ 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 5 members). +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 @@ -400,8 +400,8 @@ 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 max 2, plus votes of no confidence is probably -sufficient safety from any undue employer influence. +change. Limiting it to a maximum of two, plus votes of no confidence is +probably sufficient safety from any undue employer influence. --------------------------------------------------------------------------- Establishing specific processes for Packaging Council and PyPA relationship From 245d4a8f393360da859986650afc33905436a84f Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 25 Jan 2025 20:51:01 +0000 Subject: [PATCH 10/13] Fix a confusing copy-paste error related to election voters --- peps/pep-0772.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index da1eeb9322e..414b87c99ab 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -190,8 +190,8 @@ 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 core team member can assign zero to five stars to each - candidate. Voting is performed anonymously. The outcome of the vote is +* 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. From 311b6bad348bf77c65abba294531d6e05124f5cd Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 25 Jan 2025 20:53:09 +0000 Subject: [PATCH 11/13] Use "Returning Officer" instead of "returns officer" --- peps/pep-0772.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 414b87c99ab..90c6ef53d60 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -198,9 +198,9 @@ A council election consists of two phases: Each phase should last two weeks. -The election process is managed by a returns officer nominated by the outgoing -Packaging Council. For the initial election, the returns officer will be -nominated by the PSF Executive Director. +The election process is managed by one Returning Officer nominated by the +outgoing Packaging Council. For the initial election, the Returning Officer +will be nominated by the PSF Executive Director. The PSF shall maintain records of the elections as well as run the annual election for the council. From 07fb7d5e4c756d2d3ad8142815edad2f8ca7ced9 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 25 Jan 2025 21:06:44 +0000 Subject: [PATCH 12/13] Capitalize "Packaging community" consistently --- peps/pep-0772.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 90c6ef53d60..d2b14927abc 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -285,7 +285,7 @@ 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. + will be moved into the Packaging community. * 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 @@ -441,7 +441,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 From cebd22a2fbca4933575d2f4ff1910af17179ad18 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 25 Jan 2025 21:15:33 +0000 Subject: [PATCH 13/13] Clarify language around out-of-touch vote --- peps/pep-0772.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index d2b14927abc..c66f8fba1fa 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -238,7 +238,7 @@ vote to appoint a replacement to serve out the rest of the term. If a council member drops out of touch and cannot be contacted for a month or longer, then the rest of the council may vote to replace them (with a simple -majority vote, not counting the relevant member). +majority vote, where the missing member is recorded as an abstention). Conflicts of interest ---------------------