go-bootloaders
Pure-Go bootloader tooling — an effort to reimplement the classic boot stack in Go, with no cgo.
Two targets shipped, four still on the roadmap
grub and systemd-boot
are real, tested Go modules in production use — both are consumed by
go-diskimages/diskimage today.
limine, refind, syslinux, and u-boot remain planned: named in
the roadmap, not yet started. See Roadmap & Status for the
honest state of each repo.
The idea
A bootloader is one of the last pieces of low-level system software still
written almost exclusively in C and assembly. go-bootloaders asks whether the
boot stack — config parsing, filesystem and partition probing, kernel/initrd
loading, the boot menu and the chainload/handoff to the kernel — can be expressed
in memory-safe Go, built from source with cgo disabled.
The aim is a family of independent modules, each one a Go-native take on a well-known bootloader, sharing as much common machinery as is sensible: they compose with the sibling go-volumes (GPT), go-filesystems (FAT32/ext4/btrfs/UEFI vars), and go-tpm2 (measured boot) libraries rather than reimplementing that machinery per bootloader.
Family status
| Target | Models | Status |
|---|---|---|
grub |
GRUB-style multi-OS boot menu | Shipped — production consumer of the storage/firmware/TPM stack, 93.9% test coverage |
systemd-boot |
systemd-boot (sd-boot) UEFI stub/menu, Boot Loader Specification |
Shipped — 92.9% test coverage |
limine |
Limine modern x86_64/UEFI boot protocol | Planned |
refind |
rEFInd-style graphical UEFI boot manager | Planned |
syslinux |
Syslinux/ISOLINUX/PXELINUX family | Planned |
u-boot |
U-Boot embedded/SoC bootloader | Planned |
Neither grub nor systemd-boot has cut a tagged release yet; both are
consumed by downstream modules today via Go pseudo-versions (no replace
directives, no vendoring). See Roadmap & Status for exact
commit/coverage figures and what remains before a v1 tag.