|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Reducing support for 32-bit Apple targets" |
| 4 | +author: Pietro Albini |
| 5 | +--- |
| 6 | + |
| 7 | +The Rust team regrets to announce that Rust 1.41.0 (to be released on January |
| 8 | +30th, 2020) will be the last release with the current level of support for |
| 9 | +32-bit Apple targets. Starting from Rust 1.42.0, those targets will be demoted |
| 10 | +to Tier 3. |
| 11 | + |
| 12 | +The decision was made on [RFC 2837], and was accepted by the compiler and |
| 13 | +release teams. This post explains what the change means, why we did it, and how |
| 14 | +your project is affected. |
| 15 | + |
| 16 | +[RFC 2837]: https://github.com/rust-lang/rfcs/pull/2837 |
| 17 | + |
| 18 | +# What’s a support tier? |
| 19 | + |
| 20 | +The Rust compiler can build code targeting [a lot of |
| 21 | +platforms][platform-support] (also called “targets”), but the team doesn't have |
| 22 | +the resources or manpower to provide the same level of support and testing for |
| 23 | +each of them. |
| 24 | +To make our commitments clear, we follow a tiered support policy (currently |
| 25 | +being formalized and revised in [RFC 2803]), explaining what we guarantee: |
| 26 | + |
| 27 | +- Tier 1 targets can be downloaded through rustup and are fully tested |
| 28 | + during the project’s automated builds. A bug or a regression affecting one of |
| 29 | + these targets is usually prioritized more than bugs only affecting platforms |
| 30 | + in other tiers. |
| 31 | + |
| 32 | +- Tier 2 targets can also be downloaded through rustup, but our |
| 33 | + automated builds don’t execute the test suite for them. While we guarantee a |
| 34 | + standard library build (and for some of them a full compiler build) will be |
| 35 | + available, we don’t ensure it will actually work without bugs (or even work |
| 36 | + at all). |
| 37 | + |
| 38 | +- Tier 3 targets are not available for download through rustup, and are |
| 39 | + ignored during our automated builds. You can still build their standard |
| 40 | + library for cross-compiling (or the full compiler in some cases) from source |
| 41 | + on your own, but you might encounter build errors, bugs, or missing features. |
| 42 | + |
| 43 | +[platform-support]: https://forge.rust-lang.org/release/platform-support.html |
| 44 | +[RFC 2803]: https://github.com/rust-lang/rfcs/pull/2803 |
| 45 | + |
| 46 | +# Which targets are affected? |
| 47 | + |
| 48 | +The main target affected by this change is 32-bit macOS (`i686-apple-darwin`), |
| 49 | +which will be demoted from Tier 1 to Tier 3. This will affect both using the |
| 50 | +compiler on 32-bit Mac hardware, and cross-compiling 32-bit macOS binaries from |
| 51 | +any other platform. |
| 52 | + |
| 53 | +Additionally, the following 32-bit iOS targets will be demoted from Tier 2 to |
| 54 | +Tier 3: |
| 55 | + |
| 56 | +* `armv7-apple-ios` |
| 57 | +* `armv7s-apple-ios` |
| 58 | +* `i386-apple-ios` |
| 59 | + |
| 60 | +We will continue to provide the current level of support for all Apple 64bit |
| 61 | +targets. |
| 62 | + |
| 63 | +# Why are those targets being demoted? |
| 64 | + |
| 65 | +Apple dropped support for running 32-bit binaries starting from [macOS |
| 66 | +10.15][deprecate-macos] and [iOS 11][deprecate-ios]. They also prevented all |
| 67 | +developers from cross-compiling 32-bit programs and apps starting from Xcode 10 |
| 68 | +(the platform’s IDE, containing the SDKs). |
| 69 | + |
| 70 | +Due to those decisions from Apple, the targets are no longer useful to our users, |
| 71 | +and their choice to prevent cross-compiling makes it hard for the |
| 72 | +project to continue supporting the 32-bit platform in the long term. |
| 73 | + |
| 74 | +[deprecate-macos]: https://support.apple.com/en-us/HT208436 |
| 75 | +[deprecate-ios]: https://developer.apple.com/documentation/uikit/app_and_environment/updating_your_app_from_32-bit_to_64-bit_architecture |
| 76 | + |
| 77 | +# How will this affect my project? |
| 78 | + |
| 79 | +If you don’t build 32-bit Apple binaries this change won’t affect you at all. |
| 80 | + |
| 81 | +If you still need to build them, you’ll be able to continue using Rust 1.41.0 |
| 82 | +without issues. As usual the Rust project will provide critical bugfixes and |
| 83 | +security patches until the next stable version is released (on March 12th, |
| 84 | +2020), and we plan to keep the release available for download for the |
| 85 | +foreseeable future (as we do with all the releases shipped so far). |
| 86 | + |
| 87 | +The code implementing the targets won’t be removed from the compiler codebase, |
| 88 | +so you’ll also be able to build future releases from source on your own |
| 89 | +(keeping in mind they might have bugs or be broken, as that code will be |
| 90 | +completly untested). |
| 91 | + |
| 92 | +# What about the nightly channel? |
| 93 | + |
| 94 | +We will demote the targets on the nightly channel soon, but we don't have an |
| 95 | +exact date for when that will happen. We recommend pinning a nightly version |
| 96 | +beforehand though, to prevent `rustup toolchain install` from failing once we |
| 97 | +apply the demotion. |
| 98 | + |
| 99 | +To pin a nightly version you need to use "nightly" followed by the day the |
| 100 | +nightly was released, as the toolchain name. For example, to install the nightly |
| 101 | +released on December 1st, 2019 and to use it you can run: |
| 102 | + |
| 103 | +```plain |
| 104 | +rustup toolchain install nightly-2019-12-01 |
| 105 | +
|
| 106 | +# Default to this nightly system-wide... |
| 107 | +rustup default nightly-2019-12-01 |
| 108 | +
|
| 109 | +# ...or use this nightly for a single build |
| 110 | +cargo +nightly-2019-12-01 build |
| 111 | +``` |
0 commit comments