|
2 | 2 |
|
3 | 3 | .. _stable:
|
4 | 4 |
|
5 |
| -*********************************** |
| 5 | +*************** |
| 6 | +C API Stability |
| 7 | +*************** |
| 8 | + |
| 9 | +Python's C API is covered by the Backwards Compatibility Policy, :pep:`387`. |
| 10 | +While the C API will change with every minor release (e.g. from 3.9 to 3.10), |
| 11 | +most changes will be source-compatible, typically by only adding new API. |
| 12 | +Changing existing API or removing API is only done after a deprecation period |
| 13 | +or to fix serious issues. |
| 14 | + |
| 15 | +CPython's Application Binary Interface (ABI) is forward- and |
| 16 | +backwards-compatible across a minor release (if these are compiled the same |
| 17 | +way; see :ref:`stable-abi-platform` below). |
| 18 | +So, code compiled for Python 3.10.0 will work on 3.10.8 and vice versa, |
| 19 | +but will need to be compiled separately for 3.9.x and 3.10.x. |
| 20 | + |
| 21 | +Names prefixed by an underscore, such as ``_Py_InternalState``, |
| 22 | +are private API that can change without notice even in patch releases. |
| 23 | + |
| 24 | + |
6 | 25 | Stable Application Binary Interface
|
7 |
| -*********************************** |
8 |
| - |
9 |
| -Traditionally, the C API of Python will change with every release. Most changes |
10 |
| -will be source-compatible, typically by only adding API, rather than changing |
11 |
| -existing API or removing API (although some interfaces do get removed after |
12 |
| -being deprecated first). |
13 |
| - |
14 |
| -Unfortunately, the API compatibility does not extend to binary compatibility |
15 |
| -(the ABI). The reason is primarily the evolution of struct definitions, where |
16 |
| -addition of a new field, or changing the type of a field, might not break the |
17 |
| -API, but can break the ABI. As a consequence, extension modules need to be |
18 |
| -recompiled for every Python release (although an exception is possible on Unix |
19 |
| -when none of the affected interfaces are used). In addition, on Windows, |
20 |
| -extension modules link with a specific pythonXY.dll and need to be recompiled to |
21 |
| -link with a newer one. |
22 |
| - |
23 |
| -Since Python 3.2, a subset of the API has been declared to guarantee a stable |
24 |
| -ABI. Extension modules wishing to use this API (called "limited API") need to |
25 |
| -define ``Py_LIMITED_API``. A number of interpreter details then become hidden |
26 |
| -from the extension module; in return, a module is built that works on any 3.x |
27 |
| -version (x>=2) without recompilation. |
28 |
| - |
29 |
| -In some cases, the stable ABI needs to be extended with new functions. |
30 |
| -Extension modules wishing to use these new APIs need to set ``Py_LIMITED_API`` |
31 |
| -to the ``PY_VERSION_HEX`` value (see :ref:`apiabiversion`) of the minimum Python |
32 |
| -version they want to support (e.g. ``0x03030000`` for Python 3.3). Such modules |
33 |
| -will work on all subsequent Python releases, but fail to load (because of |
34 |
| -missing symbols) on the older releases. |
35 |
| - |
36 |
| -As of Python 3.2, the set of functions available to the limited API is |
37 |
| -documented in :pep:`384`. In the C API documentation, API elements that are not |
38 |
| -part of the limited API are marked as "Not part of the limited API." |
| 26 | +=================================== |
| 27 | + |
| 28 | +Python 3.2 introduced the *Limited API*, a subset of Python's C API. |
| 29 | +Extensions that only use the Limited API can be |
| 30 | +compiled once and work with multiple versions of Python. |
| 31 | +Contents of the Limited API are :ref:`listed below <stable-abi-list>`. |
| 32 | + |
| 33 | +To enable this, Python provides a *Stable ABI*: a set of symbols that will |
| 34 | +remain compatible across Python 3.x versions. The Stable ABI contains symbols |
| 35 | +exposed in the Limited API, but also other ones – for example, functions |
| 36 | +necessary to support older versions of the Limited API. |
| 37 | + |
| 38 | +(For simplicity, this document talks about *extensions*, but the Limited API |
| 39 | +and Stable ABI work the same way for all uses of the API – for example, |
| 40 | +embedding Python.) |
| 41 | + |
| 42 | +.. c:macro:: Py_LIMITED_API |
| 43 | +
|
| 44 | + Define this macro ``Py_LIMITED_API`` before including ``Python.h`` to |
| 45 | + opt in to only use the Limited API. |
| 46 | + |
| 47 | + Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that |
| 48 | + the extension will work without recompilation with all Python 3.x releases |
| 49 | + (x>=2) on the particular :ref:`platform <stable-abi-platform>`. |
| 50 | + |
| 51 | + Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will |
| 52 | + limit the available API so that the extension will work without |
| 53 | + recompilation with all Python 3 releases from the specified one. |
| 54 | + This will allow using additional API introduced up to this version, |
| 55 | + but the extension will lose compatibility with earlier Python versions. |
| 56 | + Rather than using the ``PY_VERSION_HEX`` macro directly, hardcode a minimum |
| 57 | + minor version (e.g. ``0x030A0000`` for Python 3.10) for stability when |
| 58 | + compiling with future Python versions. |
| 59 | + |
| 60 | +On Windows, extensions that use the Stable ABI should be linked against |
| 61 | +``python3.dll`` rather than a version-specific library such as |
| 62 | +``python39.dll``. |
| 63 | + |
| 64 | +On some platforms, Python will look for and load shared library files named |
| 65 | +with the ``abi3`` tag (e.g. ``mymodule.abi3.so``). |
| 66 | +It does not check if such extensions conform to a Stable ABI. |
| 67 | +The user (or their packaging tools) need to ensure that, for example, |
| 68 | +extensions built with the 3.10+ Limited API are not installed for lower |
| 69 | +versions of Python. |
| 70 | + |
| 71 | +All functions in the Stable ABI are present as functions in Python's shared |
| 72 | +library, not solely as macros. This makes them usable from languages that don't |
| 73 | +use the C preprocessor. |
| 74 | + |
| 75 | + |
| 76 | +Limited API Scope and Performance |
| 77 | +--------------------------------- |
| 78 | + |
| 79 | +The goal for the Limited API is to allow everything that is possible with the |
| 80 | +full C API, but possibly with a performance penalty. |
| 81 | + |
| 82 | +For example, while :c:func:`PyList_GetItem` is available, its “unsafe” macro |
| 83 | +variant :c:func:`PyList_GET_ITEM` is not. |
| 84 | +The macro can be faster because it can rely on version-specific implementation |
| 85 | +details of the list object. |
| 86 | + |
| 87 | +Without ``Py_LIMITED_API`` defined, some C API functions are inlined or |
| 88 | +replaced by macros. |
| 89 | +Defining ``Py_LIMITED_API`` disables this inlining, allowing stability as |
| 90 | +Python's data structures are improved, but possibly reducing performance. |
| 91 | + |
| 92 | +By leaving out the ``Py_LIMITED_API`` definition, it is possible to compile |
| 93 | +a Limited API extension with a version-specific ABI. This can improve |
| 94 | +performance for that Python version, but will limit compatibility. |
| 95 | +Compiling with ``Py_LIMITED_API`` will then yield an extension that can be |
| 96 | +distributed where a version-specific one is not available – for example, |
| 97 | +for prereleases of an upcoming Python version. |
| 98 | + |
| 99 | + |
| 100 | +Limited API Caveats |
| 101 | +------------------- |
| 102 | + |
| 103 | +Note that compiling with ``Py_LIMITED_API`` is *not* a complete guarantee that |
| 104 | +code conforms to the Limited API or the Stable ABI. ``Py_LIMITED_API`` only |
| 105 | +covers definitions, but an API also includes other issues, such as expected |
| 106 | +semantics. |
| 107 | + |
| 108 | +One issue that ``Py_LIMITED_API`` does not guard against is calling a function |
| 109 | +with arguments that are invalid in a lower Python version. |
| 110 | +For example, consider a function that starts accepting ``NULL`` for an |
| 111 | +argument. In Python 3.9, ``NULL`` now selects a default behavior, but in |
| 112 | +Python 3.8, the argument will be used directly, causing a ``NULL`` dereference |
| 113 | +and crash. A similar argument works for fields of structs. |
| 114 | + |
| 115 | +Another issue is that some struct fields are currently not hidden when |
| 116 | +``Py_LIMITED_API`` is defined, even though they're part of the Limited API. |
| 117 | + |
| 118 | +For these reasons, we recommend testing an extension with *all* minor Python |
| 119 | +versions it supports, and preferably to build with the *lowest* such version. |
| 120 | + |
| 121 | +We also recommend reviewing documentation of all used API to check |
| 122 | +if it is explicitly part of the Limited API. Even with ``Py_LIMITED_API`` |
| 123 | +defined, a few private declarations are exposed for technical reasons (or |
| 124 | +even unintentionally, as bugs). |
| 125 | + |
| 126 | +Also note that the Limited API is not necessarily stable: compiling with |
| 127 | +``Py_LIMITED_API`` with Python 3.8 means that the extension will |
| 128 | +run with Python 3.12, but it will not necessarily *compile* with Python 3.12. |
| 129 | +In particular, parts of the Limited API may be deprecated and removed, |
| 130 | +provided that the Stable ABI stays stable. |
| 131 | + |
| 132 | + |
| 133 | +.. _stable-abi-platform: |
| 134 | + |
| 135 | +Platform Considerations |
| 136 | +======================= |
| 137 | + |
| 138 | +ABI stability depends not only on Python, but also on the compiler used, |
| 139 | +lower-level libraries and compiler options. For the purposes of the Stable ABI, |
| 140 | +these details define a “platform”. They usually depend on the OS |
| 141 | +type and processor architecture |
| 142 | + |
| 143 | +It is the responsibility of each particular distributor of Python |
| 144 | +to ensure that all Python versions on a particular platform are built |
| 145 | +in a way that does not break the Stable ABI. |
| 146 | +This is the case with Windows and macOS releases from ``python.org`` and many |
| 147 | +third-party distributors. |
| 148 | + |
| 149 | + |
| 150 | +.. _stable-abi-list: |
| 151 | + |
| 152 | +Contents of Limited API |
| 153 | +======================= |
| 154 | + |
| 155 | + |
| 156 | +Currently, the Limited API includes the following items: |
| 157 | + |
| 158 | +.. limited-api-list:: |
0 commit comments