-
Notifications
You must be signed in to change notification settings - Fork 17.9k
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
Comments
Also CC @changkun, @hajimehoshi. |
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. |
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. |
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. 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 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). |
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. |
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". |
Issue #49616 is a release blocker for 1.18, and the approach used to resolve it depends on a decision here. (CC @rolandshoemaker.)
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).
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? |
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. |
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). |
Change https://golang.org/cl/366914 mentions this issue: |
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>
Change https://golang.org/cl/366934 mentions this issue: |
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>
Change https://golang.org/cl/368615 mentions this issue: |
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>
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? |
Updated https://github.com/golang/go/wiki/MinimumRequirements mentioning iOS 12 or later. Thanks all for resolving this! |
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
The text was updated successfully, but these errors were encountered: