Summary

Promote aarch64-apple-darwin to Tier 1.

Motivation

Approximately 33% of Rust users use macOS for development. Hardware using Apple Silicon CPUs is noticeably more performant than previous x86_64 Apple hardware and many developers have already transitioned to using aarch64-apple-darwin. This number is expected to increase as Apple no longer produces x86_64 hardware.

Guide-level explanation

This change will not require additional explanation to Rust programmers as many people believe that aarch64-apple-darwin is already Tier 1. As such, I expect this change will reduce potential confusion.

Reference-level explanation

Tier 1 targets must adhere to the Tier 1 Target Policy. This RFC intends that aarch64-apple-darwin will be Tier 1 with host tools. Going through these requirements point-by-point:

Tier 1 targets must have substantial, widespread interest within the developer community, and must serve the ongoing needs of multiple production users of Rust across multiple organizations or projects.

As stated above, macOS users comprise a non-trivial percentage of overall Rust users.

The target maintainer team must include at least 3 developers.

There is an existing team for Apple and macOS specific concerns. The aarch64-apple-darwin target is actively used and maintained. Rust has been tracking and fixing Apple Silicon specific issues and the LLVM team has been doing the same.

The target must build and pass tests reliably in CI, for all components that Rust’s CI considers mandatory.

Since 2024-02-06, Rust continuous integration has been building and testing the aarch64-apple-darwin compiler and host tools with roughly the same settings as x86_64.

The target must provide as much of the Rust standard library as is feasible and appropriate to provide.

No material difference exists between the x86_64-apple-darwin and aarch64-apple-darwin targets in this regard.

Building the target and running the testsuite for the target must not take substantially longer than other targets, and should not substantially raise the maintenance burden of the CI infrastructure.

Due to improved hardware performance, aarch64-apple-darwin is usually faster than x86_64-apple-darwin. As a recent example, aarch64-apple-darwin took 61 minutes while x86_64-apple-darwin took 118 minutes.

Tier 1 targets must not have a hard requirement for signed, verified, or otherwise “approved” binaries.

No material difference exists between the x86_64-apple-darwin and aarch64-apple-darwin targets in this regard.

Drawbacks

Tier 1 status requires that we are able to build and run binaries for the platform. While x86_64 machines have been available in continuous integration workflows for many years, aarch64 machines are relatively new. The first Apple Silicon runners for GitHub Actions were released on 2023-10-02 with free runners for open source projects released on 2024-01-03. Availability or robustness of these runners may be lower compared to x86_64.

Tier 1 status requires increased continuous integration resource usage which means increased cost to the project. However, the aarch64-apple-darwin target has been treated as Tier 1 since 2024-02-06 without causing financial concern.

Rationale and alternatives

Apple Silicon is the de facto path forward for macOS.

Prior art

  • RFC 2959 promoted aarch64-unknown-linux-gnu to Tier 1.

Unresolved questions

None.

Future possibilities

It is expected that x86_64-apple-darwin will be demoted to Tier 2 at some future point as hardware for this platform is no longer being produced. This may reduce our continuous integration costs, offsetting any increases from adding aarch64-apple-darwin. There are no concrete plans to demote x86_64-apple-darwin at this time and any such demotion would need its own well-publicized RFC.