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

all: decide and document iOS supported versions #48076

Closed
cherrymui opened this issue Aug 30, 2021 · 16 comments
Closed

all: decide and document iOS supported versions #48076

cherrymui opened this issue Aug 30, 2021 · 16 comments
Labels
arch-arm64 Documentation FrozenDueToAge mobile Android, iOS, and x/mobile NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. OS-Darwin
Milestone

Comments

@cherrymui
Copy link
Member

Neither https://golang.org/wiki/MinimumRequirements nor https://golang.org/wiki/Mobile mentions what versions of iOS we support.

There are some recent changes to the iOS system that Go could use, e.g. iOS 14 and later add sigaltstack support, and some recent iOS might add larger memory support (? @mknyszek )

It would be good to decide and document what versions of iOS we support. And the Go runtime might use recent OS features.

cc @eliasnaur @hyangah @golang/release

@cherrymui cherrymui added this to the Backlog milestone Aug 30, 2021
@cherrymui cherrymui added the NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. label Aug 30, 2021
@eliasnaur
Copy link
Contributor

@bradfitz for their Tailscale app, @steeve for their Zenly app.

Whatever we decide, I'd like to discuss someone else taking over the Corellium builders.

@bcmills bcmills added mobile Android, iOS, and x/mobile OS-Darwin labels Aug 31, 2021
@dmitshur
Copy link
Contributor

dmitshur commented Sep 1, 2021

Also CC @changkun, @hajimehoshi.

@steeve
Copy link
Contributor

steeve commented Sep 1, 2021

Thanks for the ping @eliasnaur.

Generally speaking, supporting N-2 versions is the standard way. That would put it at iOS 12 as of today.
We're building for iOS 11 without issues at the moment.

@changkun
Copy link
Member

changkun commented Sep 1, 2021

Thanks for the CC @dmitshur.

I think documenting the official support of the latest two iOS versions is sufficient (does not constraint on it may actually support older OSes). Although iOS releases a new major version every year, a development beta is released 3-4 months before the public release. This means, with the existing Go's release cycle (every 6 months), support the latest two iOSes already past 5 versions of Go releases. If we document the official support's latest three iOS versions, it seems too long (6-7 Go versions)and may tie the Go development process up.

According to a public source on the marked share of iOS versions, iOS 13.7 only shares less than 1% today.

Furthermore, it seems Apple may be much more aggressive to ensure its developers upgrade their apps up-to-date. The majority of their users are more willing to upgrade their systems. Supporting older versions may be beneficial for users who do not upgrade their OS, but this may cause trouble for developers that apps may very difficult to find an appropriate device or environment for testing purposes.

@steeve
Copy link
Contributor

steeve commented Sep 2, 2021

One important thing to note is that updating to the latest iOS SDK isn't a simple operation for most. So including iOS betas for Go releases seems dangerous IMHO.
Lots of things change during the beta period, and most apps don't update until a few months after release. For instance, for iOS 14 we could not bump the SDK until 14.2 was released due to bugs in Apple APIs.

On the other hand, Apple requires apps to use the latest SDK usually around April/May of the year following an iOS release (~September). That said, most iOS will use the #available keyword to guard against calling unsupported APIs; something that's not available to us.

So unless there's a blocking reason (in which case I'd hope we'd discuss it), sticking to N-2 at the time of the Go release seems a simpler option.

Also adding that Go 1.17 compiles for iOS 11 without issue (from my perspective of course).

@changkun
Copy link
Member

changkun commented Nov 17, 2021

Regarding the bumping of ios-version-min, as far as I recently learned from @andydotxyz that fyne as a GUI framework that is still needed to support iOS 10 devices. Hence his insights could also be useful.

@andydotxyz
Copy link
Contributor

Thanks @changkun, it is important to be clear on the distinction between the min iOS and the target iOS. Yes Apple is aggressive in moving people's target iOS version up (to be able to access latest features) but they are less pushy about the minimum version (as long as you guard against crashes as @steeve shows).

It is true that the statistics for upgrading iOS is very high - however, if I understand correctly, this is for consumer devices connecting to the standard store. It does not cover MDM or business-managed devices who can be slower and use enterprise-certificates and side-loading through internal distribution which supports much older devices and may not wish the same upgrade cycle. So it's worth considering do we want to match what Apple wants to push, or what is in use in the wider community.

Can we compare to Android? How many versions back do we support there? I know it's not the same, but their numbers seem more "real world".
From the Fyne point of view we try not to increase the minimum version until required for some reason. You build the latest Fyne onto iOS 32bit devices (using Go 1.14 or earlier of course) because I see that there are millions of devices out there that we really should not be condemning to the scrap heap ;)

@bcmills
Copy link
Contributor

bcmills commented Nov 17, 2021

From the discussion in #49616, it appears that the minimum supported version for platform certificate verification (#46287) is iOS 12.

@dmitshur
Copy link
Contributor

dmitshur commented Nov 17, 2021

Issue #49616 is a release blocker for 1.18, and the approach used to resolve it depends on a decision here. (CC @rolandshoemaker.)

there are millions of devices out there that we really should not be condemning to the scrap heap

A new major iOS release comes out each year. There are many old devices that don't update or cannot update to the latest, but because Go aims to enable building secure applications, security and workload constraints mean support must be dropped at some point (and, in specific situations where absence of latest security fixes is not relevant, older Go toolchains can be used as a best effort workaround).

Can we compare to Android?

As far as I can tell, it's not well defined what support levels for Android we're looking and able to achieve. I filed #49654 for determining that.

Based on discussion above and the relevant constraints, it seems to me using N-3 may be an optimal compromise, at least as a starting point with the Go 1.18 release until there's more evidence to adjust this strategy further. Go 1.18 will be out in early 2022, at which point iOS 15 would be latest, meaning Go 1.18 should not try to support iOS 11 and older, if this approach is used. Thoughts?

@FiloSottile
Copy link
Contributor

I generally agree, although I think the choice has more dimensions than "N-K" can capture. For example, it depends on what iOS versions run on what devices. Currently, supporting iOS 11 has zero extra benefit over supporting iOS 12. To support the 2012 iPhone 5 we'd have to support iOS 10. The next model, the 2013 iPhone 5S, supports iOS 12. Apple itself is still releasing iOS 12 versions, but not iOS 11 versions. https://en.wikipedia.org/wiki/IOS_version_history

As long as the Apple policy runs on similar rails, I think supporting whatever Apple is still supporting is the right choice. It's vague, but since the Apple release schedule is not formalized, I think our policy should leave room for interpretation as well.

@FiloSottile
Copy link
Contributor

In fact, we haven't supported 32-bit iOS since Go 1.14 (#34751) which means we don't support any device that can't run iOS 12.

Setting the minimum version to iOS 12 in Go 1.18 should be a no-op in terms of device support (and I am way way way less sympathetic to users who can update their OS but don't).

@gopherbot
Copy link

Change https://golang.org/cl/366914 mentions this issue: doc/go1.18: document that iOS 12 or newer is required

gopherbot pushed a commit that referenced this issue Nov 24, 2021
For #47694.
Updates #49616.
Updates #48076.

Change-Id: I570564c3a54d3cd9cfc9b8267df9fbee3363b650
Reviewed-on: https://go-review.googlesource.com/c/go/+/366914
Trust: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
@gopherbot
Copy link

Change https://golang.org/cl/366934 mentions this issue: env/corellium: bump minimum ios version

gopherbot pushed a commit to golang/build that referenced this issue Nov 24, 2021
Updates golang/go#48076

Change-Id: Iaa84eb3eaea5de2cc844ea5b92e397879d190858
Reviewed-on: https://go-review.googlesource.com/c/build/+/366934
Trust: Roland Shoemaker <roland@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
@gopherbot
Copy link

Change https://golang.org/cl/368615 mentions this issue: misc/ios: bump min version

gopherbot pushed a commit that referenced this issue Dec 2, 2021
For #48076

Change-Id: I5edaa43af82c3478555c309a001a3d1b16de3d64
Reviewed-on: https://go-review.googlesource.com/c/go/+/368615
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
@changkun
Copy link
Member

CL 366914 documents that iOS 12 is required. It seems that the issue is resolved.

Are we still waiting for documentation in https://golang.org/wiki/MinimumRequirements and https://golang.org/wiki/Mobile? Can we close this?

@cherrymui
Copy link
Member Author

Updated https://github.com/golang/go/wiki/MinimumRequirements mentioning iOS 12 or later.

Thanks all for resolving this!

@golang golang locked and limited conversation to collaborators Feb 22, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
arch-arm64 Documentation FrozenDueToAge mobile Android, iOS, and x/mobile NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. OS-Darwin
Projects
None yet
Development

No branches or pull requests

9 participants