PEP 602 – Annual Release Cycle for Python | peps.python.org (original) (raw)

Author:

Łukasz Langa

PEP-Delegate:

Brett Cannon

Discussions-To:

Discourse thread

Status:

Active

Type:

Process

Created:

04-Jun-2019

Python-Version:

3.9

Post-History:

09-Oct-2023

Resolution:

Python-Dev thread


Table of Contents

Abstract

This document describes a change in the release calendar for Python starting with Python 3.9. This change accelerates the release cadence such that feature versions are released predictably every twelve months, in October every year.

Implementation

Seventeen months to develop a feature version

This PEP proposes that Python 3.X.0 will be developed for around 17 months:

2 years of full support, 3 more years of security fixes

After the release of Python 3.X.0, the 3.X series is maintained for five years:

Note: 2 years of full support start withPython 3.13. Python versions 3.9 - 3.12 operate on a calendar with 1½ year of full support, followed by 3½ more years of security fixes.

Annual release cadence

Feature development of Python 3.(X+1).0 starts as soon as Python 3.X.0 Beta 1 is released. This creates a twelve-month delta between Python feature versions.

Example

../_images/pep-0602-example-release-calendar.png

Figure 1. Consequences of the annual release cycle on the calendar.

In comparison, if this PEP is rejected and Python keeps the current release schedule:

Dependent Policies

Deprecations

The current policy around breaking changes assumes at least two releases before a deprecated feature is removed from Python or a __future__behavior is enabled by default. This is documented in PEP 387.

This PEP proposes to keep this policy of at least two releases before making a breaking change.

The term of the Steering Council

The current wording of PEP 13 states that “a new council is elected after each feature release”. This PEP proposes to keep this policy as it will lead to a consistent election schedule.

The term of the Release Manager

The current undocumented convention is for a single Release Manager to handle two feature releases of Python. This PEP proposes to keep this policy, allowing for the term to be extended to more releases with approval from the Steering Council and the Cabal of Release Managers.

In particular, since this PEP is authored by the active Release Manager and its effect would shorten the term of the Release Manager, the author is open to managing the release of a third feature release to compensate for the disruption.

Rationale and Goals

This change provides the following advantages:

Non-goals

Adopting an annual release calendar allows for natural switching to calendar versioning, for example by calling Python 3.9 “Python 3.20” since it’s released in October ‘20 and so on (“Python 3.23” would be the one released in October ‘23).

While the ease of switching to calendar versioning can be treated as an advantage of an annual release cycle, this PEP does not advocate for or against a change in how Python is versioned. Should the annual release cycle be adopted, the versioning question will be dealt with in a separate PEP.

Non-risks

This change does not shorten the currently documented support calendar for a Python release, both in terms of bugfix releases and security fixes.

This change does not accelerate the velocity of development. Python is not going to become incompatible faster or accrue new features faster. It’s just that features are going to be released more gradually as they are developed.

Consequently, while this change introduces the ability for users to upgrade much faster, it does not require them to do so. Say, if they upgrade every second release, their experience with Python is going to be similar to the current situation.

Risks

Python redistribution

This requires changes to how integrators, like Linux distributions, release Python within their systems.

The testing matrix

This eventually increases the testing matrix for library and application maintainers that want to support all actively supported Python versions by one or two:

../_images/pep-0602-overlapping-support-matrix.png

Figure 2. Testing matrix in the 18-month cadence vs. the 12-month

The “extended bugfix support at the discretion of the Release Manager” stage of the current release cycle is not codified. If fact, PEP 101currently states that after the release of Python 3.(X+1).0 only one last bugfix release is made for Python 3.X.0. However, in practice at least the last four versions of Python 3 overlapped with stable releases of the next version for around six months. Figure 2 is including this information to demonstrate that overlap between stable version releases with the 12-month release cadence will be nothing new.

Other policies may depend on the release cadence

Although identified dependent policies were addressed in a previous section, it is entirely possible there are some other areas which implicitly rely on the timing of Python releases.

Rejected Ideas

Keep the current 18 month release cadence

This is undesirable both for core developers and end users. From the perspective of the core developer:

More importantly, from the perspective of the user:

Double the release cadence to achieve 9 months between feature versions

This was originally proposed in PEP 596 and rejected as both too irregular and too short. This would not give any of the benefits of a regular release calendar but it would shorten all development phases, especially the beta + RC phases. This was considered dangerous.

Keep “4 betas over 4 months and a final month for the release candidate”

While this would make the release calendar a bit cleaner, it would make it very hard for external distributors like Fedorato release the newest version of Python as soon as possible. We are adjusting Python’s calendar here in the hope that this will enable Fedora to integrate the newest version of Python with the newest version of Fedora as both are being developed which makes both projects better.

Slow down releases but don’t freeze feature development with Beta 1

This is described in PEP 598. This proposal includes non-standard concepts like the “incremental feature release” which makes it hard to understand. The presented advantages are unclear while the unfamiliarity of the scheme poses a real risk of user and integrator confusion.

Long-Term Support Releases

Each version of Python is effectively long-term support: it’s supported for five years, with the first eighteen months allowing regular bug fixes and security updates. For the remaining time security updates are accepted and promptly released.

No extended support in the vein of Python 2.7 is planned going forward.

This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.