Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PEP 11: define tiered platform support #2442

Merged
merged 21 commits into from
Apr 18, 2022
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
199 changes: 116 additions & 83 deletions pep-0011.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
PEP: 11
Title: Removing support for little used platforms
Title: CPython platform support
Version: $Revision$
Last-Modified: $Date$
Author: Martin von Löwis <[email protected]>,
Expand All @@ -14,109 +14,116 @@ Post-History: 18-Aug-2007,


Abstract
--------
========

This PEP documents how an operating system (platform) becomes
supported in CPython and documents past support.
supported in CPython, what platforms are currently supported, and
documents past support.


Rationale
---------
=========

Over time, the CPython source code has collected various pieces of
platform-specific code, which, at some point in time, was
considered necessary to use Python on a specific platform.
considered necessary to use CPython on a specific platform.
Without access to this platform, it is not possible to determine
whether this code is still needed. As a result, this code may
either break during Python's evolution, or it may become
either break during CPython's evolution, or it may become
unnecessary as the platforms evolve as well.

The growing amount of these fragments poses the risk of
Allowing these fragments to grow poses the risk of
unmaintainability: without having experts for a large number of
platforms, it is not possible to determine whether a certain
change to the CPython source code will work on all supported
platforms.

To reduce this risk, this PEP specifies what is required for a
platform to be considered supported by Python as well as providing a
procedure to remove code for platforms with few or no Python
platform to be considered supported by CPython as well as providing a
procedure to remove code for platforms with few or no CPython
users.

Supporting platforms
--------------------

Gaining official platform support requires two things. First, a core
developer needs to volunteer to maintain platform-specific code. This
core developer can either already be a member of the Python
development team or be given contributor rights on the basis of
maintaining platform support (it is at the discretion of the Python
development team to decide if a person is ready to have such rights
even if it is just for supporting a specific platform).

Second, a stable buildbot must be provided [2]_. This guarantees that
platform support will not be accidentally broken by a Python core
developer who does not have personal access to the platform. For a
buildbot to be considered stable it requires that the machine be
reliably up and functioning (but it is up to the Python core
developers to decide whether to promote a buildbot to being
considered stable).

This policy does not disqualify supporting other platforms
indirectly. Patches which are not platform-specific but still done to
add platform support will be considered for inclusion. For example,
if platform-independent changes were necessary in the configure
script which were motivated to support a specific platform that could
be accepted. Patches which add platform-specific code such as the
name of a specific platform to the configure script will generally
not be accepted without the platform having official support.

CPU architecture and compiler support are viewed in a similar manner
as platforms. For example, to consider the ARM architecture supported
a buildbot running on ARM would be required along with support from
the Python development team. In general it is not required to have
a CPU architecture run under every possible platform in order to be
considered supported.
This PEP also lists what plaforms *are* supported by the CPython
interpreter. This lets people know what platforms are directly
supported by the CPython development team.

Unsupporting platforms
----------------------

If a certain platform that currently has special code in CPython is
deemed to be without enough Python users or lacks proper support from
the Python development team and/or a buildbot, a note must be posted
in this PEP that this platform is no longer actively supported. This
note must include:
Support tiers
=============

- the name of the system
- the first release number that does not support this platform
anymore, and
- the first release where the historical support code is actively
removed
Platform support is broken down into *tiers*. Each tier comes with
different requirements which lead to different promises being made
about support.

In some cases, it is not possible to identify the specific list of
systems for which some code is used (e.g. when autoconf tests for
absence of some feature which is considered present on all
supported systems). In this case, the name will give the precise
condition (usually a preprocessor symbol) that will become
unsupported.
Tier 1
------

At the same time, the CPython source code must be changed to
produce a build-time error if somebody tries to install Python on
this platform. On platforms using autoconf, configure must fail.
This gives potential users of the platform a chance to step
forward and offer maintenance.
- `CI failures <https://github.com/python/cpython/actions/workflows/build.yml?query=branch%3Amain+is%3Acompleted>`__ block releases.
- Changes which would break the ``main`` branch are not allowed to be merged;
any breakage may be reverted immediately.
- All core developers are responsible to keep these platforms,
and thus ``main``, working.
brettcannon marked this conversation as resolved.
Show resolved Hide resolved
- Promotion to this tier requires team consensus/SC approval.

=================== =====
Target Triple Notes
=================== =====
i686-windows-msvc
x86_64-windows-msvc
x86_64-apple-darwin BSD libc, clang
x86_64-linux-gnu glibc, gcc
=================== =====
brettcannon marked this conversation as resolved.
Show resolved Hide resolved


Tier 2
------

- Must have a reliable buildbot.
- At least **two** core developers are signed up to support the platform.
- Changes which break any of these platforms are to be fixed or
reverted within 24 hours.
- Failures on these platforms block a release.
- Promotion to this tier requires consensus/SC approval.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure that buildbot URLs are reliable. In the past, some ids changed. Moreover, an URL is not easy to read.

Can you either replace the URL with the buildbot name, or add a label to the URL?

For example, replace https://buildbot.python.org/all/#/builders/125 with aarch64 Fedora Stable 3.x.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or better yet (and per PEP 12),

`aarch64 Fedora Stable 3.x <https://buildbot.python.org/all/#/builders/125>`__

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@CAM-Gerlach that suggestion doesn't work since Victor's worry is about URL stability.

@vstinner what I can do is once this update goes in have a tier-2 label added to the appropriate buildbots and then simply link to that label.

Copy link
Member

@CAM-Gerlach CAM-Gerlach Mar 25, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand that; I thought by "add a label to the URL" he meant using a link with the buildbot name as descriptive link text, aarch64 Fedora Stable 3.x, so it could still be located by name if its URL changes, but I'm guessing its referring to something else with the buildbots I'm unfamiliar with?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

He's referring to the labels you can apply to individual buildbots and then pull up a list of them, e.g. all of the 3.10 buildbots can be found with the 3.10 label at https://buildbot.python.org/all/#/builders?tags=%2B3.10 .

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gotcha, thanks 👍

====================== ========================== ============================================== ========
Target Triple Notes Buildbot Contacts
====================== ========================== ============================================== ========
aarch64-apple-darwin clang https://buildbot.python.org/all/#/builders/725 XXX
aarch64-linux-gnu glibc, gcc https://buildbot.python.org/all/#/builders/125 XXX
brettcannon marked this conversation as resolved.
Show resolved Hide resolved

glibc, clang https://buildbot.python.org/all/#/builders/234 XXX
aarch64-windows-msvc https://buildbot.python.org/all/#/builders/729 XXX
powerpcle-linux-gnu glibc, gcc https://buildbot.python.org/all/#/builders/90 XXX
brettcannon marked this conversation as resolved.
Show resolved Hide resolved

glibc, clang https://buildbot.python.org/all/#/builders/435 XXX
brettcannon marked this conversation as resolved.
Show resolved Hide resolved
s390x-linux-gnu glibc, gcc https://buildbot.python.org/all/#/builders/223 XXX

glibc, clang https://buildbot.python.org/all/#/builders/3 XXX
brettcannon marked this conversation as resolved.
Show resolved Hide resolved
x86_64-linux-gnu glibc, clang https://buildbot.python.org/all/#/builders/441 XXX
brettcannon marked this conversation as resolved.
Show resolved Hide resolved
x86_64-unknown-freebsd BSD libc, cc https://buildbot.python.org/all/#/builders/172 XXX
brettcannon marked this conversation as resolved.
Show resolved Hide resolved
====================== ========================== ============================================== ========


All other platforms
-------------------

Support for a platform may be partial within the code base, such as
from active development around platform support or accidentally.
Code changes to platforms not listed in the above tiers may rejected
or removed from the code base without a deprecation process if they
cause a maintenance burden or obstruct general improvements.

Re-supporting platforms
-----------------------
Platforms not listed here may be supported by the wider Python
community in some way. If your desired platform is not listed above,
please perform a search online to see if someone is already providing
support in some form.

If a user of a platform wants to see this platform supported
again, they may volunteer to maintain the platform support. Such an
offer must be recorded in the PEP, and the user can submit patches
to remove the build-time errors, and perform any other maintenance
work for the platform.

Notes
-----

Microsoft Windows
-----------------
/////////////////
CAM-Gerlach marked this conversation as resolved.
Show resolved Hide resolved

Microsoft has established a policy called product support lifecycle
[1]_. Each product's lifecycle has a mainstream support phase, where
Expand All @@ -130,9 +137,6 @@ phase is not yet expired. Subsequent bug fix releases will support
the same Windows releases as the original feature release (even if
the extended support phase has ended).

Because of this policy, no further Windows releases need to be listed
in this PEP.

Each feature release is built by a specific version of Microsoft
Visual Studio. That version should have mainstream support when the
release is made. Developers of extension modules will generally need
Expand All @@ -144,8 +148,9 @@ patches will be accepted. Such build files will be removed from the
source tree 3 years after the extended support for the compiler has
ended (but continue to remain available in revision control).


Legacy C Locale
---------------
///////////////
CAM-Gerlach marked this conversation as resolved.
Show resolved Hide resolved

Starting with CPython 3.7.0, \*nix platforms are expected to provide
at least one of ``C.UTF-8`` (full locale), ``C.utf8`` (full locale) or
Expand All @@ -156,8 +161,36 @@ Any Unicode-related integration problems that occur only in the legacy ``C``
locale and cannot be reproduced in an appropriately configured non-ASCII
locale will be closed as "won't fix".


Unsupporting platforms
======================

If a platform drops out of tiered support, a note must be posted
in this PEP that the platform is no longer actively supported. This
note must include:

- the name of the system
- the first release number that does not support this platform
anymore, and
- the first release where the historical support code is actively
removed

In some cases, it is not possible to identify the specific list of
systems for which some code is used (e.g. when autoconf tests for
absence of some feature which is considered present on all
supported systems). In this case, the name will give the precise
condition (usually a preprocessor symbol) that will become
unsupported.

At the same time, the CPython source code must be changed to
produce a build-time error if somebody tries to install CPython on
this platform. On platforms using autoconf, configure must fail.
This gives potential users of the platform a chance to step
forward and offer maintenance.


No-longer-supported platforms
-----------------------------
=============================

* | Name: MS-DOS, MS-Windows 3.x
| Unsupported in: Python 2.0
Expand Down Expand Up @@ -276,15 +309,15 @@ No-longer-supported platforms
| Code removed in: Python 3.7

References
----------
==========

.. [1] http://support.microsoft.com/lifecycle/
.. [2] http://buildbot.python.org/3.x.stable/

Copyright
---------
=========

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



Expand Down