|
| 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