Skip to content
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

Closed
3 tasks done
BlackHoleFox opened this issue Sep 6, 2022 · 6 comments
Closed
3 tasks done

Raise minimum supported macOS and iOS versions #556

BlackHoleFox opened this issue Sep 6, 2022 · 6 comments
Labels
major-change A proposal to make a major change to rustc major-change-accepted A major change proposal that was accepted T-compiler Add this label so rfcbot knows to poll the compiler team

Comments

@BlackHoleFox
Copy link

BlackHoleFox commented Sep 6, 2022

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:

Language Supported version
Go1 10.13+
Zig (unofficial)2 10.12+
Swift3 10.9+ (with bundled runtime)
Java[^4] 10.15+
Python 34 10.9+
Julia5 10.9+

One more point worth noting is that all major browsers have dropped support for versions prior to 10.12 (or more):

Browser Supported version
Firefox6 10.12+
Chrome7 8 10.13+
Safari 10.15+ (Safari 12 was the last supported by 10.12)

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:

On top of that, it brings some other nicities that could be used for future improvements:

  • os_unfair_lock to improve some stdlib internals.
  • Misc other unifications from better UNIX compatibility.

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

Process

The main points of the Major Change Process are as follows:

  • File an issue describing the proposal.
  • A compiler team member or contributor who is knowledgeable in the area can second by writing @rustbot second.
    • Finding a "second" suffices for internal changes. If however, you are proposing a new public-facing feature, such as a -C flag, then full team check-off is required.
    • Compiler team members can initiate a check-off via @rfcbot fcp merge on either the MCP or the PR.
  • Once an MCP is seconded, the Final Comment Period begins. If no objections are raised after 10 days, the MCP is considered approved.

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

  1. https://go.dev/dl/

  2. https://github.com/ziglang/zig/pull/9545

  3. https://www.swift.org/platform-support/

  4. https://www.python.org/downloads/release/python-3106/

  5. https://julialang.org/downloads/platform/#macos

  6. https://www.mozilla.org/en-US/firefox/104.0.1/system-requirements/

  7. https://www.google.com/chrome/

  8. https://bugs.chromium.org/p/chromium/issues/detail?id=1322548

@BlackHoleFox BlackHoleFox added major-change A proposal to make a major change to rustc T-compiler Add this label so rfcbot knows to poll the compiler team labels Sep 6, 2022
@rustbot
Copy link
Collaborator

rustbot commented Sep 6, 2022

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

@rustbot rustbot added the to-announce Announce this issue on triage meeting label Sep 6, 2022
@thomcc
Copy link
Member

thomcc commented Sep 6, 2022

@thomcc - reviewer

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 compiler/*). I suspect I can mentor though, since the work needed is presumably fairly minor (it's mostly a change to policy and rustc-target, I think).

@thomcc
Copy link
Member

thomcc commented Oct 28, 2022

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.

@nikic
Copy link
Contributor

nikic commented Oct 30, 2022

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

@wesleywiser
Copy link
Member

I think we should

@rustbot second

this proposal and then do an FCP on the actual PR.

@rustbot rustbot added the final-comment-period The FCP has started, most (if not all) team members are in agreement label Oct 31, 2022
Manishearth added a commit to Manishearth/rust that referenced this issue Nov 9, 2022
…, 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.
Manishearth added a commit to Manishearth/rust that referenced this issue Nov 9, 2022
…, 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.
@apiraino
Copy link
Contributor

@rustbot label -final-comment-period +major-change-accepted

@rustbot rustbot added major-change-accepted A major change proposal that was accepted to-announce Announce this issue on triage meeting and removed final-comment-period The FCP has started, most (if not all) team members are in agreement labels Nov 14, 2022
@apiraino apiraino removed the to-announce Announce this issue on triage meeting label Nov 18, 2022
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this issue Sep 21, 2023
…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.`
bors added a commit to rust-lang-ci/rust that referenced this issue Sep 23, 2023
…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.`
bors added a commit to rust-lang-ci/rust that referenced this issue Sep 24, 2023
…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.`
github-actions bot pushed a commit to rust-lang/miri that referenced this issue Sep 24, 2023
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.`
lnicola pushed a commit to lnicola/rust-analyzer that referenced this issue Apr 7, 2024
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.`
RalfJung pushed a commit to RalfJung/rust-analyzer that referenced this issue Apr 27, 2024
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.`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
major-change A proposal to make a major change to rustc major-change-accepted A major change proposal that was accepted T-compiler Add this label so rfcbot knows to poll the compiler team
Projects
None yet
Development

No branches or pull requests

6 participants