# Go on ARM and Beyond
17 Dec 2020
Summary: Go's support for ARM64 and other architectures

Russ Cox

##

The industry is abuzz about non-x86 processors recently,
so we thought it would be worth a brief post about Go’s support for them.

It has always been important to us for Go to be portable,
not overfitting to any particular operating system or architecture.
The [initial open source release of Go](https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html)
included support for two operating systems (Linux and Mac OS X) and three
architectures (64-bit x86,
32-bit x86, and 32-bit ARM).

Over the years, we’ve added support for many more operating systems and architecture combinations:

- Go 1 (March 2012) supported the original systems as well as FreeBSD,
  NetBSD, and OpenBSD on 64-bit and 32-bit x86,
  and Plan 9 on 32-bit x86.
- Go 1.3 (June 2014) added support for Solaris on 64-bit x86.
- Go 1.4 (December 2014) added support for Android on 32-bit ARM and Plan 9 on 64-bit x86.
- Go 1.5 (August 2015) added support for Linux on 64-bit ARM and 64-bit PowerPC,
  as well as iOS on 32-bit and 64-bit ARM.
- Go 1.6 (February 2016) added support for Linux on 64-bit MIPS,
  as well as Android on 32-bit x86.
  It also added an official binary download for Linux on 32-bit ARM,
  primarily for Raspberry Pi systems.
- Go 1.7 (August 2016) added support for Linux on z Systems (S390x) and Plan 9 on 32-bit ARM.
- Go 1.8 (February 2017) added support for Linux on 32-bit MIPS,
  and it added official binary downloads for Linux on 64-bit PowerPC and z Systems.
- Go 1.9 (August 2017) added official binary downloads for Linux on 64-bit ARM.
- Go 1.12 (February 2018) added support for Windows 10 IoT Core on 32-bit ARM,
  such as the Raspberry Pi 3.
  It also added support for AIX on 64-bit PowerPC.
- Go 1.14 (February 2019) added support for Linux on 64-bit RISC-V.

Although the x86-64 port got most of the attention in the early days of Go,
today all our target architectures are well supported by our [SSA-based compiler back end](https://www.youtube.com/watch?v=uTMvKVma5ms)
and produce excellent code.
We’ve been helped along the way by many contributors,
including engineers from Amazon, ARM, Atos,
IBM, Intel, and MIPS.

Go supports cross-compiling for all these systems out of the box with minimal effort.
For example, to build an app for 32-bit x86-based Windows from a 64-bit Linux system:

	GOARCH=386 GOOS=windows go build myapp  # writes myapp.exe

In the past year, several major vendors have made announcements of new ARM64
hardware for servers,
laptops and developer machines.
Go was well-positioned for this. For years now,
Go has been powering Docker, Kubernetes, and the rest of the Go ecosystem
on ARM64 Linux servers,
as well as mobile apps on ARM64 Android and iOS devices.

Since Apple’s announcement of the Mac transitioning to Apple silicon this summer,
Apple and Google have been working together to ensure that Go and the broader
Go ecosystem work well on them,
both running Go x86 binaries under Rosetta 2 and running native Go ARM64 binaries.
Earlier this week, we released the first Go 1.16 beta,
which includes native support for Macs using the M1 chip.
You can download and try the Go 1.16 beta for M1 Macs and all your other
systems on [the Go download page](https://golang.org/dl/#go1.16beta1).
(Of course, this is a beta release and, like all betas,
it certainly has bugs we don’t know about.
If you run into any problems, please report them at [golang.org/issue/new](https://golang.org/issue/new).)

It’s always nice to use the same CPU architecture for local development as in production,
to remove one variation between the two environments.
If you deploy to ARM64 production servers,
Go makes it easy to develop on ARM64 Linux and Mac systems too.
But of course, it’s still as easy as ever to work on one system and cross-compile
for deployment to another,
whether you’re working on an x86 system and deploying to ARM,
working on Windows and deploying to Linux,
or some other combination.

The next target we’d like to add support for is ARM64 Windows 10 systems.
If you have expertise and would like to help,
we’re coordinating work on [golang.org/issue/36439](https://github.com/golang/go/issues/36439).

