@@ -50,7 +50,6 @@ for free-threading should be prepared and defined for Python 3.15”.
5050
5151This PEP proposes the Stable ABI for free-threading.
5252
53-
5453Background
5554----------
5655
@@ -80,6 +79,75 @@ were a part of older versions.
8079This PEP proposes additional API limitations, as required to be compatible
8180with both GIL-enabled and free-threaded builds of CPython.
8281
82+ Ecosystem maintainers want decreased maintenance burden
83+ -------------------------------------------------------
84+
85+ A major advantage of the limited API and stable ABI wheels is that new
86+ Python versions are supported on the day of release. Without stable ABI
87+ wheels, maintainers are left with a choice between closely following CPython
88+ releases and producing wheels during CPython beta periods or dealing with
89+ inevitable user requests for support for new CPython versions.
90+
91+ Cryptography
92+ ^^^^^^^^^^^^
93+
94+ The cryptography project shipped 48 wheel files with their `most recent release
95+ <https://pypi.org/project/cryptography/46.0.5/#files> `_. Cryptography is
96+ somewhat unusual in that they ship 14 wheels each for both the ``cp38 `` and
97+ ``cp311 `` stable ABIs to enable optimizations available in newer limited API
98+ versions. They also ship 14 additional ``cp314t `` wheels and 6 wheels for
99+ pypy. If there is no free-threaded stable ABI, then with Python 3.15,
100+ cryptography will be using roughtly the same amount of space on PyPI to support
101+ two versions of the free-threaded build as *all * non-EOL versions of the
102+ GIL-enabled build.
103+
104+ Cryptography maintainer Alex Gaynor `expressed a desire
105+ <https://discuss.python.org/t/making-pyobject-opaque-in-the-limited-api/77206/2> `_
106+ on discourse for a free-threaded stable ABI:
107+
108+ Just to state this explicitly from the PyCA maintainers perspective, as
109+ long as we have O(1) builds, that’s ok. What we can’t/won’t do is O(n)
110+ where we need new builds for every Python release.
111+
112+ moocore
113+ ^^^^^^^
114+
115+ The moocore project `ships seven abi3 wheels
116+ <https://pypi.org/project/moocore/0.2.0/#files> `_. It has a much smaller
117+ userbase than cryptography and has a smaller appetite for build complexity. When
118+ the topic of adding support for the free-threaded build `came up on the moocore
119+ issue tracker <https://github.com/multi-objective/moocore/issues/37> `_,
120+ maintainer Manuel López-Ibáñez let the person reporting the issue know that:
121+
122+ The free-threading versions are still experimental so each new
123+ free-threading python version will need its own wheels.
124+
125+ Moreover, since free-threading is still experimental and not the default,
126+ there may be bugs that only the Python developers can fix. I would expect
127+ most users of moocore and pymoo to use the default non-free-threaded version
128+ of Python 3.14.
129+
130+ [...]
131+
132+ **I don't want to build for 3.14 free-threading unless you really need it. **
133+
134+ Later, after discovering the tracking issue for supporting the limited API on the
135+ free-threaded build, he commented:
136+
137+ By the way, python/cpython#111506 is about extending the stable ABI to
138+ support free-threaded Python. If they do that, then the builds of moocore
139+ will work in both classical and free-threaded Python versions, without
140+ needing to build new wheels for each Python version.
141+
142+ [...]
143+
144+ I will revisit this again once Python 3.15 is released. Hopefully the ABI
145+ will be stable (or even better, free-threading will be the default).
146+
147+ These two libraries -- cryptography and moocore -- are on opposite sides of the
148+ maintainer bandwidth spectrum, but both would still really like to have a stable
149+ ABI on the free-threaded build they can use to ship wheels and reduce their
150+ maintenance burden.
83151
84152Rationale
85153=========
0 commit comments