Description
As time goes by, projects start using new glibc features not present in old versions, hence requiring a newer manylinux baseline version to be defined.
For example:
- Nightly wheels broken triton-lang/triton#2616
- Error Repairing Wheel to manylinux2014_x86_64 ABI Due to Too-Recent Versioned Symbols #1574
Also, according to the manylinux-timeline, around ~40% of users on non-EOL Python versions have better than glibc 2.34 already.
IMO the discussion in #1282 (and the failure of Debian-based 2_24
, c.f. #1012) showed comprehensively that we should stick with a RHEL-derivative also for the next manylinux standard - the devtoolset backports make all the difference w.r.t. to longevity, and all those flavours are ABI compatible.
This would also continue the pattern for all major manylinux standards so far (again excepting 2_24
):
manylinux | glibc | RHEL |
---|---|---|
manylinux1 | 2.5 | 5 |
manylinux2010 | 2.12 | 6 |
manylinux2014 | 2.17 | 7 |
manylinux_2_28 | 2.28 | 8 |
manylinux_2_34 | 2.34 | 9 |
Updating the flavour table from #1282:
The big question is what base image to use. We can choose between C9S (
centos:stream9
), AlmaLinux, RockyLinux, or UBI. Personally I would prefer an image based entirely on open source software. [...]
Obviously Alma (as the base for 2_28
) is a strong candidate, though since then, RHEL has announced it will not provide its sources anymore, creating some doubts initially how Alma will continue, though in the end, they decided they have everything they need to keep going. They'll keep ABI-compatibility (which is by far the most important), but will drop bug-for-bug compatibility (which is IMO not a big deal for us). Still, this might influence the decision; at the time of #1282, the main argument against using UBI was the lack of a gcc-toolset, but this has since been added (both to UBI 8 & 9).
base image | EOL¹ | gcc-toolset-13² | aarch64 | ppc64le | s390x | bug fix availability |
---|---|---|---|---|---|---|
CentOS Stream 9 | 2027-05-31³ | yes | yes³ | yes³ | yes³ | 1st |
UBI 9 | 2032-05-31 | yes⁴ | yes⁵ | yes⁵ | yes⁵ | 2nd |
AlmaLinux 9 | 2032-05-31 | yes | yes⁶ | yes⁶ | yes⁶ | 3rd |
RockyLinux 9 | 2032-05-31 | yes | yes⁷ | yes⁷ | yes⁷ | 3rd |
1: including Maintenance Support, https://access.redhat.com/support/policy/updates/errata/#Life_Cycle_Dates
2: https://pkgs.org/download/gcc-toolset-13
3: https://www.centos.org/centos-stream/
4: at least gcc 12, probably on gcc 13 already
5: https://hub.docker.com/r/redhat/ubi9-minimal/tags
6: https://github.com/AlmaLinux/cloud-images / https://hub.docker.com/r/almalinux/9-minimal
7: https://hub.docker.com/r/rockylinux/rockylinux/tags
The checklist is short, since wheel and pip, which both use packaging, and warehouse do not require additional PRs.
Publisher-side Support:
- feat: Add manylinux_2_34 image #1698
- Find BETA testers to check wether changes are required immediately, especially C++ projects have a chance to get a failure on repair, knowing how much they're affected will help to prioritize work on auditwheel.
- Upload the new images to quay.io
- Auditwheel to detect x86-64-v2 (feat: add GNU_PROPERTY_X86_ISA_1_NEEDED detection auditwheel#535, see manylinux_2_34 x86-64 builds produce binaries that are not compatible with all x86-64 CPUs #1725 (comment) for limitations)
Documentation:
- ???
Additional projects to double-check for support, perhaps these are already done?
- Add an option to target manylinux_2_34 in cibuildwheel: feat: add manylinux_2_34 cibuildwheel#2098
- Add an option to target manylinux_2_34 in multibuild
- Add an option to target manylinux_2_34 in maturin -- likely completed by Add
manylinux_2_34
andmanylinux_2_35
policies PyO3/maturin#1273 already - Distinguish between images in dockcross