Movatterモバイル変換


[0]ホーム

URL:


Following system colour schemeSelected dark colour schemeSelected light colour scheme

Python Enhancement Proposals

PEP 602 – Annual Release Cycle for Python

Author:
Łukasz Langa <lukasz at python.org>
PEP-Delegate:
Brett Cannon <brett at python.org>
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 Pythonstarting with Python 3.9. This change accelerates the release cadencesuch 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 around17 months:

  • The firstfive months overlap with Python 3.(X-1).0’s betaand release candidate stages and are thus unversioned.
  • The nextseven months are spent on versioned alpha releases whereboth new features are incrementally added and bug fixes are included.
  • The followingthree months are spent on four versioned beta releaseswhereno new features can be added but bug fixes are stillincluded.
  • The finaltwo months are spent on two release candidates (or more,if necessary) and conclude with the release of the final release ofPython 3.X.0.

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 forfive years:

  • During thefirst twenty four months (2 years) it receives bugfixupdates and full releases (sources and installers for Windows andmacOS) are made approximately every other month.
  • For the nextthirty six months (3 years) it receives securityupdates and source-only releases are made on an as-needed basis(no fixed cadence).
  • The final source-only release is madefive years after 3.X.0.

Note: 2 years of full support start withPython 3.13. Python versions3.9 - 3.12 operate on a calendar with 1½ year of full support, followedby 3½ more years of security fixes.

Annual release cadence

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

Example

  • 3.9 development begins: Tuesday, 2019-06-04
  • 3.9.0 alpha 1: Monday, 2019-10-14
  • 3.9.0 alpha 2: Monday, 2019-11-18
  • 3.9.0 alpha 3: Monday, 2019-12-16
  • 3.9.0 alpha 4: Monday, 2020-01-13
  • 3.9.0 alpha 5: Monday, 2020-02-17
  • 3.9.0 alpha 6: Monday, 2020-03-16
  • 3.9.0 alpha 7: Monday, 2020-04-13
  • 3.9.0 beta 1: Monday, 2020-05-18(No new features beyond this point.)
  • 3.9.0 beta 2: Monday, 2020-06-08
  • 3.9.0 beta 3: Monday, 2020-06-29
  • 3.9.0 beta 4: Monday, 2020-07-20
  • 3.9.0 candidate 1: Monday, 2020-08-10
  • 3.9.0 candidate 2: Monday, 2020-09-14
  • 3.9.0 final: Monday, 2020-10-05
../_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 currentrelease schedule:

  • 3.9 development begins: Tuesday, 2019-06-04
  • 3.9.0 alpha 1: Monday, 2020-08-03 (10 months later)
  • 3.9.0 alpha 2: Monday, 2020-09-07
  • 3.9.0 alpha 3: Monday, 2020-10-05
  • 3.9.0 alpha 4: Monday, 2020-11-02
  • 3.9.0 beta 1: Monday, 2020-11-30 (6 months later)
  • 3.9.0 beta 2: Monday, 2021-01-04
  • 3.9.0 beta 3: Monday, 2021-02-01
  • 3.9.0 beta 4: Monday, 2021-03-01
  • 3.9.0 candidate 1: Monday, 2021-03-29
  • 3.9.0 candidate 2: Monday, 2021-04-05 (if necessary)
  • 3.9.0 final: Monday, 2021-04-19 (6 months later)

Dependent Policies

Deprecations

The current policy around breaking changes assumes at least two releasesbefore a deprecated feature is removed from Python or a__future__behavior is enabled by default. This is documented inPEP 387.

This PEP proposes to keep this policy ofat least two releasesbefore making a breaking change.

The term of the Steering Council

The current wording ofPEP 13 states that “a new council is electedafter each feature release”. This PEP proposes to keep this policyas it will lead to a consistent election schedule.

The term of the Release Manager

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

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

Rationale and Goals

This change provides the following advantages:

  • makes releases smaller: since doubling the cadence doesn’t double ouravailable development resources, consecutive releases are going to besmaller in terms of features;
  • puts features and bug fixes in hands of users sooner;
  • creates a more gradual upgrade path for users, by decreasing thesurface of change in any single release;
  • creates a predictable calendar for releases where the final release isalways in October (so after the annual core sprint), and the betaphase starts in late May (so after PyCon US sprints), which isespecially important for core developers who need to plan to includePython involvement in their calendar;
  • decreases the urge to rush features shortly before “Beta 1” due tothe risk of them “slipping for 18 months”;
  • allows for synchronizing the schedule of Python release managementwith external distributors like Fedora who’ve been historically veryhelpful in finding regressions early not only in core Python but alsoin third-party libraries, helping moving the community forward tosupport the latest version of Python from Day 1;
  • increases the explicit alpha release phase, which provides meaningfulsnapshots of progress on new features;
  • significantly cuts the implicit “alpha 0” release phase which provideslimited use for new development anyway (it overlaps with the beta ofthecurrently developed, still unreleased, version).

Non-goals

Adopting an annual release calendar allows for natural switching tocalendar 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 theone released in October ‘23).

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

Non-risks

This change does not shorten the currently documented support calendarfor a Python release, both in terms of bugfix releases and securityfixes.

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

Consequently, while this change introduces the ability for users toupgrade much faster, it does not require them to do so. Say, if theyupgrade every second release, their experience with Python is going tobe 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 applicationmaintainers that want to support all actively supported Python versionsby 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 onelast bugfix release is made for Python 3.X.0. However, in practice atleast the last four versions of Python 3 overlapped with stable releasesof the next version for around six months. Figure 2 is includingthis information to demonstrate that overlap between stable versionreleases 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 previoussection, it is entirely possible there are some other areas whichimplicitly 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 theperspective of the core developer:

  • it makes contribution scheduling harder due to irregular releasedates every year;
  • it creates a surge of rushed commits before (and even after!) Beta 1due to the stress involved with “missing a release”;
  • ironically, after Beta 1 it creates a false sense of having “plenty oftime” before the next release, time that passes quickly regardless;
  • it causes certain elements of the workflow to be executed so rarelythat they are not explicitly documented, let alone automated.

More importantly, from the perspective of the user:

  • it creates releases with many new features, some being explicitlyincompatible and some being accidentally incompatible, which makesthe upgrade cost relatively high every time;
  • it sits on features and incompatible bug fixes for over a year beforebecoming available to the user; and more specifically
  • it causes every “point zero” release to be extra risky for users.While we provide and recommend testing with alphas and betas,“point zero” is the first release of a given Python version for manyusers. The bigger a release is feature-wise, the more potentialproblems are hiding in “point zero releases”.

Double the release cadence to achieve 9 months between feature versions

This was originally proposed inPEP 596 and rejected as both tooirregular and too short. This would not give any of the benefits ofa 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 makeit very hard for external distributors like Fedorato release the newest version of Python as soon as possible. We areadjusting Python’s calendar here in the hope that this will enableFedora to integrate the newest version of Python with the newest versionof Fedoraas both are being developed which makes both projectsbetter.

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

This is described inPEP 598. This proposal includes non-standardconcepts like the “incremental feature release” which makes it hardto understand. The presented advantages are unclear while theunfamiliarity of the scheme poses a real risk of user and integratorconfusion.

Long-Term Support Releases

Each version of Python is effectively long-term support: it’s supportedfor five years, with the first eighteen months allowing regular bugfixes and security updates. For the remaining time security updates areaccepted and promptly released.

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

Copyright

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


Source:https://github.com/python/peps/blob/main/peps/pep-0602.rst

Last modified:2024-05-28 05:47:01 GMT


[8]ページ先頭

©2009-2025 Movatter.jp