GERT logo

GERT

Free

GERT is a modified version of Go that runs bare-metal on armv7a SOCs. The minimal set of OS primitives that Go relies on have been re-implemented entirely in Go and Plan 9 assembly inside the modified runtime. The goal of this project is to bring the benefits of a high-level, type-safe, and garbage-

FreeFree tier
Type
Open Source

About GERT

GERT (Golang Embedded Run-Time) is a research prototype that modifies the Go runtime to run bare-metal on armv7a System-on-Chips (SOCs), eliminating the need for an operating system. It re-implements essential OS primitives—such as scheduling, memory management, and concurrency—entirely in Go and Plan 9 assembly, enabling developers to write high-level, type-safe, and garbage-collected code in embedded environments. Currently targeting the Freescale iMX6 Quad SOC (Wandboard Quad), GERT includes drivers for UART, SPI, SDCARD, GPT, and IOMUX, and provides all of Go's concurrency features like goroutines and channels on bare metal. The project aims to bring the productivity and safety of Go to embedded systems while offering improved latency over Linux user-space C implementations.

Key Features

Modified Go runtime runs bare-metal without an operating system
Supports armv7a SOCs (currently iMX6 Quad on Wandboard Quad)
All Go concurrency features (goroutines, channels) on bare metal
Improved latency compared to Linux user-space C
Included drivers for iMX6 UART, SPI, SDCARD, GPT, IOMUX
Greater portability than bare-metal C for ARM targets
Re-implements OS primitives (scheduling, memory management) in Go and Plan 9 assembly
Includes benchmarks and measurements from the author's thesis
Can run in QEMU emulator for testing without hardware
Open-source with documentation and bootloader images provided

Pros & Cons

Pros
  • Brings Go's type safety, garbage collection, and concurrency to bare-metal embedded systems
  • Lower latency than equivalent C programs running on Linux user-space
  • Full goroutine and channel support without OS overhead
  • Open-source and free to use, modify, and distribute
  • Includes drivers for common peripherals on iMX6, accelerating development
  • Can be emulated via QEMU, enabling development without physical hardware
Cons
  • Research prototype – not yet stable or suitable for production use
  • Only supports the Freescale iMX6 Quad SOC (Wandboard Quad) with hard-coded memory map
  • Limited to armv7a architecture; no support for other ARM variants or architectures yet
  • Requires knowledge of Go runtime internals and assembly for porting to other hardware
  • No official package or binary releases; must build from source
  • Documentation may become outdated as the project evolves

Best For

Bare-metal embedded systems development in a high-level languageReal-time applications requiring low latency and Go concurrencyEducational research on runtime modification and embedded GoPrototyping embedded systems for iMX6-based hardwareReplacing Linux user-space programs with bare-metal Go for improved performance

FAQ

What is GERT?
GERT (Golang Embedded Run-Time) is a modified version of the Go runtime that runs directly on armv7a SOCs without an operating system, re-implementing OS primitives in Go and Plan 9 assembly.
What hardware does GERT support?
Currently, GERT only supports the Freescale iMX6 Quad SOC, specifically the Wandboard Quad. The memory map is hard-coded, but the project can be ported to other armv7a SOCs with adequate documentation.
Is GERT production-ready?
No. The repository explicitly states it is a research prototype and should not be used for critical systems yet.
How can I test GERT without hardware?
You can run GERT in a QEMU emulator. The repository provides installation instructions that include building QEMU from source and running GERT programs.
What Go features are available in GERT?
GERT supports all of Go's concurrency primitives, including goroutines and channels, on bare metal. It also provides a garbage-collected environment.
Does GERT include device drivers?
Yes, it includes drivers written for the iMX6 UART, SPI, SDCARD, GPT, and IOMUX controllers.