On Go, release timing, and new machines
One of the early articles I read about the Apple ARM Macs was On the Apple Silicon M1 MacBook Pro (via). In it, the author (a developer) observed that Go wouldn't officially support these new machines until February 2021, when Go 1.16 is released (cf). I read this (in context) as being unhappy with the time it will take for Go to add this support and have it out in the world, and I had some feelings about that.
Here is the thing. Go, and open source projects in general, are under no obligation to do (or rush out) out of cycle releases just because a company has released a new product. Go's release cycles are very predictable; it releases every six months, with a stabilization period of a couple of months beforehand (Go 1.16 Beta has just been released). This means that when Apple announced these machines in June and offered to let people buy development kits, it was already far too late for the Go 1.15 release in August (Go 1.15 Beta 1 came at the start of June).
It also seems that rapidly landing support for macOS ARM64 would have had its own quality problems. I watch the development version of Go, so I've been able to see a stream of changes being made to add support for macOS ARM64, some of which work around kernel bugs or deal with issues only experienced on production Apple Silicon machines. Some changes did land before production hardware was available (for example), but a version of Go released before or just as the M1 machines themselves were available would not necessarily have been a good one.
(The earliest clear macOS ARM64 change I can find in the git logs is this one, from September 2nd.)
More broadly, Go has a variety of priorities for Go 1.16, as the development team does for every release. Supporting macOS ARM64 is only one of them, and probably not the largest one given what they wrote about the upcoming release in Eleven Years of Go. You cannot expect an open source project to put its other priorities on hold to rush out support for new machines.
This is not unique to Go and Apple M1s. It applies to all open source projects and all new things that need work to support; you always may need to wait a while. People who've used Linux for long enough and buy new machines are very familiar with this; it used to be that you should never buy a new machine (or new components) shortly after it was released if you wanted to immediately use Linux on it (this is still true for some sorts of hardware).
(Since Go already supports macOS and ARM64, you might think that this is a small change that's easy to do. Unfortunately there's no guarantee that the combination of the two works the way the code expects, and the Go code also apparently contained a number of assumptions about what various things implied, required, and so on. This is not surprising in any code; as people say repeatedly, if it's not tested, it doesn't work.)
Comments on this page:Written on 18 December 2020.