Thanks @bernatgabor and others for providing your feedback on the PEP. Heads up that this will be a long, and probably scattershot, response!
ObFullDisclosures: I am writing this response primarily as a co-author of this PEP, and have not had detailed discussions with my co-authors about the latest round of replies so their opinions may differ. I’m also a sitting member of the Steering Council (PSC) and may serve on the council that votes on this PEP’s acceptance. But of course may not! given the PSC elections later this year.
Governing documents are incredibly difficult to draft. You want to both lock down certain aspects and leave others underspecified, so that you end up with a functional governing body that also has the flexibility to figure things out on the fly as circumstances require. You have to at least consider every corner case, every possible avenue for subverting the “will of the people”, when even figuring out what that “will” is and who the “people” are is challenging. In the PC case, it’s complicated even more by the existence of multiple deliberation/decision making bodies, the loose nature of the PyPA, the delegation of powers, and the diverse and diffuse interests.
I’ll also point out that the current state of the PEP is the result of many hours of online and in-person deliberation, notably at PyCon 2025 amongst @geofft, @willingc, the PEP authors, and others at the packaging summit, the input from the PSF Board, and other input from folks online, in-person, in public, and in private. This is also the 3rd round of DPO threads, and everyone knows how hard it is to keep up on DPO.
As others have pointed out, while this PEP is modeled on the PEP 13, it must by its nature be different. In many ways I think it’s harder to govern packaging than it is for CPython. There’s a much longer and broader tail to any changes in the packaging ecosystem, and it reaches and touches (in my subjective opinion) vastly more unrepresented users than CPython evolution does. Packaging also long tradition of being a more decentralized effort, which is both good and bad, and which both has its proponents and detractors.
And yet, one thing we can all agree on is that packaging is incredibly important to Python’s success, past, present, and future.
One thing that hasn’t been mentioned yet is why the PSF is a key partner in the future of packaging: the PSF runs and funds PyPI, and I think everyone can agree it’s the linchpin underlying nearly all packaging efforts. Clearly, any proposal that touches PyPI will have to have PSF buy-in, explicitly or implicitly, or it won’t go anywhere.
On to some specific replies.
I don’t think this is a practical concern. Quorum must be 3 non-abstaining members, which means the other two must explicitly abstain for the remaining 3 to pass the resolution. Even if that happens, and 2/3 of the non-abstaining members come from the same employer, and they pass a resolution that the majority of the packaging membership disagrees with, there are, IMHO, enough checks and balances in place. E.g. a vote of no-confidence can be called by the membership with a second required, or the Steering Council may call such a vote with no second required. And even if the PSC were compromised, the PSF Board can override a PSC call of no confidence. Because sitting members of the PSC are explicitly disallowed from being on the PPC, while collusion is always possible, it would take a lot more effort than I think is practical or realistic. And besides, if the PPC takes a particularly unpopular decision, the most likely outcome is that it would just get ignored. Individual project maintainers will always have autonomy over their projects, the PSF owns PyPI, and I simply don’t believe that the resulting hue and cry will ever stand.
As someone else said, I choose to believe in the good intention of all of the people involved. This has served the PSC well so far.
This is correct.
As you and others have pointed out, we tried really really hard to make the category-based approach in earlier versions work, but we just couldn’t. Issues that were unsurmountable include the resulting number of corner cases, unrepresented stakeholders, the balance between volunteers and paid contributors, the balance between open source and commercial interests, increased opportunity to “stack the deck”, problems bootstrapping the vote, and other considerations and inequities that ultimately doomed the previous approach. I don’t have a point-by-point breakdown of all the issues that we identified, but I will say that trying to come up with a broad and equitable membership plan under the previous version was the most contentious issue, and the more we found flaws in that approach, the more the authors and other participants soured on it. I simply don’t think it can be made workable. Speaking as one of three co-authors of the PEP, I have zero motivation to go back.
Is the PSF membership requirement perfect? Of course not! But I strongly believe it’s the most equitable and workable. PSF membership is open to any stakeholder who wants to participate. People choose not to join the PSF for their own personal reasons, and that’s fine, but I also firmly believe that even non-PSF members will have a significant voice in the direction and decisions of the PPC, regardless of whether they can run or serve. No one will agree with every decision, but you will be able to voice your opinion and argue your case, when done with respect for our colleagues and our community. I strongly believe this is the most democratic, inclusive, and pragmatic way to structure the voting membership.
Ideally, yes, for practical reasons. Administering elections is a lot of work. Operationally, it just makes the most sense to conduct Board and PPC elections at the same time, but keep in mind there are provisions for “off-cycle” elections, e.g. the initial council seating and vacancies, either for no-confidence results or otherwise. These should not be the norm. There are also provisions for PSF voting members to only vote in Board or PPC elections, as they choose.
This is deliberate, and relates to the flexibility mentioned above. A likely result could indeed be a PEP process as you describe, but mandating this in the governing constitution of the PPC seems to me to be handcuffing the PPC’s and PyPA’s options to hammer out a workable relationship.
The PPC derives its authority through a standing delegation from the PSC, exactly as the current packaging delegates do. That delegation of authority also means that the PSC is the ultimate technical decider, and just like any other technical Python decision, the PSC has the authority to overrule. This is more complicated than say, delegation for CPython decisions exactly because it overlaps with services like PyPI that are owned and maintained by the PSF.
Let me give an example. Say the PPC decides to give all packagers free, unlimited space on PyPI, and the PSC doesn’t veto that decision. The Board and PyPI admins would be well within their rights and responsibilities to override that decision, or just say “no”. There’s no practical way for the PPC or PSC to force the PSF or PyPI to go along with any decision that negatively impacts PyPI.
That said, the PEP authors deliberately left the PSF out of the direct decision making process because Python has an incredibly strong tradition of separating technical decision making from community, legal, fiscal, and other considerations. This is even though there are lots of cases where the relationship between the PSF and PSC is already a bit fuzzy. And yet, so far, it’s working.
I strongly believe that the relationship between the PSC and PPC as defined in the PEP will similarly work well for us, but if there is specific language that you think needs clarifying, I’m are open to suggestions.
Given that this is already a long response, I’ll leave it here, but I’ll also try to respond to select comments in the other follow ups.