Skip to content

Commit e479501

Browse files
authored
Merge pull request #656 from pypa/update-manylinux-section
Update manylinux tags section
2 parents 921372d + 08421bc commit e479501

File tree

1 file changed

+81
-15
lines changed

1 file changed

+81
-15
lines changed

source/specifications/platform-compatibility-tags.rst

Lines changed: 81 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,90 @@
55
Platform compatibility tags
66
===========================
77

8-
The platform compatibility tagging model used for ``wheel`` distribution is
9-
defined in :pep:`425`.
8+
Platform compatibility tags allow build tools to mark distributions as being
9+
compatible with specific platforms, and allows installers to understand which
10+
distributions are compatible with the system they are running on.
11+
12+
The platform compatibility tagging model used for the ``wheel`` distribution
13+
format is defined in :pep:`425`.
14+
15+
Platform tags for Windows
16+
-------------------------
17+
18+
The scheme defined in :pep:`425` covers public distribution of wheel files to
19+
systems running Windows.
20+
21+
Platform tags for macOS (Mac OS X)
22+
----------------------------------
23+
24+
The scheme defined in :pep:`425` covers public distribution of wheel files to
25+
systems running macOS (previously known as Mac OS X).
26+
27+
Platform tags for common Linux distributions
28+
--------------------------------------------
1029

1130
.. _manylinux:
1231

13-
Manylinux tags
14-
==============
32+
The scheme defined in :pep:`425` is insufficient for public distribution of
33+
wheel files (and \*nix wheel files in general) to Linux platforms, due to the
34+
large ecosystem of Linux platforms and subtle differences between them.
35+
36+
Instead, :pep:`513` defines the ``manylinux`` standard, which represents a
37+
common subset of Linux platforms, and allows building wheels tagged with the
38+
``manylinux`` platform tag which can be used across most common Linux
39+
distributions.
40+
41+
There are multiple iterations of the ``manylinux`` specification, each
42+
representing the common subset of Linux platforms at a given point in time:
43+
44+
* ``manylinux1`` (:pep:`513`) supports ``x86_64`` and ``i686``
45+
architectures, and is based on a compatible Linux platform from 2007.
46+
* ``manylinux2010`` (:pep:`571`) supports ``x86_64`` and ``i686``
47+
architectures. and updates the previous specification to be based on a
48+
compatible Linux platform from 2010 instead.
49+
* ``manylinux2014`` (:pep:`599`) adds support for a number of
50+
additional architectures (``aarch64``, ``armv7l``, ``ppc64``, ``ppc64le``,
51+
and ``s390x``) and updates the base platform to a compatible Linux platform
52+
from 2014.
53+
54+
In general, distributions built for older versions of the specification are
55+
forwards-compatible (meaning that ``manylinux1`` distributions should continue
56+
to work on modern systems) but not backwards-compatible (meaning that
57+
``manylinux2010`` distributions are not expected to work on platforms that
58+
existed before 2010).
59+
60+
Package maintainers should attempt to target the most compatible specification
61+
possible, with the caveat that the provided build environment for
62+
``manylinux1`` has reached end-of-life, and the build environment for
63+
``manylinux2010`` will reach end-of-life in November 2020 [#]_, meaning that
64+
these images will no longer receive security updates.
65+
66+
Manylinux compatibility support
67+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68+
69+
.. Note::
70+
The ``manylinux2014`` specification is relatively new and is not yet widely
71+
recognised by install tools.
72+
73+
The following table shows the minimum versions of relevant projects to support
74+
the various ``manylinux`` standards:
75+
76+
========== ============== ================= =================
77+
Tool ``manylinux1`` ``manylinux2010`` ``manylinux2014``
78+
========== ============== ================= =================
79+
pip ``>=8.1.0`` ``>=19.0`` ``>=19.3`` [#]_
80+
auditwheel ``>=1.0.0`` ``>=2.0.0`` ``>=3.0.0`` [#]_
81+
========== ============== ================= =================
82+
83+
Platform tags for other \*nix platforms
84+
---------------------------------------
1585

16-
The scheme defined in :pep:`425` is insufficient for public distribution
17-
of Linux wheel files (and \*nix wheel files in general), so the *manylinux*
18-
platform tags were defined, to allow providing wheels for many common Linux
19-
distributions. See :pep:`513` for more about how this works.
86+
The scheme defined in :pep:`425` is not generally sufficient for public
87+
distribution of wheel files to other \*nix platforms. Efforts are currently
88+
(albeit intermittently) under way to define improved compatibility tagging
89+
schemes for AIX and for Alpine Linux.
2090

21-
* ``manylinux1`` is defined in :pep:`513`, for x86_64 and i686 architectures.
22-
* ``manylinux2010`` is defined in :pep:`571`, for x86_64 and i686 architectures.
23-
It is based on a platform from 2010, whereas ``manylinux1`` is based on a
24-
platform from 2007. This means that ``manylinux2010`` packages are easier to
25-
create, but not compatible with some older systems where ``manylinux1``
26-
packages would work.
2791

28-
``manylinux2010`` is not yet widely recognised by install tools.
92+
.. [#] https://wiki.centos.org/About/Product
93+
.. [#] Not yet released.
94+
.. [#] Not yet released.

0 commit comments

Comments
 (0)