-
Notifications
You must be signed in to change notification settings - Fork 69
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
Raise minimum supported macOS and iOS versions #556
Comments
This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review, indicating that you second the proposal (or third, etc), or raising a concern that you would like to be addressed. cc @rust-lang/compiler @rust-lang/compiler-contributors |
FYI, while I encouraged @BlackHoleFox to write this and provided feedback on an earlier version, I'm not the right person to review (not compiler reviewer or someone who regularly contributes to |
I asked this in zulip, without any luck, but is there anything that can be done to push this forward? I would like us not to have to worry about these versions in the stdlib anymore, at the very least. |
I think we need an FCP for this one, given the public-facing change -- could someone from the compiler team start one? (Or would it be preferred to do that on the PR implementing this change?) |
I think we should @rustbot second this proposal and then do an FCP on the actual PR. |
…, r=petrochenkov Cleanup Apple-related code in rustc_target While working on rust-lang#103455, the consistency of the `rustc_target` code for Apple's platforms was "kind of bad." There were two "base" files (`apple_base.rs` and `apple_sdk_base.rs`) that the targets each pulled some parts out of, each and all of them were written slightly differently, and sometimes missed comments other implementations had. So to hopefully make future maintenance, like implementing rust-lang/compiler-team#556, easier, this makes all of them use similar patterns and the same target base logic everywhere instead of picking bits from both. This also has some other smaller upsides like less stringly-typed functions.
…, r=petrochenkov Cleanup Apple-related code in rustc_target While working on rust-lang#103455, the consistency of the `rustc_target` code for Apple's platforms was "kind of bad." There were two "base" files (`apple_base.rs` and `apple_sdk_base.rs`) that the targets each pulled some parts out of, each and all of them were written slightly differently, and sometimes missed comments other implementations had. So to hopefully make future maintenance, like implementing rust-lang/compiler-team#556, easier, this makes all of them use similar patterns and the same target base logic everywhere instead of picking bits from both. This also has some other smaller upsides like less stringly-typed functions.
@rustbot label -final-comment-period +major-change-accepted |
…r=petrochenkov Raise minimum supported Apple OS versions This implements the proposal to raise the minimum supported Apple OS versions as laid out in the now-completed MCP (rust-lang/compiler-team#556). As of this PR, rustc and the stdlib now support these versions as the baseline: - macOS: 10.12 Sierra - iOS: 10 - tvOS: 10 - watchOS: 5 (Unchanged) In addition to everything this breaks indirectly, these changes also erase the `armv7-apple-ios` target (currently tier 3) because the oldest supported iOS device now uses ARMv7s. Not sure what the policy around tier3 target removal is but shimming it is not an option due to the linker refusing. [Per comment](rust-lang/compiler-team#556 (comment)), this requires a FCP to merge. cc `@wesleywiser.`
…petrochenkov Raise minimum supported Apple OS versions This implements the proposal to raise the minimum supported Apple OS versions as laid out in the now-completed MCP (rust-lang/compiler-team#556). As of this PR, rustc and the stdlib now support these versions as the baseline: - macOS: 10.12 Sierra - iOS: 10 - tvOS: 10 - watchOS: 5 (Unchanged) In addition to everything this breaks indirectly, these changes also erase the `armv7-apple-ios` target (currently tier 3) because the oldest supported iOS device now uses ARMv7s. Not sure what the policy around tier3 target removal is but shimming it is not an option due to the linker refusing. [Per comment](rust-lang/compiler-team#556 (comment)), this requires a FCP to merge. cc `@wesleywiser.`
…petrochenkov Raise minimum supported Apple OS versions This implements the proposal to raise the minimum supported Apple OS versions as laid out in the now-completed MCP (rust-lang/compiler-team#556). As of this PR, rustc and the stdlib now support these versions as the baseline: - macOS: 10.12 Sierra - iOS: 10 - tvOS: 10 - watchOS: 5 (Unchanged) In addition to everything this breaks indirectly, these changes also erase the `armv7-apple-ios` target (currently tier 3) because the oldest supported iOS device now uses ARMv7s. Not sure what the policy around tier3 target removal is but shimming it is not an option due to the linker refusing. [Per comment](rust-lang/compiler-team#556 (comment)), this requires a FCP to merge. cc `@wesleywiser.`
Raise minimum supported Apple OS versions This implements the proposal to raise the minimum supported Apple OS versions as laid out in the now-completed MCP (rust-lang/compiler-team#556). As of this PR, rustc and the stdlib now support these versions as the baseline: - macOS: 10.12 Sierra - iOS: 10 - tvOS: 10 - watchOS: 5 (Unchanged) In addition to everything this breaks indirectly, these changes also erase the `armv7-apple-ios` target (currently tier 3) because the oldest supported iOS device now uses ARMv7s. Not sure what the policy around tier3 target removal is but shimming it is not an option due to the linker refusing. [Per comment](rust-lang/compiler-team#556 (comment)), this requires a FCP to merge. cc `@wesleywiser.`
Raise minimum supported Apple OS versions This implements the proposal to raise the minimum supported Apple OS versions as laid out in the now-completed MCP (rust-lang/compiler-team#556). As of this PR, rustc and the stdlib now support these versions as the baseline: - macOS: 10.12 Sierra - iOS: 10 - tvOS: 10 - watchOS: 5 (Unchanged) In addition to everything this breaks indirectly, these changes also erase the `armv7-apple-ios` target (currently tier 3) because the oldest supported iOS device now uses ARMv7s. Not sure what the policy around tier3 target removal is but shimming it is not an option due to the linker refusing. [Per comment](rust-lang/compiler-team#556 (comment)), this requires a FCP to merge. cc `@wesleywiser.`
Raise minimum supported Apple OS versions This implements the proposal to raise the minimum supported Apple OS versions as laid out in the now-completed MCP (rust-lang/compiler-team#556). As of this PR, rustc and the stdlib now support these versions as the baseline: - macOS: 10.12 Sierra - iOS: 10 - tvOS: 10 - watchOS: 5 (Unchanged) In addition to everything this breaks indirectly, these changes also erase the `armv7-apple-ios` target (currently tier 3) because the oldest supported iOS device now uses ARMv7s. Not sure what the policy around tier3 target removal is but shimming it is not an option due to the linker refusing. [Per comment](rust-lang/compiler-team#556 (comment)), this requires a FCP to merge. cc `@wesleywiser.`
Proposal
I propose to raise the minimum versions to macOS 10.12 (Sierra) and iOS 10 to better match recent expectations for developers publishing on these platforms and to clean up the compiler and standard library. Additionally, the minimum tvOS version would be raised to 10 as well to match iOS.
rustc
and the standard library currently support back to macOS 10.7 (OSX Lion) and iOS 7. However, both of these versions have long since been marked deprecated and unsupported by Apple, not having received an update for 9 to 8 years, respectively. While that may not be extremely old for other platforms such as Linux, the Apple ecosystem is known for most of its userbase staying on modern versions. Both macOS 10.12, iOS 10, and tvOS 10 use the same kernel, Darwin v16. By increasing each's minimum version at the same time, problem cases where APIs are available only on one OS can be avoided, which prevents unnessecarily cluttering the stdlib.macOS specific
Looking at what versions other programming languages support:
One more point worth noting is that all major browsers have dropped support for versions prior to 10.12 (or more):
A final set of data points is some of the Rust ecosystem:
iOS specific
According to Apple's app store stats, 82% of all iPhones use iOS 15, and, going back further 96% of devices have iOS 13 at a minimum. Given the proposed increase to iOS 10, this shows that an incredibly small number of devices still run iOS 9 and earlier. This is in stark constrast to something like Android, where old OS versions linger for many years past official vendor support.
Additionally, Apple semi-recently has begun requiring all mobile apps submited to app store to use XCode 13, with the iOS 15 SDK. This requires iOS 9 as the minimum deployment target, and iOS 10 in the simulator. A requirement of iOS 10 would also bring the minimum device requirement from the iPhone 4 (2010) to the iPhone 5 (2012). Given Apple's cadence bumping the SDK requirement, iOS 9 will most likely be unsupported in 1-2 years for new app versions.
Winit also requires iOS 8. It has 3,693,208 total downloads (156,839/month). No other (public) crates seem to define a minimum iOS version beyond what Rust specifies using
IPHONEOS_DEPLOYMENT_TARGET
.Possible improvements
Both the standard library and some parts of the compiler would be simplified via this proposal:
getentropy
being available on all supported platforms./dev/urandom
andSecCopyRandomBytes
would no longer be needed.clock_gettime
.On top of that, it brings some other nicities that could be used for future improvements:
What about Swift?
A past counterpoint has been that Apple's Swift language supports running on back to macOS 10.9 and iOS 7. However, I'm not of the belief this is a fair standard for a static, 3rd-party language like Rust. Swift is directly supported by Apple and therefore can have more OS-level support for backwards compatibility then any other language. This includes numerous backwards compatibility shims and hot patching of older runtime versions. Since Rust has no underlying runtime provided by the operating system, it should not have the same expectations of extreme backwards compat.
Mentors or Reviewers
@thomcc -
reviewermentorProcess
The main points of the Major Change Process are as follows:
@rustbot second
.-C flag
, then full team check-off is required.@rfcbot fcp merge
on either the MCP or the PR.You can read more about Major Change Proposals on forge.
Comments
This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review, indicating that you second the proposal (or third, etc), or raising a concern that you would like to be addressed.
Footnotes
https://go.dev/dl/ ↩
https://github.com/ziglang/zig/pull/9545 ↩
https://www.swift.org/platform-support/ ↩
https://www.python.org/downloads/release/python-3106/ ↩
https://julialang.org/downloads/platform/#macos ↩
https://www.mozilla.org/en-US/firefox/104.0.1/system-requirements/ ↩
https://www.google.com/chrome/ ↩
https://bugs.chromium.org/p/chromium/issues/detail?id=1322548 ↩
The text was updated successfully, but these errors were encountered: