Movatterモバイル変換


[0]ホーム

URL:


Following system colour schemeSelected dark colour schemeSelected light colour scheme

Python Enhancement Proposals

PEP 11 – CPython platform support

PEP 11 – CPython platform support

Author:
Martin von Löwis <martin at v.loewis.de>,Brett Cannon <brett at python.org>
Status:
Active
Type:
Process
Created:
07-Jul-2002
Post-History:
18-Aug-2007,14-May-2014,20-Feb-2015,10-Mar-2022,21-Nov-2025

Table of Contents

Abstract

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

Rationale

Over time, the CPython source code has collected various pieces ofplatform-specific code, which, at some point in time, wasconsidered necessary to use CPython on a specific platform.Without access to this platform, it is not possible to determinewhether this code is still needed. As a result, this code mayeither break during CPython’s evolution, or it may becomeunnecessary as the platforms evolve as well.

Allowing these fragments to grow poses the risk ofunmaintainability: without having experts for a large number ofplatforms, it is not possible to determine whether a certainchange to the CPython source code will work on all supportedplatforms.To reduce this risk, this PEP specifies what is required for aplatform to be considered supported by the CPython core team,as well as providing a procedure to remove code for platformswith few or no CPython users.

On the other hand, allowing these fragments in the main repositorycan promote collaboration, can help identify non-portable parts ofthe code base, and is necessary for bootstrapping support fora “new” platform.This PEP specifies what it means for a platform to be “unsupported”,and how the core team handles code for such platforms.

This PEP also explicitly lists what platforms are directlysupported by the CPython development team.

Support tiers

Platform support is broken down intotiers. Each tier comes withdifferent requirements which lead to different promises being madeabout support.

To be promoted to a tier, steering council support is required and isexpected to be driven by team consensus. Demotion to a lower tieroccurs when the requirements of the current tier are no longer met fora platform for an extended period of time based on the judgment ofthe release manager or steering council. For platforms which no longermeet the requirements of any tier by b1 of a new feature release, anannouncement will be made to warn the community of the pending removalof support for the platform (e.g. in the b1 announcement). If theplatform is not brought into line for at least one of the tiers by thefirst release candidate, it will be listed as unsupported in this PEP.

Tier 1

  • STATUS
  • CI failures block releases.
  • Changes which would break themain branch are not allowed to be merged;any breakage should be fixed or reverted immediately.
  • All core developers are responsible to keepmain, and thus theseplatforms, working.
  • Failures on these platformsblock a release.
Target TripleNotes
aarch64-apple-darwinclang
aarch64-unknown-linux-gnuglibc, gcc
i686-pc-windows-msvc
x86_64-pc-windows-msvc
x86_64-unknown-linux-gnuglibc, gcc

Tier 2

  • STATUS
  • Must have a reliable buildbot.
  • At leasttwo core developers are signed up to support the platform.
  • Changes which break any of these platforms are to befixed orreverted within 24 hours.
  • Failures on these platformsblock a release.
Target TripleNotesContacts
aarch64-unknown-linux-gnuglibc, clangVictor Stinner, Gregory P. Smith
wasm32-unknown-wasip1WASI SDK, WasmtimeBrett Cannon, Michael Droettboom
x86_64-apple-darwinmacOS, clangSam Gross, Barry Warsaw, Ronald Oussoren
x86_64-unknown-linux-gnuglibc, clangVictor Stinner, Gregory P. Smith

Tier 3

  • STATUS
  • Must have a reliable buildbot.
  • At leastone core developer is signed up to support the platform.
  • No response SLA to failures.
  • Failures on these platforms donot block a release.
Target TripleNotesContacts
aarch64-linux-androidRussell Keith-Magee, Petr Viktorin
aarch64-pc-windows-msvcSteve Dower
arm64-apple-iosiOS on deviceRussell Keith-Magee, Ned Deily
arm64-apple-ios-simulatoriOS on M1 macOS simulatorRussell Keith-Magee, Ned Deily
armv7l-unknown-linux-gnueabihf32-bit Raspberry Pi OS, gccGregory P. Smith
aarch64-unknown-linux-gnu64-bit Raspberry Pi OS, gccSavannah Ostrowski
powerpc64le-unknown-linux-gnuglibc, clang

glibc, gcc

Victor Stinner

Victor Stinner

s390x-unknown-linux-gnuglibc, gccVictor Stinner
wasm32-unknown-emscriptenemccRussell Keith-Magee
x86_64-linux-androidRussell Keith-Magee, Petr Viktorin
x86_64-unknown-freebsdBSD libc, clangVictor Stinner

Unsupported platforms

All platforms not listed in the above tiers areunsupported by the core team.The core team does not develop and test on such platforms, and so theycannot provide any promises that Python will work on them.

However, the code base does include unsupported code – that is, codespecific to unsupported platforms.Contributions in this area are welcome as long as they:

  • pose a minimal maintenance burden to the core team, and
  • benefit substantially more people than the contributor.

We assume contributors are able to maintain modifications/patches,test patched builds, redistribute modified code, make promises to their users,and otherwise support “their” platform.With that in mind, it is generally unnecessary to backport unsupportedfixes to CPython’s maintenance branches.

Unsupported code thatdoes cause a maintenance burden, or obstructsgeneral improvements, may be rejected or removed from the code basewithout a deprecation process.Core team members that do this intentionally are encouraged to notify peoplelisted in thePlatforms experts list in the CPython contributor’s guide,to review any submitted fixes (if unobtrusive), and to consider addingconfiguration or extension capabilities necessary for workarounds.

People interested in unsupported platforms may add themselves to thePlatforms experts list to request that they be notified on issuesrelated to “their” platform.There is, however, no formal guarantee that theywill be notified.

Platforms not listed in this PEP may also be supported by the wider Pythoncommunity in other ways. If your desired platform is not listed above,please perform a search online to see if someone is already providingsupport in some form.

Notes

Microsoft Windows

Windows versions prior to Windows 10 follow Microsoft’sFixed Lifecycle Policy,with a mainstream support phase for 5 years after release,where the product is generally commercially available,and an additional 5 year extended support phase,where paid support is still available and certain bug fixes are released.Extended Security Updates (ESU)is a paid program available to high-volume enterprise customersas a “last resort” option to receive certain security updates after extended support ends.ESU is considered a distinct phase that follows the expiration of extended support.

Windows 10 and later follow Microsoft’sModern Lifecycle Policy,which varies per-product, per-version, per-edition and per-channel.Generally, feature updates (1709, 22H2) occur every 6-12 monthsand are supported for 18-36 months;Server and IoT editions, and LTSC channel releases are supported for 5-10 years,and the latest feature release of a major version (Windows 10, Windows 11)generally receives new updates for at least 10 years following release.Microsoft’sWindows Lifecycle FAQhas more specific and up-to-date guidance.

CPython’s Windows support currently follows Microsoft’s lifecycles.A new feature release X.Y.0 will support all Windows versionswhoseextended support phase has not yet expired.Subsequent bug fix releases will support the same Windows versionsas the original feature release, even if no longer supported by Microsoft.New versions of Windows released while CPython is in maintenance modemay be supported at the discretion of the core team and release manager.

As of 2024, our current interpretation of Microsoft’s lifecycles is thatWindows for IoT and embedded systems is out of scope for new CPython releases,as the intent of those is to avoid feature updates. Windows Server will usuallybe the oldest version still receiving free security fixes, and that willdetermine the earliest supported client release with equivalent API version(which will usually be past its end-of-life).

Each feature release is built by a specific version of MicrosoftVisual Studio. That version should have mainstream support when therelease is made. Developers of extension modules will generally needto use the same Visual Studio release; they are concerned both withthe availability of the versions they need to use, and with keepingthe zoo of versions small. The CPython source tree will keepunmaintained build files for older Visual Studio releases, for whichpatches will be accepted. Such build files will be removed from thesource tree 3 years after the extended support for the compiler hasended (but continue to remain available in revision control).

POSIX

Features specified in POSIX are expected to work according to the standard.This cuts two ways:

  • If a POSIX feature is available, it is expected to conform to POSIX.

    Workarounds for out-of-spec platforms are acceptable.For unsupported platforms, disabling functionality ispreferred over a non-trivial workaround.

  • CPython should make no assumptions about POSIX features beyond what’sspecified in POSIX.

    For example, while POSIX specifieserrno as anint with norestrictions, error codes on all supported platforms happen to be positive.Relying on this would be considered a bug, even if it only manifests onunsupported platforms.

Legacy C Locale

Starting with CPython 3.7.0, *nix platforms are expected to provideat least one ofC.UTF-8 (full locale),C.utf8 (full locale) orUTF-8 (LC_CTYPE-only locale) as an alternative to the legacyClocale.

Any Unicode-related integration problems that occur only in the legacyClocale and cannot be reproduced in an appropriately configured non-ASCIIlocale will be closed as “won’t fix”.

Unsupporting platforms

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

  • The name of the system,
  • The first release number that does not support this platformanymore, and
  • The first release where the historical support code is activelyremoved.

In some cases, it is not possible to identify the specific list ofsystems for which some code is used (e.g. when autoconf tests forabsence of some feature which is considered present on allsupported systems). In this case, the name will give the precisecondition (usually a preprocessor symbol) that will becomeunsupported.

At the same time, the CPython build must be changed to produce awarning if somebody tries to install CPython on this platform. Onplatforms using autoconf, configure should also be made emit a warningabout the unsupported platform.

This gives potential users of the platform a chance to step forwardand offer maintenance. We do not treat a platform that loses Tier 3support any worse than a platform that was never supported.

No-longer-supported platforms

  • Name: MS-DOS, MS-Windows 3.x
    Unsupported in: Python 2.0
    Code removed in: Python 2.1
  • Name: SunOS 4
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: DYNIX
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: dgux
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Minix
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Irix 4 and –with-sgi-dl
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Linux 1
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Systems defining __d6_pthread_create (configure.in)
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Systems defining PY_PTHREAD_D4, PY_PTHREAD_D6,or PY_PTHREAD_D7 in thread_pthread.h
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Systems using –with-dl-dld
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: Systems using –without-universal-newlines,
    Unsupported in: Python 2.3
    Code removed in: Python 2.4
  • Name: MacOS 9
    Unsupported in: Python 2.4
    Code removed in: Python 2.4
  • Name: Systems using –with-wctype-functions
    Unsupported in: Python 2.6
    Code removed in: Python 2.6
  • Name: Win9x, WinME, NT4
    Unsupported in: Python 2.6 (warning in 2.5 installer)
    Code removed in: Python 2.6
  • Name: AtheOS
    Unsupported in: Python 2.6 (with “AtheOS” changed to “Syllable”)
    Build broken in: Python 2.7 (edit configure to re-enable)
    Code removed in: Python 3.0
  • Name: BeOS
    Unsupported in: Python 2.6 (warning in configure)
    Build broken in: Python 2.7 (edit configure to re-enable)
    Code removed in: Python 3.0
  • Name: Systems using Mach C Threads
    Unsupported in: Python 3.2
    Code removed in: Python 3.3
  • Name: SunOS lightweight processes (LWP)
    Unsupported in: Python 3.2
    Code removed in: Python 3.3
  • Name: Systems using –with-pth (GNU pth threads)
    Unsupported in: Python 3.2
    Code removed in: Python 3.3
  • Name: Systems using Irix threads
    Unsupported in: Python 3.2
    Code removed in: Python 3.3
  • Name: OSF* systems (issue 8606)
    Unsupported in: Python 3.2
    Code removed in: Python 3.3
  • Name: OS/2 (issue 16135)
    Unsupported in: Python 3.3
    Code removed in: Python 3.4
  • Name: VMS (issue 16136)
    Unsupported in: Python 3.3
    Code removed in: Python 3.4
  • Name: Windows 2000
    Unsupported in: Python 3.3
    Code removed in: Python 3.4
  • Name: Windows systems where COMSPEC points to command.com
    Unsupported in: Python 3.3
    Code removed in: Python 3.4
  • Name: RISC OS
    Unsupported in: Python 3.0 (some code actually removed)
    Code removed in: Python 3.4
  • Name: IRIX
    Unsupported in: Python 3.7
    Code removed in: Python 3.7
  • Name: Systems without multithreading support
    Unsupported in: Python 3.7
    Code removed in: Python 3.7

Discussions

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-0011.rst

Last modified:2026-01-23 17:28:10 GMT


[8]ページ先頭

©2009-2026 Movatter.jp