Generally, the platform support in public packages is limited by the wheel tags that PyPI accepts. The question is, what tags should we build for by default? The platform support of Rust/C/C++ and the platform support encoded in packaging tools is larger than that of PyPI, but for CI complexity, release performance and release size (PyPI has size limits), I’m looking for what should be the recommended default set of platforms to build wheels for.
Personally, I’m thinking about both the platforms that uv provides wheels for and the ones that maturin(-action) should include the defaults, but I’m sure there are more cases with the same problems. There may also be a difference in whether you’re shipping a standalone binary or an extension module?
The obvious ones to support are:
Linux x86_64
Linux arm64
macOS x86_64 (though this may get deprecate at some point as apple drop support?)
macOS arm64
Windows x86_64
Windows arm64 (Slow start, but there’s increasing consumer hardware with it such as arm notebooks)
Supported by PyPI, but clearly dead:
macOS PPC
macOS PPC64
macOS i386
Windows ia64
Other target - These are the ones where it’s interesting whether they should be supported by default:
Good question - I assume the answer will strongly depend on build complexity and whether one wants to optimize for the average OSS maintainer or for projects with paid dev time behind them. I’d hope for the former, meaning that tools aimed at distribution shouldn’t use overly inclusive defaults.
What makes you think that Linux distributions stop supporting PPC64? The Fedora family (Fedora, CentOS Stream, RHEL, Alma, …) and Debian family (Debian, Ubuntu, …) have full support for Power ppc64le. PEP 11 lists ppc64le as Tier 3 platform, Rust even as a Tier 2 platform.
Maybe you got confused by the fact that PPC64 has two variants. ppc64le (little endian) is actively maintained and used in servers and super computers. ppc64be (big endian) is pretty much dead.
The naming in Python is confusing: PPC64 (no suffix) is big endian, while PPC64LE is little endian. The dead platform I’m referring to is the big endian PPC64, PPC64LE is still supported, I’ve explicitly listed both of them in the other targets list below.
Thanks for clarifying! I agree with you, big endian Power has become irrelevant and is no longer supported. My last piece of hardware with a Power CPU was a PowerBook 25 year ago.
The acronyms are confusing and not consistently used. As I mentioned in the Ruff ticket, it leads to all sorts of confusion.
I have seen people generally PPC64 (upper case) to refer to the general 64bit Power platform. Big endian Power is commonly refer to as ppc64, ppc64be, or powerpc64. IIRC LLVM uses ppc64 internally. config.guess, LLVM’s, and therefore Rust’s platform triplet use powerpc64.
I see no blog post with an official announcement on pypy.org yet, but here is a statement from Matti Picus (long-time maintainer of both PyPy and NumPy): “PyPy is no longer under active development, and has not released a Python3.12 version.” And the commit graph confirms: Contributors to pypy/pypy · GitHub