Skip to content

Update build images to use something other than manylinux2014 #122

@flavorjones

Description

@flavorjones

Context

The x86-linux-gnu and x86_64-linux-gnu build images are based on manylinux2014. manylinux is a set of base images maintained by the Python community for building Wheels (which is what precompiled Python packages are called), and you can read more about the project at https://github.com/pypa/manylinux

manylinux2014 is specified at https://peps.python.org/pep-0599/. It is based on CentOS 7 and supports GLIBC_2.17 and above.

CentOS 7 becomes EOL on 2024-06-30 according to https://www.redhat.com/en/topics/linux/centos-linux-eol

Problems we're trying to solve

  • I'd like to use a more modern base image. Older versions of packages can cause problems, see for example pkg-config version in x86-linux and x86_64-linux images taking a long time to resolve re2.pc #121 which describes the performance issues of pkg-config in these images.
  • I'd like to unify the linux builds a bit.
    • Currently the x86-linux-gnu and x86_64-linux-gnu images are distinct from the other gnu linux images, which use ubuntu:20.04 and only support GLIBC_2.29 and above.
    • And the musl images are built using ubuntu:20.04 and a cross-compilation stack which supports unclear versions of the musl libc API.

Option A: Move to manylinux_2_28 and musllinux_1_2?

Work in progress here: #124

We'll leave the windows and darwin builds to happen via cross-compilation on a vanilla ubuntu system for now. We've got until 2025-04-23 to get off of ubuntu:20.04.

Problems doing this would introduce:

  • It means we would support GLIBC_2.28 for all versions of gnu linux, an improvement on arm and aarch, but a worse situation for x86 support.
    • Though, to be fair, I don't know that any older versions of GLIBC receive production support from distro vendors anymore? So maybe this is OK.
  • It doesn't look like manylinux_2_28 supports 32-bit linux anymore, see the contents of https://quay.io/organization/pypa, so we would likely have to drop 32-bit support
    • Though based on Nokogiri's download stats which has x86-linux at 0.02% of downloads since 2021-01, this might be a non-issue?

Option B: Move to ubuntu:20.04 for everything?

Work in progress here: #126

  • manylinux_2_28 works for x86_64
    • but does not provide support for 32-bit linux
    • and non-x86 images are pinned to that platform so they don't easily cross-compile
  • ubuntu 20.04 seems to support building against glibc 2.29
    • not much worse than 2.28
    • much lower complexity since we unify the image build process

Let's give it a try.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions