Skip to content

Commit 2ad779b

Browse files
authored
Merge pull request #3841 from shepmaster/demote-x86_64-apple-darwin
Demote `x86_64-apple-darwin` from Tier 1 to Tier 2 with host tools
2 parents ea1f59f + 69b3c2f commit 2ad779b

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
- Feature Name: none
2+
- Start Date: 2025-07-23
3+
- RFC PR: [rust-lang/rfcs#3841](https://github.com/rust-lang/rfcs/pull/3841)
4+
- Rust Issue: [rust-lang/rust#145252](https://github.com/rust-lang/rust/pull/145252)
5+
6+
# Summary
7+
[summary]: #summary
8+
9+
Demote target `x86_64-apple-darwin` from Tier 1 to Tier 2 with host tools as this platform's lifetime is limited.
10+
11+
Tier 2 with host tools means that the `x86_64-apple-darwin` target,
12+
including tools like `rustc` and `cargo`,
13+
is guaranteed to build but is not guaranteed to pass tests.
14+
15+
This RFC does **not** propose removing the target completely from the codebase.
16+
17+
# Motivation
18+
[motivation]: #motivation
19+
20+
The `x86_64-apple-darwin` target has no long-term future.
21+
Upcoming changes will affect Rust's ability to ensure that the target meets the Tier 1 requirements,
22+
so we should demote it to Tier 2 with host tools in a controlled fashion.
23+
24+
The most immediate critical change is that the free GitHub Actions macOS x86\_64 runners that the Rust project relies on will be [discontinued soon][macos-13-sunset].
25+
There is no known long-term replacement for these runners.
26+
27+
## A brief timeline
28+
29+
- 2020-06-22: Apple [announced plans][trans] to shift away from the x86\_64 architecture.
30+
- 2020-12-31: Rust [promoted `aarch64-apple-darwin`][aarch-tier-2] to Tier 2 with host tools.
31+
- 2023-06-05: Apple [announced the replacement][trans] of the last x86\_64 hardware.
32+
- 2023-10-02: GitHub [announces public GitHub Actions runners][m1-runners] for Apple silicon.
33+
- 2024-10-17: Rust [promoted `aarch64-apple-darwin`][aarch-tier-1] to Tier 1.
34+
- **2025-07-23**: This RFC opened.
35+
- 2025-09-01: GitHub [will discontinue][macos-13-sunset] providing free macOS x86\_64 runners for public repositories.
36+
- 2025 (Fall): [macOS 26][tahoe] will be the last macOS to support the x86\_64 architecture.
37+
- 2027: The [Rosetta 2][trans] compatibility layer will be mostly removed.
38+
39+
[trans]: https://en.wikipedia.org/wiki/Mac_transition_to_Apple_silicon
40+
[aarch-tier-2]: https://blog.rust-lang.org/2020/12/31/Rust-1.49.0/#64-bit-arm-macos-and-windows-reach-tier-2
41+
[aarch-tier-1]: https://blog.rust-lang.org/2024/10/17/Rust-1.82.0/#macos-on-64-bit-arm-is-now-tier-1
42+
[m1-runners]: https://github.blog/changelog/2023-10-02-github-actions-apple-silicon-m1-macos-runners-are-now-available-in-public-beta/
43+
[macos-13-sunset]: https://github.blog/changelog/2025-07-11-upcoming-changes-to-macos-hosted-runners-macos-latest-migration-and-xcode-support-policy-updates/#macos-13-is-closing-down
44+
[tahoe]: https://en.wikipedia.org/wiki/MacOS_Tahoe
45+
46+
## `x86_64-apple-darwin` popularity
47+
48+
Looking at the [public download statistics][dl-stats] for the previous month (retrieved on 2025-07-21),
49+
we can see that `x86_64-apple-darwin` has substantially fewer downloads than `aarch64-apple-darwin`:
50+
51+
[dl-stats]: https://p.datadoghq.com/sb/3a172e20-e9e1-11ed-80e3-da7ad0900002-60425c7cb1b7beb2e8959a305a301c0c?fromUser=false&refresh_mode=sliding&from_ts=1750525313022&to_ts=1753117313022&live=true
52+
53+
### `rustc`
54+
55+
| platform | downloads | percentage |
56+
|----------------------------|----------:|-----------:|
57+
| `x86_64-unknown-linux-gnu` | 194.38M | 81.58% |
58+
| `aarch64-apple-darwin` | 7.15M | 3.00% |
59+
| `x86_64-apple-darwin` | 2.74M | 1.15% |
60+
61+
### `std`
62+
63+
| platform | downloads | percentage |
64+
|----------------------------|----------:|-----------:|
65+
| `x86_64-unknown-linux-gnu` | 95.12M | 66.20% |
66+
| `aarch64-apple-darwin` | 4.82M | 3.35% |
67+
| `x86_64-apple-darwin` | 2.76M | 1.92% |
68+
69+
# Guide-level explanation
70+
[guide-level-explanation]: #guide-level-explanation
71+
72+
The first release after this RFC is merged will be the last one with Tier 1 support for the `x86_64-apple-darwin` target.
73+
The release after that will demote the target to Tier 2 with host tools,
74+
which means we no longer guarantee that it will be tested by CI.
75+
76+
Once this RFC is merged,
77+
a blog post will be published on the main Rust Blog announcing the change to alert users of the demotion.
78+
79+
The demotion will also be mentioned in the release announcement for the last
80+
release with Tier 1 support, as well as the first release with Tier
81+
2 support.
82+
83+
# Reference-level explanation
84+
[reference-level-explanation]: #reference-level-explanation
85+
86+
The CI setup for [`rust-lang/rust`][r-l/r] will be modified to change the `dist-x86_64-apple` builder to no longer build the tests or run them.
87+
88+
[r-l/r]: https://github.com/rust-lang/rust
89+
90+
# Drawbacks
91+
[drawbacks]: #drawbacks
92+
93+
Without automated testing,
94+
this target will likely deteriorate more quickly.
95+
96+
Users may be relying on Rust's Tier 1 support to provide confidence for their own artifacts.
97+
These users will be stuck on an old compiler version.
98+
99+
# Rationale and alternatives
100+
[rationale-and-alternatives]: #rationale-and-alternatives
101+
102+
- Rust CI could use emulation,
103+
such as that provided by [Rosetta 2][rosetta-2].
104+
Lightweight experiments show that this may increase CI times by a factor of 3
105+
(e.g. a step taking 200 seconds would now take 600 seconds).
106+
This would be a temporary solution,
107+
as eventually Apple will [sunset Rosetta 2][trans].
108+
109+
We may choose to run tests in emulation even after the target is demoted to Tier 2 with host tools.
110+
That change would be evaluated independently from this RFC and in a similar fashion to other non-Tier-1 targets with extra testing.
111+
This evaluation would include aspects like CI complexity, test flakiness, test execution time, ability of contributors to have access to the hardware to fix issues, etc.
112+
Any extra testing would be at the whim of various Rust teams to reduce or remove at any point with no prior notice.
113+
114+
- The Rust Foundation could pay for GitHub Actions runners that will continue to use the x86\_64 architecture,
115+
such as `macos-13-large`, `macos-14-large`, or `macos-15-large`.
116+
This would be a temporary solution,
117+
as eventually GitHub will [sunset all x86\_64-compatible runners][n-1-policy].
118+
119+
- A third party could indefinitely provide all appropriate CI resources for the x86\_64 architecture.
120+
No such third party has made themselves known,
121+
nor has the Rust infrastructure team determined how to best integrate such resources.
122+
123+
[rosetta-2]: https://en.wikipedia.org/wiki/Rosetta_(software)
124+
[n-1-policy]: https://github.com/actions/runner-images?tab=readme-ov-file#software-and-image-support
125+
126+
# Prior art
127+
[prior-art]: #prior-art
128+
129+
- The `i686-pc-windows-gnu` target was demoted in [RFC 3771][rfc-3771].
130+
Similar to this RFC,
131+
the ability to reliably test the target was questionable.
132+
133+
- The `i686-apple-darwin` target was demoted in [RFC 2837][rfc-2837].
134+
Similar to this RFC,
135+
relevant hardware was no longer produced and it had been announced that upcoming operating systems would no longer support the architecture.
136+
137+
[rfc-2837]: https://rust-lang.github.io/rfcs/2837-demote-apple-32bit.html
138+
[rfc-3771]: https://rust-lang.github.io/rfcs/3771-demote-i686-pc-windows-gnu.html
139+
140+
# Unresolved questions
141+
[unresolved-questions]: #unresolved-questions
142+
143+
- None
144+
145+
# Future possibilities
146+
[future-possibilities]: #future-possibilities
147+
148+
`x86_64-apple-darwin` could be demoted to Tier 3 or support completely removed.
149+
There's no strong technical or financial reason to do this at this point in time.
150+
Should further demotions be proposed,
151+
those will be evaluated separately and on thier own merits,
152+
using the [target tier policy][tier-policy] as guidance.
153+
154+
[tier-policy]: https://doc.rust-lang.org/stable/rustc/target-tier-policy.html

0 commit comments

Comments
 (0)