TamaGo, the open source project that runs Go programs directly on hardware with no operating system and no C runtime, released version 1.27.3 on 20 October. Maintained by Andrea Barisani and Andrej Rosano, it now targets five architectures, from AMD64 and ARM to RISC-V and LoongArch, and underpins boot loaders, security firmware and UEFI applications written entirely in Go.
TamaGo in 30 seconds
- TamaGo runs Go code on bare metal through a modified Go distribution, tamago-go, that adds the GOOS=tamago target.
- It supports AMD64, ARM, ARM64, RISC-V and LoongArch, including Firecracker, Cloud Hypervisor, QEMU microvm and Google Compute Engine.
- Version 1.27.3, released on 20 October, requires tamago-go 1.27.2 or later, after 1.26.6 added LoongArch support in August.
- Projects built on it include GoTEE, GoKey, ArmoredWitness, armory-boot and the go-boot UEFI shell and loader.
The idea is easy to state and hard to pull off: take the operating system out of the picture and let the Go runtime itself, garbage collector and goroutines included, handle everything a program needs to run on a board or a virtual machine. TamaGo relies on a lightly modified Go toolchain, tamago-go, plus a set of packages with drivers for each processor and board. Developers write ordinary Go, and the output is a binary that boots on its own. The project is BSD-licensed, and its GitHub repository has around 2,100 stars and 1,500 commits.
Supported hardware and platforms
The list of targets keeps growing. On AMD64, TamaGo boots on the Cloud Hypervisor and Firecracker hypervisors, in QEMU microvm mode, as a UEFI application and on Google Compute Engine. On 32-bit ARM it supports NXP i.MX6UL and i.MX6ULL processors, the USB armory Mk II, the Raspberry Pi Zero, 1 and 2, and the Nuvoton NUC980. On ARM64 it covers NXP i.MX8M Plus and Microchip LAN969x, and on RISC-V chips such as the SiFive FU540 and AI Foundry ET-SoC-1, among others. The newest addition is LoongArch, Loongson’s Chinese architecture, with support for the 3A5000 processor since version 1.26.6, released on 14 August.
Releases come quickly. October alone brought two, 1.27.2 on 9 October and 1.27.3 on 20 October, and the latter requires tamago-go 1.27.2 or later. That matters when upgrading: the modified compiler and the library have to move together, and mixing versions is the fastest way to break a build.
Firmware, boot loaders and security
TamaGo’s appeal lies in what it removes. With no operating system and no C code, the attack surface shrinks to what the developer writes plus the Go runtime, a memory-safe language. That is why many projects built on TamaGo are security tools. GoTEE implements a trusted execution environment (TEE) for running isolated code in the secure world of ARM processors; GoKey is a smart card and authentication token for the USB armory; ArmoredWitness is a witness device for transparency logs; and tamago-sev-example shows how to run Go inside confidential virtual machines protected by AMD SEV-SNP (Secure Encrypted Virtualization-Secure Nested Paging).
The other big area is booting. armory-boot is a boot loader for the USB armory, and go-boot provides a UEFI shell and operating system loader written in Go. Traditional firmware, almost always written in C, has a long record of serious flaws in this space, as threats like the Bootkitty UEFI bootkit for Linux showed. Andrea Barisani covered the state of the project and UEFI development in Go in two talks at the 2025 Open Source Firmware Conference (OSFC).
None of this makes TamaGo a general replacement for Linux. It is a tool for specific cases, where a single program needs full control of the hardware without the weight of an operating system. Unsupported hardware means writing the drivers yourself, and libraries that depend on system calls will not work as they are. For developers who already write Go, a language that, as we covered when looking at why Go was created, was built for simplicity, the payoff is bringing the same tools to territory long reserved for C and assembly.
Frequently asked questions
What is TamaGo?
An open source project for compiling and running Go programs directly on hardware or a virtual machine, with no operating system and no C runtime.
Which architectures does TamaGo support?
AMD64, ARM, ARM64, RISC-V and LoongArch, on boards such as the USB armory Mk II and Raspberry Pi Zero, 1 and 2, and hypervisors such as Firecracker, Cloud Hypervisor and QEMU microvm.
Do I need a special compiler?
Yes. TamaGo uses tamago-go, a modified Go distribution that adds the GOOS=tamago target. Version 1.27.3 requires tamago-go 1.27.2 or later.
What license does TamaGo use?
It is released under a BSD license.
Sources:
