-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Demote x86_64-apple-darwin
from Tier 1 to Tier 2 with host tools
#3841
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 4 commits
242cfad
37f47af
cec1737
372c420
992e037
5a1eaf8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
- Feature Name: none | ||
- Start Date: 2025-07-23 | ||
- RFC PR: [rust-lang/rfcs#3841](https://github.com/rust-lang/rfcs/pull/3841) | ||
- Rust Issue: [rust-lang/rust#0000](https://github.com/rust-lang/rust/issues/0000) | ||
|
||
# Summary | ||
[summary]: #summary | ||
|
||
Demote target `x86_64-apple-darwin` from Tier 1 to Tier 2 with host tools as this platform's lifetime is limited. | ||
|
||
Tier 2 with host tools means that the `x86_64-apple-darwin` target, | ||
including tools like `rustc` and `cargo`, | ||
is guaranteed to build but is not guaranteed to pass tests. | ||
|
||
This RFC does **not** propose removing the target completely from the codebase. | ||
|
||
# Motivation | ||
[motivation]: #motivation | ||
|
||
The `x86_64-apple-darwin` target has no long-term future. | ||
Upcoming changes will affect Rust's ability to ensure that the target meets the Tier 1 requirements, | ||
so we should demote it to Tier 2 with host tools in a controlled fashion. | ||
|
||
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]. | ||
There is no known long-term replacement for these runners. | ||
|
||
## A brief timeline | ||
|
||
- 2020-06-22: Apple [announced plans][trans] to shift away from the x86\_64 architecture. | ||
- 2020-12-31: Rust [promoted `aarch64-apple-darwin`][aarch-tier-2] to Tier 2 with host tools. | ||
- 2023-06-05: Apple [announced the replacement][trans] of the last x86\_64 hardware. | ||
- 2023-10-02: GitHub [announces public GitHub Actions runners][m1-runners] for Apple silicon. | ||
- 2024-10-17: Rust [promoted `aarch64-apple-darwin`][aarch-tier-1] to Tier 1. | ||
- **2025-07-23**: This RFC opened. | ||
- 2025-09-01: GitHub [will discontinue][macos-13-sunset] providing free macOS x86\_64 runners for public repositories. | ||
- 2025 (Fall): [macOS 26][tahoe] will be the last macOS to support the x86\_64 architecture. | ||
- 2027: The [Rosetta 2][trans] compatibility layer will be mostly removed. | ||
|
||
[trans]: https://en.wikipedia.org/wiki/Mac_transition_to_Apple_silicon | ||
[aarch-tier-2]: https://blog.rust-lang.org/2020/12/31/Rust-1.49.0/#64-bit-arm-macos-and-windows-reach-tier-2 | ||
[aarch-tier-1]: https://blog.rust-lang.org/2024/10/17/Rust-1.82.0/#macos-on-64-bit-arm-is-now-tier-1 | ||
[m1-runners]: https://github.blog/changelog/2023-10-02-github-actions-apple-silicon-m1-macos-runners-are-now-available-in-public-beta/ | ||
[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 | ||
[tahoe]: https://en.wikipedia.org/wiki/MacOS_Tahoe | ||
|
||
## `x86_64-apple-darwin` popularity | ||
|
||
Looking at the [public download statistics][dl-stats] for the previous month (retrieved on 2025-07-21), | ||
we can see that `x86_64-apple-darwin` has substantially fewer downloads than `aarch64-apple-darwin`: | ||
|
||
[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 | ||
|
||
### `rustc` | ||
|
||
| platform | downloads | percentage | | ||
|----------------------------|----------:|-----------:| | ||
| `x86_64-unknown-linux-gnu` | 194.38M | 81.58% | | ||
| `aarch64-apple-darwin` | 7.15M | 3.00% | | ||
| `x86_64-apple-darwin` | 2.74M | 1.15% | | ||
|
||
### `std` | ||
|
||
| platform | downloads | percentage | | ||
|----------------------------|----------:|-----------:| | ||
| `x86_64-unknown-linux-gnu` | 95.12M | 66.20% | | ||
| `aarch64-apple-darwin` | 4.82M | 3.35% | | ||
| `x86_64-apple-darwin` | 2.76M | 1.92% | | ||
|
||
# Guide-level explanation | ||
[guide-level-explanation]: #guide-level-explanation | ||
|
||
The first release after this RFC is merged will be the last one with Tier 1 support for the `x86_64-apple-darwin` target. | ||
The release after that will demote the target to Tier 2 with host tools, | ||
which means it will not be tested by CI. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. FWIW, we do run some tests for non-tier-1-targets, e.g. some i586 targets. We could probably do the same for x86_64-apple-darwin? IOW, the consequence of this RFC is that we stop promising that we run all the tests, and we'll drop what is impractical, but we don't have to drop everything immediately. We could, for instance, keep running the library tests under rosetta, which shouldn't take too long. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, it may be feasible for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think that would be good to communicate clearly, also in the blog post: we don't actually plan to drop all tests immediately, we'll continue testing some things under Rosetta where feasible, etc. Or is our plan really to drop all tests entirely when we stop using the free macos-13 runners? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I think the intention is to keep that open as a possibility in case it becomes necessary. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right, that's what I figured. I think this needs to be quite explicit, or people will conclude that we are dropping all tests immediately. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The RFC currently basically suggests that we guarantee that we don't run any tests. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
So something like
Which includes the possibility that no tests for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes. It's definitely a possibility, but it's a matter of continuous evaluation. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this better? diff --git a/text/3841-demote-x86_64-apple-darwin.md b/text/3841-demote-x86_64-apple-darwin.md
index e1e72361..942446ae 100644
--- a/text/3841-demote-x86_64-apple-darwin.md
+++ b/text/3841-demote-x86_64-apple-darwin.md
@@ -71,7 +71,7 @@ we can see that `x86_64-apple-darwin` has substantially fewer downloads than `aa
The first release after this RFC is merged will be the last one with Tier 1 support for the `x86_64-apple-darwin` target.
The release after that will demote the target to Tier 2 with host tools,
-which means it will not be tested by CI.
+which means we no longer guarantee that it will be tested by CI.
Once this RFC is merged,
a blog post will be published on the main Rust Blog announcing the change to alert users of the demotion. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, I would prefer that.
jieyouxu marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Once this RFC is merged, | ||
a blog post will be published on the main Rust Blog announcing the change to alert users of the demotion. | ||
|
||
The demotion will also be mentioned in the release announcement for the last | ||
release with Tier 1 support, as well as the first release with Tier | ||
2 support. | ||
|
||
# Reference-level explanation | ||
[reference-level-explanation]: #reference-level-explanation | ||
|
||
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. | ||
|
||
[r-l/r]: https://github.com/rust-lang/rust | ||
|
||
# Drawbacks | ||
[drawbacks]: #drawbacks | ||
|
||
Without automated testing, | ||
this target will likely deteriorate more quickly. | ||
|
||
Users may be relying on Rust's Tier 1 support to provide confidence for their own artifacts. | ||
These users will be stuck on an old compiler version. | ||
|
||
# Rationale and alternatives | ||
[rationale-and-alternatives]: #rationale-and-alternatives | ||
|
||
- Rust CI could use emulation, | ||
such as that provided by [Rosetta 2][rosetta-2]. | ||
Lightweight experiments show that this may increase CI times by a factor of 3 | ||
(e.g. a step taking 200 seconds would now take 600 seconds). | ||
This would be a temporary solution, | ||
as eventually Apple will [sunset Rosetta 2][trans]. | ||
|
||
- The Rust Foundation could pay for GitHub Actions runners that will continue to use the x86\_64 architecture, | ||
such as `macos-13-large`, `macos-14-large`, or `macos-15-large`. | ||
This would be a temporary solution, | ||
as eventually GitHub will [sunset all x86\_64-compatible runners][n-1-policy]. | ||
|
||
- A third party could indefinitely provide all appropriate CI resources for the x86\_64 architecture. | ||
No such third party has made themselves known, | ||
nor has the Rust infrastructure team determined how to best integrate such resources. | ||
|
||
[rosetta-2]: https://en.wikipedia.org/wiki/Rosetta_(software) | ||
[n-1-policy]: https://github.com/actions/runner-images?tab=readme-ov-file#software-and-image-support | ||
|
||
# Prior art | ||
[prior-art]: #prior-art | ||
|
||
- The `i686-pc-windows-gnu` target was demoted in [RFC 3771][rfc-3771]. | ||
Similar to this RFC, | ||
the ability to reliably test the target was questionable. | ||
|
||
- The `i686-apple-darwin` target was demoted in [RFC 2837][rfc-2837]. | ||
Similar to this RFC, | ||
relevant hardware was no longer produced and it had been announced that upcoming operating systems would no longer support the architecture. | ||
|
||
[rfc-2837]: https://rust-lang.github.io/rfcs/2837-demote-apple-32bit.html | ||
[rfc-3771]: https://rust-lang.github.io/rfcs/3771-demote-i686-pc-windows-gnu.html | ||
|
||
# Unresolved questions | ||
[unresolved-questions]: #unresolved-questions | ||
|
||
- None | ||
|
||
# Future possibilities | ||
[future-possibilities]: #future-possibilities | ||
|
||
`x86_64-apple-darwin` could be demoted to Tier 3 or support completely removed. | ||
There's no strong technical or financial reason to do this at this point in time. | ||
Should further demotions be proposed, | ||
those will be evaluated separately and on thier own merits, | ||
using the [target tier policy][tier-policy] as guidance. | ||
|
||
[tier-policy]: https://doc.rust-lang.org/stable/rustc/target-tier-policy.html |
Uh oh!
There was an error while loading. Please reload this page.