# Minimum Requirements

## Operating Systems

### Linux

Kernel version 2.6.23 or later. [_This depends on architecture though, we need to have specific builder for this._] Linux/ARMv5 requires much newer kernels, at least v3.1 (for `__kuser_cmpxchg64`).

We don't support CentOS 5. Kernel is too old (2.6.18).

For little-endian MIPS64, kernel version [4.1 is known to fail, and 4.8 works](https://golang.org/issue/16848). 

### Windows

Windows XP (w/ Service Pack 2) or higher. But we don't currently (2016-09-23) have a Windows XP running. That is https://github.com/golang/go/issues/10267

We run builders testing Go on Windows Server 2008 R2 Datacenter Edition. That is basically Windows 7 or above.

### macOS (née OS X, aka Darwin)

macOS Sierra (10.12) requires Go 1.7.1. We have not yet (as of 2016-09-23) backported the time system call fixes to any earlier Go versions. See https://github.com/golang/go/issues/16352.

Go only supports OS X 10.8 (Mountain Lion) or newer. We only have builders for 10.8, 10.10, and 10.11 as of 2016-09-23.

Go tip doesn't compile on OS X 10.7 (Lion) but binaries MAY work there. Maybe. No builders, no promises. We don't recommend it.

OS X 10.6 (Snow Leopard) is explicitly unsupported. See https://github.com/golang/go/issues/9511

### OpenBSD

The current officially supported -stable versions only. See https://golang.org/wiki/OpenBSD for details.

### DragonFly

Generally only the latest release version only. We have a builder, but it's not the most stable of our ports.

### FreeBSD

FreeBSD 8 and up according to https://golang.org/doc/install, but I suspect we might need something newer than 8. We only run builders testing FreeBSD 9.3 and 10.1.

### Native Client

pepper_39 or newer.

### Solaris

illumos (former OpenSolaris 10) based distributions or Oracle Solaris 11+. 

## Architectures

### x86

See https://golang.org/doc/install/source#environment

Set GO386=387 or GO386=sse2 for older processors.

### arm

See https://golang.org/doc/install/source#environment

* GOARM=5: use software floating point; when CPU doesn't have VFP co-processor
* GOARM=6: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)
* GOARM=7: use VFPv3; usually Cortex-A cores

### arm64

All ARMv8-A processors.

### ppc64 (big endian)

"Big-endian 64-bit PowerPC (linux/ppc64) only requires the POWER5 architecture." (from 
https://golang.org/doc/go1.7#ports)

### ppc64le (little endian)

"The experimental port to Linux on little-endian 64-bit PowerPC (linux/ppc64le) now requires the POWER8 architecture or later." (from 
https://golang.org/doc/go1.7#ports)

### mips64 (big endian)

MIPS III or higher. Builder is using MIPS64r2.

### mips64le (little endian)

MIPS III or higher in little endian mode. Builders are using Loongson 2E/2F.

### s390x

z196+

### mips (big endian) and mipsle (little endian)

MIPS32r1, with FPU or kernel FPU emulation