forked from python/peps
-
Notifications
You must be signed in to change notification settings - Fork 1
/
pep-0011.txt
383 lines (300 loc) · 14.8 KB
/
pep-0011.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
PEP: 11
Title: CPython platform support
Author: Martin von Löwis <[email protected]>,
Brett Cannon <[email protected]>
Status: Active
Type: Process
Content-Type: text/x-rst
Created: 07-Jul-2002
Post-History: `18-Aug-2007 <https://mail.python.org/archives/list/[email protected]/thread/DSSGXU5LBCMKYMZBRVB6RF3YAB6ST5AV/>`__,
`14-May-2014 <https://mail.python.org/archives/list/[email protected]/thread/T7WTUJ6TD3IGYGWV3M4PHJWNLM2WPZAW/>`__,
`20-Feb-2015 <https://mail.python.org/archives/list/[email protected]/thread/OEQHRR2COYZDL6LZ42RBZOMIUB32WI34/#L3K7IKGVT4ND45SKAJPJ3Q2ADVK5KP52>`__,
`10-Mar-2022 <https://mail.python.org/archives/list/[email protected]/thread/K757345KX6W5ZLTWYBUXOXQTJJTL7GW5/>`__,
Abstract
========
This PEP documents how an operating system (platform) becomes
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 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 CPython's evolution, or it may become
unnecessary as the platforms evolve as well.
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 CPython as well as providing a
procedure to remove code for platforms with few or no CPython
users.
This PEP also lists what platforms *are* supported by the CPython
interpreter. This lets people know what platforms are directly
supported by the CPython development team.
Support tiers
=============
Platform support is broken down into *tiers*. Each tier comes with
different requirements which lead to different promises being made
about support.
To be promoted to a tier, steering council support is required and is
expected to be driven by team consensus. Demotion to a lower tier
occurs when the requirements of the current tier are no longer met for
a platform for an extended period of time based on the judgment of
the release manager or steering council. For platforms which no longer
meet the requirements of any tier by b1 of a new feature release, an
announcement will be made to warn the community of the pending removal
of support for the platform (e.g. in the b1 announcement). If the
platform is not brought into line for at least one of the tiers by the
first release candidate, it will be listed as unsupported in this PEP.
Tier 1
------
- `STATUS <https://github.com/python/cpython/actions/workflows/build.yml?query=branch%3Amain+is%3Acompleted>`__
- CI failures block releases.
- Changes which would break the ``main`` branch are not allowed to be merged;
any breakage should be fixed or reverted immediately.
- All core developers are responsible to keep ``main``, and thus these
platforms, working.
- Failures on these platforms **block a release**.
======================== =====
Target Triple Notes
======================== =====
i686-pc-windows-msvc
x86_64-pc-windows-msvc
x86_64-apple-darwin BSD libc, clang
x86_64-unknown-linux-gnu glibc, gcc
======================== =====
Tier 2
------
- `STATUS <https://buildbot.python.org/all/#/builders?tags=%2B3.x&tags=%2Btier-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**.
============================= ========================== ========
Target Triple Notes Contacts
============================= ========================== ========
aarch64-apple-darwin clang Ned Deily, Ronald Oussoren, Dong-hee Na
aarch64-unknown-linux-gnu glibc, gcc Petr Viktorin, Victor Stinner
glibc, clang Victor Stinner, Gregory P. Smith
powerpc64le-unknown-linux-gnu glibc, gcc Petr Viktorin, Victor Stinner
x86_64-unknown-linux-gnu glibc, clang Victor Stinner, Gregory P. Smith
============================= ========================== ========
Tier 3
------
- `STATUS <https://buildbot.python.org/all/#/builders?tags=%2B3.x&tags=%2Btier-3>`__
- Must have a reliable buildbot.
- At least **one** core developer is signed up to support the platform.
- No response SLA to failures.
- Failures on these platforms do **not** block a release.
================================ =========================== ========
Target Triple Notes Contacts
================================ =========================== ========
aarch64-pc-windows-msvc Steve Dower
armv7l-unknown-linux-gnueabihf Raspberry Pi OS, glibc, gcc Gregory P. Smith
powerpc64le-unknown-linux-gnu glibc, clang Victor Stinner
s390x-unknown-linux-gnu glibc, gcc Victor Stinner
wasm32-unknown-emscripten Christian Heimes, Brett Cannon
wasm32-unknown-wasi Christian Heimes, Brett Cannon
x86_64-unknown-freebsd BSD libc, clang Victor Stinner
================================ =========================== ========
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 be rejected
or removed from the code base without a deprecation process if they
cause a maintenance burden or obstruct general improvements.
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.
Notes
-----
Microsoft Windows
'''''''''''''''''
Windows versions prior to Windows 10 follow Microsoft's `Fixed Lifecycle Policy
<https://learn.microsoft.com/en-us/lifecycle/policies/fixed>`__,
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)
<https://learn.microsoft.com/en-us/lifecycle/faq/extended-security-updates>`_
is a paid program available to high-volume enterprise customers
as 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's `Modern Lifecycle Policy
<https://learn.microsoft.com/en-us/lifecycle/policies/modern>`__,
which varies per-product, per-version, per-edition and per-channel.
Generally, feature updates (1709, 22H2) occur every 6-12 months
and 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's `Windows Lifecycle FAQ
<https://learn.microsoft.com/en-us/lifecycle/faq/windows>`_
has 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 versions
whose *extended support* phase has not yet expired.
Subsequent bug fix releases will support the same Windows versions
as the original feature release, even if no longer supported by Microsoft.
New versions of Windows released while CPython is in maintenance mode
may be supported at the discretion of the core team and release manager.
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
to use the same Visual Studio release; they are concerned both with
the availability of the versions they need to use, and with keeping
the zoo of versions small. The CPython source tree will keep
unmaintained build files for older Visual Studio releases, for which
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
'''''''''''''''
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
``UTF-8`` (``LC_CTYPE``-only locale) as an alternative to the legacy ``C``
locale.
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
| 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
| Details: http://www.syllable.org/discussion.php?id=2320
* | 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
===========
* April 2022: `Consider adding a Tier 3 to tiered platform support
<https://mail.python.org/archives/list/[email protected]/thread/V3OZPJGA5VJFYM6XYGPZIVPOIYKX6KTD/>`_
(Victor Stinner)
* March 2022: `Proposed tiered platform support
<https://mail.python.org/archives/list/[email protected]/thread/K757345KX6W5ZLTWYBUXOXQTJJTL7GW5/>`_
(Brett Cannon)
* February 2015: `Update to PEP 11 to clarify garnering platform support
<https://mail.python.org/archives/list/[email protected]/thread/OEQHRR2COYZDL6LZ42RBZOMIUB32WI34/>`_
(Brett Cannon)
* May 2014: `Where is our official policy of what platforms we do support?
<https://mail.python.org/archives/list/[email protected]/thread/T7WTUJ6TD3IGYGWV3M4PHJWNLM2WPZAW/>`_
(Brett Cannon)
* August 2007: `PEP 11 update - Call for port maintainers to step forward
<https://mail.python.org/archives/list/[email protected]/thread/DSSGXU5LBCMKYMZBRVB6RF3YAB6ST5AV/>`_
(Skip Montanaro)
Copyright
=========
This document is placed in the public domain or under the
CC0-1.0-Universal license, whichever is more permissive.