Skip to content

Commit 1b7ccd2

Browse files
committed
demote-apple-32bit: initial draft
1 parent 809a988 commit 1b7ccd2

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

text/0000-demote-apple-32bit.md

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
- Feature Name: `demote_apple_32bit`
2+
- Start Date: 2019-12-10
3+
- RFC PR: [rust-lang/rfcs#0000](https://github.com/rust-lang/rfcs/pull/0000)
4+
- Rust Issue: [rust-lang/rust#0000](https://github.com/rust-lang/rust/issues/0000)
5+
6+
# Summary
7+
[summary]: #summary
8+
9+
This RFC proposes to demote the `i686-apple-darwin` rustc target from Tier 1 to
10+
Tier 3, and to demote the `armv7-apple-ios`, `armv7s-apple-ios` and
11+
`i386-apple-ios` rustc targets from Tier 2 to Tier 3.
12+
13+
# Motivation
14+
[motivation]: #motivation
15+
16+
Apple [publicly announced][macos-announcement] that macOS 10.14 Mojave is the
17+
last OS supporting the execution of 32bit binaries, and macOS 10.15 (and later)
18+
prevents running them at all. It's been years since the last 32bit Apple
19+
hardware was sold, so providing 64bit binaries should cover most of the macOS
20+
userbase.
21+
22+
Apple [also announced][ios-announcement] that iOS 10 is the last one supporting
23+
the execution of 32bit apps, and they won't work at all on iOS 11 and later.
24+
All iPhones after the iPhone 5 and the iPhone 5C support 64bit apps, which
25+
means all the supported ones can run them.
26+
27+
Along with the deprecation, Apple removed support for building 32bit binaries
28+
since Xcode 10, and that makes building rustc itself on the project's CI harder
29+
(as we're limited to providers still offering Xcode 9).
30+
31+
It makes little sense for the Rust team to continue providing support for a
32+
platform the upstream vendor abandoned, especially when it requires extra
33+
effort from us infrastructure-wise.
34+
35+
[macos-announcement]: https://support.apple.com/en-us/HT208436
36+
[ios-announcement]: https://developer.apple.com/documentation/uikit/app_and_environment/updating_your_app_from_32-bit_to_64-bit_architecture
37+
38+
# Guide-level explanation
39+
[guide-level-explanation]: #guide-level-explanation
40+
41+
The first release after this RFC is merged will be the last one with Tier 1
42+
support for the `i686-apple-darwin` target and Tier 2 support for the
43+
`armv7-apple-ios`, `armv7s-apple-ios` and `i386-apple-ios` targets. The release
44+
after that will demote the targets to Tier 3, which means no official build
45+
will be available for them, and they will not be tested by CI.
46+
47+
Once this RFC is merged a blog post will be published on the main Rust Blog
48+
announcing the change, to alert the users of the target of the demotion. The
49+
demotion will also be mentioned in the release announcement for the last
50+
release with Tier 1 and Tier 2 support, as well as the first release with Tier
51+
3 support.
52+
53+
This RFC does **not** propose removing the targets completely from the
54+
codebase: that will be decided either by another RFC just for those targets, or
55+
by an RFC defining a general policy for Tier 3 target removal.
56+
57+
Once the targets are demoted to Tier 3, users on other platforms with one of
58+
those targets' `rust-std` installed won't be able to update the toolchain until
59+
they remove that target. Users using an Apple 32bit compiler as their host
60+
platforms will instead be prevented from updating at all, as no new binary
61+
artifact will be available.
62+
63+
# Reference-level explanation
64+
[reference-level-explanation]: #reference-level-explanation
65+
66+
The `i686-apple-darwin`, `armv7-apple-ios`, `armv7s-apple-ios` and
67+
`i386-apple-ios` targets will be considered Tier 3 from the second release
68+
after this RFC is merged. The code supporting the target will not be removed
69+
from the compiler, even though we won't guarantee it will continue to work.
70+
71+
The following CI builders will be removed:
72+
73+
- `dist-i686-apple`
74+
- `i686-apple`
75+
76+
In addition, the `armv7-apple-ios`, `armv7s-apple-ios` and `i386-apple-ios`
77+
targets will be removed from the `dist-x86_64-apple` builder.
78+
79+
# Drawbacks
80+
[drawbacks]: #drawbacks
81+
82+
Users might depend on the target, and approving this RFC means they'll be stuck
83+
on an old compiler version forever, unless they build their own compiler and
84+
fix the regressions introduced in newer releases themselves.
85+
86+
# Rationale and alternatives
87+
[rationale-and-alternatives]: #rationale-and-alternatives
88+
89+
Support for building 32bit binaries for Apple targets is shrinking as time goes
90+
by: the latest SDKs from Apple don't support building them at all, and CI
91+
providers are slowly starting to upgrade their minimum supported SDK versions:
92+
93+
* Azure Pipelines (the provider rustc currently use) doesn't have any public
94+
information on when Xcode 9 will be deprecated.
95+
* GitHub Actions doesn't support Xcode 9 at all.
96+
* Travis CI [deprecated Xcode older than 9.2][travis-ci-xcode-deprecation] in
97+
July 2018.
98+
99+
If this RFC is not accepted, we'll eventually reach a point when we'll have to
100+
make considerable investments both in terms of money and time to keep building
101+
on Apple 32bit.
102+
103+
[travis-ci-xcode-deprecation]: https://blog.travis-ci.com/2018-07-19-xcode9-4-default-announce
104+
105+
# Prior art
106+
[prior-art]: #prior-art
107+
108+
There is no precedent inside the project for the deprecation of Tier 1 targets
109+
to Tier 3.
110+
111+
Go is taking a [similar approach to us][go-34749], documenting that the last
112+
release supporting Apple 32bit is going to be Go 1.14 (the next one), with
113+
support for the target being dropped in Go 1.15.
114+
115+
[go-34749]: https://github.com/golang/go/issues/34749
116+
117+
# Unresolved questions
118+
[unresolved-questions]: #unresolved-questions
119+
120+
*Nothing here.*
121+
122+
# Future possibilities
123+
[future-possibilities]: #future-possibilities
124+
125+
*Nothing here.*

0 commit comments

Comments
 (0)