PEP 11 – CPython 平台支持
- 作者:
- Martin von Löwis <martin at v.loewis.de>,Brett Cannon <brett at python.org>
- 状态:
- 活跃
- 类型:
- 流程
- 创建时间:
- 2002-07-07
- 更新历史:
- 2007-08-18,2014-05-14,2015-02-20,2022-03-10
摘要
本 PEP 文档介绍了操作系统 (平台) 如何在 CPython 中获得支持,当前支持的平台以及过去的支持情况。
原理
随着时间的推移,CPython 源代码积累了各种特定于平台的代码片段,这些代码在过去被认为是在特定平台上使用 CPython 所必需的。如果没有访问该平台,就无法确定这些代码是否仍然需要。因此,这些代码可能会在 CPython 的发展过程中出现故障,或者随着平台的不断发展而变得不再必要。
允许这些代码片段不断增长会带来维护不可控的风险:如果没有大量平台的专家,就无法确定对 CPython 源代码的某些更改是否会在所有支持的平台上运行。
为了降低这种风险,本 PEP 规定了平台要被 CPython 视为受支持需要满足的条件,以及一个用于移除对 CPython 用户很少或没有的平台的代码的程序。
本 PEP 还列出了 CPython 解释器所支持的平台。这使人们了解 CPython 开发团队直接支持的平台。
支持层级
平台支持被细分为 _层级_。每个层级都有不同的要求,导致对支持做出的承诺也不同。
要提升到某个层级,需要获得指导委员会的支持,并且预计这将由团队共识推动。降级到较低层级发生在当一个平台在较长一段时间内不再满足当前层级的要求时,这将基于发布经理或指导委员会的判断。对于在新的功能版本发布的 b1 之前不再满足任何层级要求的平台,将发布公告提醒社区即将移除对该平台的支持(例如,在 b1 公告中)。如果该平台在第一个候选发布版本发布之前没有被提升到至少一个层级,它将被列入本 PEP 中的“不受支持”平台。
第一层级
- 状态
- CI 故障会阻止发布。
- 不允许合并会破坏
main
分支的更改;任何损坏应该立即修复或回滚。 - 所有核心开发人员有责任维护
main
,以及这些平台的正常运行。 - 这些平台上的故障会 _阻止发布_。
目标三元组 | 备注 |
---|---|
aarch64-apple-darwin | clang |
i686-pc-windows-msvc | |
x86_64-pc-windows-msvc | |
x86_64-apple-darwin | BSD libc, clang |
x86_64-unknown-linux-gnu | glibc, gcc |
第二层级
- 状态
- 必须有一个可靠的 buildbot。
- 至少 _两个_ 核心开发人员注册支持该平台。
- 破坏任何这些平台的更改必须在 _24 小时内_ 修复或回滚。
- 这些平台上的故障会 _阻止发布_。
目标三元组 | 备注 | 联系方式 |
---|---|---|
aarch64-unknown-linux-gnu | glibc, gcc glibc, clang |
Petr Viktorin, Victor Stinner Victor Stinner, Gregory P. Smith |
wasm32-unknown-wasi | WASI SDK, Wasmtime | Brett Cannon, Eric Snow |
x86_64-unknown-linux-gnu | glibc, clang | Victor Stinner, Gregory P. Smith |
第三层级
- 状态
- 必须有一个可靠的 buildbot。
- 至少 _一个_ 核心开发人员注册支持该平台。
- 故障没有响应 SLA。
- 这些平台上的故障 _不会_ 阻止发布。
目标三元组 | 备注 | 联系方式 |
---|---|---|
aarch64-pc-windows-msvc | Steve Dower | |
arm64-apple-ios | 设备上的 iOS | Russell Keith-Magee, Ned Deily |
arm64-apple-ios-simulator | M1 macOS 模拟器上的 iOS | Russell Keith-Magee, Ned Deily |
armv7l-unknown-linux-gnueabihf | Raspberry Pi OS, glibc, gcc | Gregory P. Smith |
powerpc64le-unknown-linux-gnu | glibc, clang glibc, gcc |
Victor Stinner Victor Stinner |
s390x-unknown-linux-gnu | glibc, gcc | Victor Stinner |
x86_64-unknown-freebsd | BSD libc, clang | Victor Stinner |
所有其他平台
对某个平台的支持可能在代码库中是不完整的,例如来自平台支持的积极开发或意外导致的。如果代码更改对上面列出的层级中没有列出的平台造成了维护负担或阻碍了总体改进,则这些更改可能会被拒绝或从代码库中删除,无需进行弃用流程。
上面没有列出的平台可能以某种方式受到更广泛的 Python 社区的支持。如果您所需的平台不在上述列表中,请在线搜索以查看是否有人已经以某种方式提供支持。
备注
Microsoft Windows
Windows 10 之前的 Windows 版本遵循微软的 固定生命周期策略,在发布后的 5 年内处于主流支持阶段,产品通常在商业上可用,以及额外的 5 年扩展支持阶段,在此期间仍可获得付费支持,并会发布某些错误修复。 扩展安全更新 (ESU) 是一个付费计划,面向高容量企业客户,作为“最后手段”选项,在扩展支持结束后接收某些安全更新。ESU 被认为是扩展支持到期后的一个独立阶段。
Windows 10 及更高版本遵循微软的 现代生命周期策略,该策略因产品、版本、版本和渠道而异。通常情况下,功能更新(1709、22H2)每 6-12 个月发布一次,并支持 18-36 个月;服务器和物联网版本以及 LTSC 渠道版本支持 5-10 年,主要版本的最新功能版本(Windows 10、Windows 11)通常在发布后至少接收 10 年的新更新。微软的 Windows 生命周期常见问题解答 提供了更具体和最新的指南。
CPython 的 Windows 支持目前遵循微软的生命周期。新的功能版本 X.Y.0 将支持所有 _扩展支持_ 阶段尚未到期的 Windows 版本。后续的错误修复版本将支持与原始功能版本相同的 Windows 版本,即使它们不再受到微软的支持。在 CPython 处于维护模式期间发布的 Windows 新版本可能会在核心团队和发布经理的决定下得到支持。
截至 2024 年,我们对微软生命周期的当前解释是,面向物联网和嵌入式系统的 Windows 不在新的 CPython 版本的范围之内,因为这些系统的目的是避免功能更新。Windows Server 通常是最早仍能接收免费安全修复的版本,这将决定具有等效 API 版本的最早支持的客户端版本(通常已过其使用寿命)。
每个功能版本都由特定版本的 Microsoft Visual Studio 构建。在发布版本时,该版本应该处于主流支持阶段。扩展模块的开发人员通常需要使用相同的 Visual Studio 版本;他们既关心他们需要使用的版本的可用性,也关心保持版本库的大小。CPython 源代码树将保留对旧版 Visual Studio 版本的未维护构建文件,并将接受针对这些文件的补丁。这些构建文件将在编译器的扩展支持结束后的 3 年内从源代码树中删除(但继续保留在版本控制中)。
旧版 C 本地化
从 CPython 3.7.0 开始,*nix 平台预计至少提供一个 C.UTF-8
(完整本地化)、C.utf8
(完整本地化)或 UTF-8
(LC_CTYPE
-only 本地化)作为旧版 C
本地化的替代方案。
仅在旧版 C
本地化中出现的、在正确配置的非 ASCII 本地化中无法重现的任何 Unicode 相关集成问题都将被关闭为“不会修复”。
不支持的平台
如果某个平台从层级支持中退出,则必须在本 PEP 中发布一条通知,说明该平台不再获得主动支持。此通知必须包括
- 系统名称,
- 不再支持该平台的第一个发布版本号,以及
- 积极删除历史支持代码的第一个发布版本号。
在某些情况下,无法识别使用某些代码的系统的特定列表(例如,当 autoconf 测试一些在所有支持的系统上都被认为存在的功能的缺失时)。在这种情况下,名称将给出将不再受支持的精确条件(通常是一个预处理器符号)。
同时,CPython 构建必须更改为在有人尝试在该平台上安装 CPython 时发出警告。在使用 autoconf 的平台上,configure 还应该发出有关不受支持平台的警告。
这使潜在的平台用户有机会站出来提供维护。我们不会对失去第三层级支持的平台比从未得到支持的平台采取更糟糕的待遇。
不再支持的平台
- 名称:MS-DOS,MS-Windows 3.x在以下版本中不受支持:Python 2.0在以下版本中删除代码:Python 2.1
- 名称:SunOS 4在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:DYNIX在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:dgux在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:Minix在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:Irix 4 和 –with-sgi-dl在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:Linux 1在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:定义 __d6_pthread_create 的系统 (configure.in)在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:在 thread_pthread.h 中定义 PY_PTHREAD_D4、PY_PTHREAD_D6 或 PY_PTHREAD_D7 的系统在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:使用 –with-dl-dld 的系统在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:使用 –without-universal-newlines 的系统,在以下版本中不受支持:Python 2.3在以下版本中删除代码:Python 2.4
- 名称:MacOS 9在以下版本中不受支持:Python 2.4在以下版本中删除代码:Python 2.4
- 名称:使用 –with-wctype-functions 的系统在以下版本中不受支持:Python 2.6在以下版本中删除代码:Python 2.6
- 名称:Win9x,WinME,NT4在以下版本中不受支持:Python 2.6(在 2.5 安装程序中发出警告)在以下版本中删除代码:Python 2.6
- 名称:AtheOS在以下版本中不受支持:Python 2.6(将“AtheOS”更改为“Syllable”)在以下版本中构建中断:Python 2.7(编辑 configure 重新启用)在以下版本中删除代码:Python 3.0
- 名称:BeOS在以下版本中不受支持:Python 2.6(在 configure 中发出警告)在以下版本中构建中断:Python 2.7(编辑 configure 重新启用)在以下版本中删除代码:Python 3.0
- 名称:使用 Mach C 线程的系统在以下版本中不受支持:Python 3.2在以下版本中删除代码:Python 3.3
- 名称:SunOS 轻量级进程 (LWP)在以下版本中不受支持:Python 3.2在以下版本中删除代码:Python 3.3
- 名称:使用 –with-pth(GNU pth 线程)的系统在以下版本中不受支持:Python 3.2在以下版本中删除代码:Python 3.3
- 名称:使用 Irix 线程的系统在以下版本中不受支持:Python 3.2在以下版本中删除代码:Python 3.3
- 名称:OSF* 系统(问题 8606)在以下版本中不受支持:Python 3.2在以下版本中删除代码:Python 3.3
- 名称:OS/2(问题 16135)在以下版本中不受支持:Python 3.3在以下版本中删除代码:Python 3.4
- 名称:VMS(问题 16136)在以下版本中不受支持:Python 3.3在以下版本中删除代码:Python 3.4
- 名称:Windows 2000在以下版本中不受支持:Python 3.3在以下版本中删除代码:Python 3.4
- 名称:COMSPEC 指向 command.com 的 Windows 系统在以下版本中不受支持:Python 3.3在以下版本中删除代码:Python 3.4
- 名称:RISC OS在以下版本中不受支持:Python 3.0(部分代码已删除)在以下版本中删除代码:Python 3.4
- 名称:IRIX在以下版本中不受支持:Python 3.7在以下版本中删除代码:Python 3.7
- 名称:没有多线程支持的系统在以下版本中不受支持:Python 3.7在以下版本中删除代码:Python 3.7
- 名称:wasm32-unknown-emscripten在以下版本中不受支持:Python 3.13在以下版本中删除代码:未知
讨论
- 2022 年 4 月:考虑在层级平台支持中添加第三层级(Victor Stinner)
- 2022 年 3 月:提议分层平台支持 (Brett Cannon)
- 2015 年 2 月:更新 PEP 11 以澄清获得平台支持 (Brett Cannon)
- 2014 年 5 月:我们官方支持平台的政策在哪里? (Brett Cannon)
- 2007 年 8 月:PEP 11 更新 - 呼吁端口维护者站出来 (Skip Montanaro)
版权
本文档已置于公共领域或 CC0-1.0-Universal 许可证下,以更具许可性的许可证为准。
来源:https://github.com/python/peps/blob/main/peps/pep-0011.rst