2019-10-20 01:48:37 -04:00
|
|
|
|
PEP: 607
|
|
|
|
|
Title: Reducing CPython's Feature Delivery Latency
|
|
|
|
|
Version: $Revision$
|
|
|
|
|
Last-Modified: $Date$
|
|
|
|
|
Author: Łukasz Langa <lukasz@python.org>,
|
|
|
|
|
Steve Dower <steve.dower@python.org>,
|
2023-10-11 08:05:51 -04:00
|
|
|
|
Alyssa Coghlan <ncoghlan@gmail.com>
|
2019-10-20 04:04:57 -04:00
|
|
|
|
Discussions-To: https://discuss.python.org/t/pep-607-shared-background-for-the-release-cadence-peps/2528
|
2019-11-06 19:21:23 -05:00
|
|
|
|
Status: Final
|
2019-10-20 01:48:37 -04:00
|
|
|
|
Type: Informational
|
|
|
|
|
Content-Type: text/x-rst
|
|
|
|
|
Created: 11-Oct-2019
|
|
|
|
|
Python-Version: 3.9
|
|
|
|
|
Post-History: 20-Oct-2019
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
========
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` and :pep:`605` describe two alternative approaches to delivering smaller
|
2019-10-20 01:48:37 -04:00
|
|
|
|
collections of features to Python's users more frequently (as compared to the
|
|
|
|
|
current approach of offering new feature releases every 18-24 months, with
|
|
|
|
|
the first binary alpha release taking place 6-8 months before the final release).
|
|
|
|
|
|
|
|
|
|
Both PEPs also propose moving to a release cadence that results in full releases
|
2022-01-21 06:03:51 -05:00
|
|
|
|
occurring at a consistent time of year (every year for :pep:`602`, every other
|
|
|
|
|
year for :pep:`605`).
|
2019-10-20 01:48:37 -04:00
|
|
|
|
|
|
|
|
|
This PEP (from the authors of both competing proposals) provides common
|
|
|
|
|
background on *why* a change in the release cadence is considered desirable,
|
|
|
|
|
as well as the perceived risks that both PEPs attempt to mitigate.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rationale for change
|
|
|
|
|
====================
|
|
|
|
|
|
|
|
|
|
Reducing the size of feature delivery batches
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
|
|
|
|
|
When multiple large changes are delivered together, a complex investigation
|
|
|
|
|
may be required to determine the root cause of any new issues that arise.
|
|
|
|
|
Large batch sizes also make it more likely that problems *will* be encountered,
|
|
|
|
|
given that they include larger pieces of relatively untested code.
|
|
|
|
|
|
|
|
|
|
The easiest way to simplify those investigations and reduce the likelihood of
|
|
|
|
|
users encountering problems is to reduce the size of the batches being shipped.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` proposes to address this problem via the straightforward approach of
|
2019-10-20 01:48:37 -04:00
|
|
|
|
reducing CPython's typical batch size by 50%, shipping 12 months of changes
|
|
|
|
|
each time, rather than accumulating 18+ months of changes.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`605` proposes to address it by regularly delivering 2 months worth of changes
|
2019-10-20 01:48:37 -04:00
|
|
|
|
to a subset of Python's user base that opts in to running a rolling stream of
|
|
|
|
|
beta releases (similar to running Windows Insider builds instead of the Windows
|
|
|
|
|
retail release, or running Debian testing instead of Debian stable).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Reducing the latency of feature delivery
|
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
|
|
When only stable releases are seeing significant user adoption, and there's a
|
|
|
|
|
long period of time between stable releases, it creates an incredibly strong
|
|
|
|
|
temptation for developers to push changes into stable releases before they're
|
|
|
|
|
really ready for general use.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` proposes to address this problem by reducing the period of time
|
2019-10-20 01:48:37 -04:00
|
|
|
|
between stable releases to 12 months rather than 18 months.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`605` proposes to address it by actively creating a community of
|
2019-10-20 01:48:37 -04:00
|
|
|
|
Python users that regularly install and use CPython beta releases, providing an
|
|
|
|
|
incentive for core developers to start shipping changes earlier in the
|
|
|
|
|
pre-release cycle, in order to obtain feedback before the feature gets locked
|
|
|
|
|
down in a stable release.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aligning the release cadence with the calendar year
|
|
|
|
|
---------------------------------------------------
|
|
|
|
|
|
|
|
|
|
While the current release cadence is nominally 18-24 months, in practice it has
|
|
|
|
|
consistently been towards the 18 month end of that range. This means that the
|
|
|
|
|
target dates for pre-releases and final releases move around from release to
|
|
|
|
|
release, and the only way to remember them is to either look at the release PEP,
|
|
|
|
|
or else to add those dates to your calendar. This is annoying for both
|
|
|
|
|
individual volunteers and for corporate contributors, and also complicates
|
|
|
|
|
alignment with events like PyCon US (typically April/May) and the now-annual
|
|
|
|
|
core development sprints (typically in September).
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` proposes to address this problem by publishing a new release in October
|
2019-10-20 01:48:37 -04:00
|
|
|
|
every year, and basing the pre-release calendar for each year off that.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`605` proposes to address this problem by alternating between release years
|
2019-10-20 01:48:37 -04:00
|
|
|
|
(where a new stable release is published in August), and non-release years
|
|
|
|
|
(where only maintenance releases and new rolling beta releases are published).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Improving the pre-release design feedback cycle
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
|
|
|
|
|
One of the challenges of designing changes to the core interpreter and standard
|
|
|
|
|
library APIs is that the user base in a position to provide feedback on
|
|
|
|
|
nightly builds and the current pre-releases is relatively limited. This means
|
|
|
|
|
that much user feedback isn't received until after an API design has already
|
|
|
|
|
shipped in a full X.Y.0 release.
|
|
|
|
|
|
|
|
|
|
If the API is a regular API, then deprecation cycles mean that it may take
|
|
|
|
|
literally years to correct any design mistakes identified at that point.
|
|
|
|
|
Marking APIs as provisional nominally offers a way to avoid that constraint,
|
|
|
|
|
but actually taking advantage of that freedom causes other problems.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` proposes to address this problem by starting the alpha period
|
2019-10-20 01:48:37 -04:00
|
|
|
|
immediately after the previous stable release.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`605` proposes to address this problem by actively promoting adoption of
|
2019-10-20 01:48:37 -04:00
|
|
|
|
CPython pre-releases for running production workloads (not just for library and
|
|
|
|
|
application compatibility testing), and adjusting the pre-release management
|
|
|
|
|
process as necessary to make that a reasonable thing to do.
|
|
|
|
|
|
|
|
|
|
(Note: some standard library APIs are amenable to initially being shipped as
|
|
|
|
|
part of separately versioned packages via PyPI, and only later incorporated
|
|
|
|
|
into the standard library. This section is more about the lower level APIs
|
|
|
|
|
and non-library features where that approach to obtaining early design
|
|
|
|
|
feedback doesn't apply)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Risks to be mitigated
|
|
|
|
|
=====================
|
|
|
|
|
|
|
|
|
|
While the status quo could stand to be improved in some respects, Python's
|
|
|
|
|
popularity indicates that a lot of users and other participants in the wider
|
|
|
|
|
Python ecosystem are happy enough with the current release management process.
|
|
|
|
|
|
|
|
|
|
Python's user base is too large and
|
|
|
|
|
`too varied <https://www.curiousefficiency.org/posts/2017/10/considering-pythons-target-audience.html>`__
|
|
|
|
|
to cover all the potential downsides of changing our release cadence here, so
|
|
|
|
|
instead this section just covers some of the points that have been specifically
|
|
|
|
|
taken into account in the design of the PEPs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Impact on users and redistributors that already skip some releases
|
|
|
|
|
------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
It is already the case that not all users and redistributors update to every
|
|
|
|
|
published CPython release series (for example, Debian stable and Ubuntu LTS
|
2021-02-03 09:06:23 -05:00
|
|
|
|
sometimes skip releases due to the mismatch between their 24-month release
|
2019-10-20 01:48:37 -04:00
|
|
|
|
cycles and CPython's typically 18-month cycle).
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
The faster 12-month full release cadence in :pep:`602` means that users in this
|
2019-10-20 01:48:37 -04:00
|
|
|
|
category may end up skipping two releases where they would previously have only
|
|
|
|
|
skipped one. However, the extended notice period for deprecations means that
|
|
|
|
|
skipping a single release should no longer result in missed deprecation warnings.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
The slower 24-month full release cadence in :pep:`605` may move some of the users
|
2019-10-20 01:48:37 -04:00
|
|
|
|
that have historically been in this category into the "update to every stable
|
|
|
|
|
release" category.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Impact on users and redistributors that update to every release
|
|
|
|
|
---------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Many of Python's users never install a pre-release, but do update to every
|
|
|
|
|
stable release series at some point after it is published.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` aims to mitigate the potential negative impact on members of this group
|
2019-10-20 01:48:37 -04:00
|
|
|
|
by keeping the minimum gap between releases to 12 months, and retaining the
|
|
|
|
|
18 month full support period for each release.
|
|
|
|
|
|
2019-10-20 04:04:57 -04:00
|
|
|
|
Keeping the 18-month full support period for each release branch means that the
|
|
|
|
|
branches will spend roughly the same amount of time in full support and
|
|
|
|
|
security-fix-only mode as they do now (~18 months and ~42 months, respectively).
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`605` aims to mitigate the potential negative impact on members of this group
|
2019-10-20 01:48:37 -04:00
|
|
|
|
by increasing use during the pre-release period to achieve more stable final
|
|
|
|
|
releases with wider ecosystem support at launch.
|
|
|
|
|
|
2019-10-20 04:04:57 -04:00
|
|
|
|
With a 24-month release cadence each release branch will spend proportionally
|
|
|
|
|
more time in full support mode and less time in security-fix-only mode
|
|
|
|
|
(~24 months and ~36 months, respectively).
|
|
|
|
|
|
2019-10-20 01:48:37 -04:00
|
|
|
|
Full discussion of the impact on this group is left to the individual PEPs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Impact on users and redistributors of CPython nightly builds
|
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Despite the difficulties of doing so, there are already some users and
|
|
|
|
|
redistributors that take on the challenge of using or publishing the CPython
|
|
|
|
|
master branch directly.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
Neither :pep:`602` nor :pep:`605` should directly affect this group, but the rolling
|
|
|
|
|
release stream proposal in :pep:`605` aims to lower the barriers to more users
|
2019-10-20 01:48:37 -04:00
|
|
|
|
adopting this style of usage, by allowing them to adopt the tested rolling
|
|
|
|
|
beta stream, rather than needing to use the master branch directly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Impact on maintainers of third party libraries
|
|
|
|
|
----------------------------------------------
|
|
|
|
|
|
|
|
|
|
For maintainers of third party libraries, the key source of support complexity
|
|
|
|
|
is the *number* of different Python versions in widespread use.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`602` aims to mitigate the potential negative impact on members of this group
|
2019-10-20 01:48:37 -04:00
|
|
|
|
by keeping the minimum gap between full releases to 12 months.
|
|
|
|
|
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`605` aims to mitigate the potential negative impact on members of this group
|
2019-10-20 01:48:37 -04:00
|
|
|
|
by increasing the gap between full releases to 24 months, retaining the current
|
|
|
|
|
policy of moving each release branch to security-fix-only mode not long after
|
|
|
|
|
its successor is released, and retaining the "beta" naming scheme for the new
|
|
|
|
|
rolling release stream (at least for the Python 3.9 release cycle).
|
|
|
|
|
|
|
|
|
|
Full discussion of the impact on this group is left to the individual PEPs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Copyright
|
|
|
|
|
=========
|
|
|
|
|
|
|
|
|
|
This document is placed in the public domain or under the
|
|
|
|
|
CC0-1.0-Universal license, whichever is more permissive.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
..
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
sentence-end-double-space: t
|
|
|
|
|
fill-column: 72
|
|
|
|
|
coding: utf-8
|
|
|
|
|
End:
|