@@ -16,10 +16,12 @@ The Stable ABI as ``abi3`` can no longer be preserved, and requires replacement.
1616incompatibilities, with planned retirement after 10 years. A new ABI ``abi2030 ``
1717is planned to provide five years of overlap for the next ABI.
1818
19- Long-term stability will be enabled without restricting users through a
20- mechanism for runtime ABI discovery, allowing extensions to be compiled with
21- knowledge of APIs that were not available in prior releases, but can be accessed
22- through an identical ABI.
19+ Long-term stability will be enabled through a mechanism for runtime ABI
20+ discovery, allowing extensions to be run with earlier releases that support the
21+ same ABI. Changes and additions during the lifespan of an ABI can be added as
22+ *interfaces *, allowing them to be discovered at runtime so that callers can
23+ choose suitable fallback behaviour. Currently, such additions prevent extensions
24+ from loading at all on earlier runtimes.
2325
2426The ``abi3 `` ABI will be retained in GIL-enabled builds for five years, after
2527which time it will be retired (and only ``abi2025 `` and ``abi2030 `` will be
@@ -38,8 +40,8 @@ Motivation
3840==========
3941
4042The Stable ABI is currently not available for free-threaded builds.
41- Extensions will fail to build when :c:macro: `Py_LIMITED_API ` is defined,
42- and extensions built for GIL-enabled builds of CPython will fail to load
43+ Extensions will fail to build when :c:macro: `Py_LIMITED_API ` is defined.
44+ Likewise, extensions built for GIL-enabled builds of CPython will fail to load
4345(or crash) on free-threaded builds.
4446
4547In its `acceptance post <https://discuss.python.org/t/84319/123 >`__
@@ -79,13 +81,13 @@ exposes.
7981The Limited API is versioned, and building against Limited API 3.X
8082yields an extension that is ABI-compatible with CPython 3.X and *any * later
8183version (though bugs in CPython sometimes cause incompatibilities in practice).
82- Also, the Limited API is not "stable": newer versions may remove API that
83- were a part of older versions.
84+ Also, the Limited API is not "stable": newer versions may remove API items that
85+ were available in older versions.
8486
8587This PEP proposes a significant change to versioning of both the Limited API
86- and the Stable ABI, with the goal of enabling long-term management of stability
87- and compatibility, but without preventing access to innovations for those who
88- are using the limited subsets .
88+ and the Stable ABI. The goal is to enable long-term management of stability
89+ and compatibility, while also allowing users of the limited subsets to have
90+ access to innovations in later Python releases .
8991
9092
9193Rationale
@@ -125,10 +127,10 @@ ABI Stability
125127
126128The Stable ABI will be frozen for a duration of at least 10 years. When a new
127129version of the Stable ABI is frozen, the existing version will continue to be
128- supported for at least 5 years. This allows ample migration time for consumers
129- (that is, package developers ) to migrate their entire range of supported
130- releases simultaneously. However, if the core team sees no reason to replace the
131- current Stable ABI, the new version may be deferred.
130+ supported for at least 5 years. This allows ample migration time for package
131+ maintainers (and other users ) to migrate their entire range of supported
132+ releases simultaneously. However, if the Python team sees no reason to replace
133+ the current Stable ABI, the new version may be deferred.
132134
133135When a Stable ABI is frozen, the year becomes the name of the ABI. For example,
134136we anticipate that the first ABI under this scheme will be ``abi2026 ``, and will
@@ -163,7 +165,7 @@ New Export Hook (PEP 793)
163165-------------------------
164166
165167Implementation of this PEP requires :pep: `793 ` (``PyModExport ``:
166- A new entry point for C extension modules) to be
168+ A new entry point for C extension modules) to be
167169accepted, providing a new “export hook” for defining extension modules.
168170Using the new hook will become mandatory in Limited API 3.15.
169171
0 commit comments