Skip to content

Drop x86_64-apple-darwin wheels in 0.19.x (arm64-only macOS) #112

Description

@ssmichael1

Proposal

Drop the x86_64-apple-darwin arch from [tool.cibuildwheel.macos] in pyproject.toml and ship arm64-only macOS wheels starting with the next minor release (0.19.x). Intel-Mac users would install via source build (pip install --no-binary satkit) or conda-forge.

Why now

  • Ecosystem alignment. SciPy dropped Intel macOS wheels in 1.13 (April 2024). Polars is arm64-only on macOS. The scientific-Python world is converging on arm64-only macOS binaries.
  • Apple stopped selling Intel Macs in mid-2023. Any Intel Mac in active use today is at least 3 years old; the satellite-mechanics audience (researchers, mission analysts) skews toward current hardware.
  • CI cost. Each macOS Python version currently builds twice (x86_64 + arm64). Across cp310/cp311/cp312/cp313/cp314 that's 5 extra wheel builds per release, plus the cross-compile setup (rustup target add x86_64-apple-darwin).
  • Runner availability is on a deprecation track. macos-latest is now arm64. macos-13 (the last Intel-native GitHub Actions runner) is announced for deprecation; we're already cross-compiling on arm64 runners and at some point the cross-compile will break in a non-obvious way.

Concrete change

 [tool.cibuildwheel.macos]
-archs = ["x86_64", "arm64"]
+archs = ["arm64"]
 before-build = [
   "pip install -U setuptools-rust",
   "rustup default stable",
-  "rustup target add aarch64-apple-darwin",
-  "rustup target add x86_64-apple-darwin",
+  "rustup target add aarch64-apple-darwin",
   "rustup show",
 ]

(The MACOSX_DEPLOYMENT_TARGET = "10.12" env var could be bumped to 11.0 since arm64 macOS shipped with Big Sur. Not required.)

Migration path for Intel-Mac users

  • pip install --no-binary satkit satkit — compiles from sdist; works on Intel Mac with a stable Rust toolchain.
  • conda install -c conda-forge satkit once the conda-forge feedstock is live — conda-forge builds for both x86_64 and arm64 macOS regardless of what we ship on PyPI.

Suggested timing

Land the change in the 0.19.x release. Mention in 0.19.0 CHANGELOG under a "Distribution" section or similar, with the migration path. Optionally announce one release in advance via a deprecation notice in 0.18.x docs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions