tl;dr: I’d like to propose a long-term goal toward PEPs – Python Enhancement Proposals – being proposals.
This proposal is my own, I do not represent the Steering Council or any other group here.
Currently, PEPs are used for several kinds of documents other than “Enhancement Proposals”: process guidelines, charters, informational posts, standards, etc.
This makes it hard to talk about PEPs in general. For example, “How to write a PEP” advice is often implicitly talking about standards-track PEPs.
PEP 1 (PEP Purpose and Guidelines) does cover different types of PEPs, but non-standards-track ones are clearly second-class citizens. Worse, it’s not immediately clear which parts of the text only apply to change proposals.
This is confusing.
I see two ways to limit the confusion:
- Limit PEPs to actual change proposals, and put other kinds of documents elsewhere, or
- Keep the various kinds of PEPs as they are, and differentiate more clearly.
I believe the first is the better long-term solution, and I’d like to propose it as the “north star” – an agreed good direction to go in.
In my mind, the biggest benefit of this would be separation between the current state (implementation, documentation, standards) and changes to that state.
The current PEP process/template is really good for change proposals, but when reading a current standard (or docs, implementation, process), I don’t usually care about the motivation/rationale/teachability for the individual changes that resulted in the text. And when I do, I rarely want to see them in the main text.
The current way of doing things blurs the line to the detriment of both use cases, though the downsides are often not apparent before a standard needs changing. It is possible to keep them apart if one is careful, but it’s hard to do if we call both kinds of documents PEPs and give shared guidelines for both. It’s even more confusing for people who aren’t aware of the details, who routinely mistake old Standards-Track PEPs for current standards, or current Process PEPs as immutable historical documents.
Of course, if we agree on this “north star”, getting to that point will take time, or might never happen if no one does the work. That’s fine. But if someone wants to do that work they should be encouraged.
To be clear, I don’t want to block any work while the transition happens: until we have a better place for, say, release schedules yet, they should continue to be submitted as PEPs.
To be concrete, let me list the kinds of PEPs that aren’t change proposals, and how they might be handled better. Each would need separate discussion of course:
- Governance (e.g. PEP 13, 609) and other formal rules (e.g. PEP 11, 5, 387, 291, 399, 411, 434): I would love to see these in a separate repository, with tighter access controls, more appropriate styling & metadata, and more visible versioning.
- Process guides (e.g. PEP 101, 290) should be in the Devguide.
- Protocol documentation (e.g. PEP 248, 249, 272, 333, 3333, 394) should be in the main docs (if the protocol can be versioned together with Python minor releases, and have a stdlib component) or a separate repository (like ASGI)
- Style guides (e.g. PEP 7, 8, 257, 287) should be part of the Devguide.
- Release schedules (e.g. PEP 664) should be entries in a machine-readable file, with a nice frontend and a calendar export. (See a recommendation from people who use this data.) Feature highlights are in What’s New docs.
- Informational texts (e.g. PEP 672) should be in the docs (e.g. as “HOWTO” guides) or live as personal blog posts.
- Change proposals treated as standards – most common for Packaging (e.g. PEP 440) and Typing (655), but also found for CPython (523) – should be converted to documentation before marked Final, as per PEP 1. (That’s a bit out of scope for this proposal, though: on those we already generally agree that the current state isn’t ideal.)
The alternative is that PEPs are not always proposals. This is the status quo, but if we keep it, we should make it much clearer that it is the case – and replace many uses of “PEP” by “Standards-Track PEP”.