Go: proposal: doc: document that Go 1.14 is last to support darwin/arm (32bit version)?

Created on 7 Oct 2019  ·  30Comments  ·  Source: golang/go

iOS 13 (and iPadOS 13) does not support running 32-bit apps. iOS 10 was the last version that supported 32-bit apps (with very visible warnings), and it's 3 years old.

Is it time to remove darwin/arm (leaving just darwin/arm64)? If so, the first step would be to document that Go 1.14 will be the final release with darwin/arm support.

Related to #34749. /cc @bradfitz @hyangah @eliasnaur

Documentation FrozenDueToAge Proposal mobile

Most helpful comment

How about we hedge a bit and announce that "Go 1.14 is likely the last release to support 32-bit darwin/arm but 64-bit darwin/arm64 support is unaffected" and see if anybody peeps up with concerns?

Then if our builders prove too difficult to keep up we can remove it, but if they're not causing us problems, we could keep it around a bit longer.

Any objections?

All 30 comments

Other than the builder, darwin/arm support isn't too much extra hassle than just darwin/arm64.

Go runs on watchOS and tvOS now, and the first darwin/arm64 watch (Watch Series 4) was released just a year ago. Earlier models are 32-bit.

@steeve might care; he had reservations last time I asked. Steeve also runs the hardware darwin/arm builder which has been offline for quite a while.

Not having a builder is another good reason to delete it.

That's actually our official policy: https://github.com/golang/go/wiki/PortingPolicy#removing-a-port

Thanks for providing that information Elias. I was thinking about watchOS and tvOS but wasn't sure what the state of their 32->64-bit migration was.

From looking over https://en.wikipedia.org/wiki/Apple_TV, I understand the current Apple TV devices (4th and 5th generations) support 64-bit (only?), but 3rd generation (released in 2013, discontinued in 2016) did not.

It sounds like watchOS devices aren't as far along, but iOS/iPadOS and tvOS are.

We are planning on removing arm support in a few weeks/months (most likely when we migrate to xcode 11). Although not just yet.

Supporting older WatchOS hardware looks like a pretty good reason to keep it though since it can now run Go (and I mean, how cool is that), which is fairly new with 1.13.

The builder being off-line is on me though, I'll fix that tomorrow morning.

@dmitshur, I briefly considered AppleTV. Only the 4th generation support the App Store, so we don't need 32-bit support for AppleTV.

I have restarted the darwin_arm and darwin_arm64 builders. 🤞

I have restarted the darwin_arm and darwin_arm64 builders. crossed_fingers

If only it was that easy: https://farmer.golang.org/temporarylogs?name=darwin-arm64-mn4m2zdaios&rev=cedb561617ea40c72dc018b38c4d5f0862595fe8&st=0xc0020f51e0

ERROR: Could not connect to lockdownd, error code -21
ERROR: Could not connect to lockdownd, error code -21

Alas, libimobiledevice needed an update, and somehow one of the iPhones wouldn't pair with the computer unless itunes was launched. Should be good now.

EDIT: it wasn't good, missing env vars. Should be better now.

Still no luck:

error: The specified item could not be found in the keychain.
go_darwin_arm_exec: codesign: exit status 1
FAIL    bytes   0.277s

Yes saw that. I'm on it.

Still working on it, now with new errors:

Install: VerifyingApplication (40%)ERROR: Install failed. Got error "ApplicationVerificationFailed" with code 0xe8008015: Failed to verify code signature of /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.UKJYBy/extracted/gotest.app : 0xe8008015 (A valid provisioning profile for this executable was not found.)
go_darwin_arm_exec: ideviceinstaller -i "/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/tmp/go_darwin_arm_exec_352375303/gotest.app": exit status 128 (5 attempts)
FAIL    html    274.599s

For errors like that I usually created a scratch project in Xcode, filled in the team and bundle ID from the GOIOS_* environment variables and made sure I could run the project on the device.

@eliasnaur Yes, I forgot to regenerate the provisioning profile after recreating the development certificate.

New error though, which I'm kinda clueless in https://farmer.golang.org/temporarylogs?name=darwin-arm-mg912baios&rev=ce83f41fed32bfc7826ec0cd7756a34594f8746b&st=0xc00c7d02c0:

*** Test killed with quit: ran too long (19m0s).
FAIL    compress/gzip   1140.013s

I see the app on the device, although I don't see it starting.

Also, I don't see the development images mounted on the devices

@eliasnaur Yes, I forgot to regenerate the provisioning profile after recreating the development certificate.

New error though, which I'm kinda clueless in https://farmer.golang.org/temporarylogs?name=darwin-arm-mg912baios&rev=ce83f41fed32bfc7826ec0cd7756a34594f8746b&st=0xc00c7d02c0:

*** Test killed with quit: ran too long (19m0s).
FAIL  compress/gzip   1140.013s

I see the app on the device, although I don't see it starting.

The wrapper times out while waiting on misc/ios/go_darwin_arm_exec.go:443, which is the ideviceinstall -i command. I don't know why.

You could try to kill the builder and run all.bash manually, as described in misc/ios/README. You did the hard work already, so hopefully

$ GOIOS_DEVICE_ID=8e5c23a5d0843d1ffe164ea0b2f2500599c3ebff GOARCH=arm64 CGO_ENABLED=1 CC_FOR_TARGET=$(pwd)/../misc/ios/clangwrap.sh ./all.bash

reproduces the hang.

EDIT: Alternatively, use make.bash above and run

$ export PATH=$GOROOT/bin:$PATH        # to add the exec wrapper to PATH
$ GOIOS_DEVICE_ID=8e5c23a5d0843d1ffe164ea0b2f2500599c3ebff GOARCH=arm64 CGO_ENABLED=1 go test -v archive/tar

to see debug output from the wrapper.

There is also a debug bool in misc/ios/go_darwin_arm_exec.go that you could flip before make.bash.

Yes, running it manually, I see it signing the binary, then running ideviceinstaller (doesn't show up in the console though, I'm seeing it because the app appears on the device).

Ok I got a repro: ideviceinstaller is stuck on GeneratingApplicationMap. Digging.

Somehow it's working fine on the arm64 device. I have tried to reset the arm device, no luck. I'll try another device tomorrow. In the mean time the arm64 builder should be back online.

The last build is failed for what looks like legitimate failures

For the record:

lldb: running program
panic: open /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/reflect: no such file or directory

goroutine 49 [running]:
internal/reflectlite_test.loadTypes(0x1300b4310, 0x6b, 0x100e258fe, 0x7, 0x1300b08a0)
    /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/internal/reflectlite/reflect_mirror_test.go:79 +0x130
internal/reflectlite_test.TestMirrorWithReflect.func1(0x1300b8ce0, 0x1300b4310, 0x6b, 0x100e258fe, 0x7, 0x1300b08a0)
    /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/internal/reflectlite/reflect_mirror_test.go:104 +0x70
created by internal/reflectlite_test.TestMirrorWithReflect
    /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/internal/reflectlite/reflect_mirror_test.go:102 +0x1e0
FAIL    internal/reflectlite    29.700s

And (more obscure):

lldb: running program
FAIL    runtime 37.602s

For the record:

lldb: running program
panic: open /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/reflect: no such file or directory

goroutine 49 [running]:
internal/reflectlite_test.loadTypes(0x1300b4310, 0x6b, 0x100e258fe, 0x7, 0x1300b08a0)
  /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/internal/reflectlite/reflect_mirror_test.go:79 +0x130
internal/reflectlite_test.TestMirrorWithReflect.func1(0x1300b8ce0, 0x1300b4310, 0x6b, 0x100e258fe, 0x7, 0x1300b08a0)
  /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/internal/reflectlite/reflect_mirror_test.go:104 +0x70
created by internal/reflectlite_test.TestMirrorWithReflect
  /private/var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/go/src/internal/reflectlite/reflect_mirror_test.go:102 +0x1e0
FAIL  internal/reflectlite    29.700s

This tests seems to load files which are not available on the tethered setup. It should probably just be skipped.

And (more obscure):

lldb: running program
FAIL  runtime 37.602s

After running make.bash, running the runtime tests in verbose mode should be as easy as

  export PATH=$GOROOT/bin:$PATH
  GOIOS_DEVICE_ID=... GOARCH=arm64 CGO_ENABLED=1 go test -v runtime

Perhaps additional -run <pattern>s might tease out the offending test.

Perhaps we should move the discussion to https://golang.org/issue/34847.

Let's move the builder discussion to #31497, assuming those are still the builders we intend to use.

@steeve, you wrote:

We are planning on removing arm support in a few weeks/months (most likely when we migrate to xcode 11). Although not just yet.

Supporting older WatchOS hardware looks like a pretty good reason to keep it though since it can now run Go (and I mean, how cool is that), which is fairly new with 1.13.

Is that a yes or no no removing darwin/arm after Go 1.14?

This is all dependent on builders staying up, so is it worth it to you, given that you're the one running the builders nowadays?

(ping @steeve; auto-completed messed up your handle earlier)

@bradfitz I'm sort of glad to announce that we no longer ship darwin/arm. That said, I'm happy to keep the builders up if that helps (ie "old" WatchOS support).

Not that I'll able to dig into why the tests fail (as they are now), but if I'm pinged when they go down (because they are fragile), I can have them up in a few days max.

How about we hedge a bit and announce that "Go 1.14 is likely the last release to support 32-bit darwin/arm but 64-bit darwin/arm64 support is unaffected" and see if anybody peeps up with concerns?

Then if our builders prove too difficult to keep up we can remove it, but if they're not causing us problems, we could keep it around a bit longer.

Any objections?

That seems OK to me, with the proviso that I would want to set the bar for “too difficult to keep up” very low.

If we need to make any significant changes for darwin/arm that aren't necessary for — or at least easily derivable from — darwin/arm64 or some other supported arm platform, we should bias toward removing support rather than spending time on maintenance.

I think this is a good idea.

Change https://golang.org/cl/203879 mentions this issue: doc/go1.14: document that Go 1.14 is likely last to support darwin/arm

Was this page helpful?
0 / 5 - 0 ratings

Related issues

gopherbot picture gopherbot  ·  3Comments

dominikh picture dominikh  ·  3Comments

michaelsafyan picture michaelsafyan  ·  3Comments

longzhizhi picture longzhizhi  ·  3Comments

enoodle picture enoodle  ·  3Comments