Skip to content(if available)orjump to list(if available)

Go-boot: bare metal Go UEFI boot manager

Go-boot: bare metal Go UEFI boot manager

20 comments

·December 18, 2025

Imustaskforhelp

I really like this idea but can anyone please summarize what it does for me. To me it feels very fascinating (bare metal golang in general) but I am not sure I truly understand its usecase and I would love to know more.

pjmlp

The use cases is not writing unsafe C in first place, and proving the point Go is usable in such scenarios, regardless of naysayers.

The creators of USB Armory also created TamaGo, instead of using Rust, exactly for the same reasons, to prove a point.

https://github.com/usbarmory/tamago

https://reversec.com/usb-armory/

Because in IT, seeing is believing.

xyse53

It's also a good way to learn about UEFI for people most familiar with go.

qhwudbebd

Quite apart from that, an EFI shell that's less awful than the standard UEFI one is an interesting project in its own right...

flanked-evergl

No amount of proven points will give Go null safety, though.

bradfitz

I've been idly following this stuff on & off for years, but I never saw proving a point "instead of using Rust" as one of the motivations of the project. Was that ever stated anywhere?

pjmlp

Yes,

> Languages like Rust have already proven they role in bare metal world, Go on the other hand needs to … and it really can!

From https://fiif.fi/wp-content/uploads/sites/9/2021/06/TamaGo.pd...

schmuckonwheels

If one can't write safe C code, then maybe stick to web development and leave the bootloaders and UEFI stuff to people who can.

Training wheels are merely a race to the bottom for barely-literate programmers.

monocasa

The number of memory safety CVEs written in C by people who ostensibly 'didn't need training wheels' point strongly to the antithesis of your argument.

And I say that as someone who's been a kernel engineer for 20 years.

tomcam

When you turn on a computer, it transfers code to software required to get the machine up and running reliably--the boot process. That used start in a chip called the BIOS. It's a 40-year old holdover from the early days of the IBM PC. UEFI is a more complex and feature-rich protocol. Due to its default memory management Go hasn't been considered the first choice for such purposes but this proof of concept uses Go for the very low level code needed for UEFI.

reactordev

“Due to its garbage collection” you mean. There’s nothing stopping you from writing go for bare metal, only your pride.

techgnosis

There aren't that many UEFI shells and the ones that exist are certainly not modern. Anything new is helpful, especially if its written in a popular language like Go.

typical182

There’s some more context in a proposal from the folks behind this project to upstream the needed Go runtime hooks into Go proper.

From what I can tell, the core Go team seems generally favorable to it, so seems like a decent chance it will happen.

From:

#73608 proposal: all: add bare metal support

https://github.com/golang/go/issues/73608

> Go applications built with GOOS=none would run on bare metal, without any underlying OS. All required support is provided by the Go runtime and external driver packages, also written in Go.

And:

> These hooks act as a "Rosetta Stone" for integration of a freestanding Go runtime within an arbitrary environment, whether bare metal or OS supported.

clktmr

This would also benefit the Embedded Go project, which uses similar modifications to the runtime.

https://embeddedgo.github.io/

Eduard

missed chance to name it Goo-Boot

hulitu

> Go-boot: bare metal Go UEFI boot manager

The bare metal list is quiet thin.

Why is so HW focused ? I use refind and it seems to be HW independent.

seanw444

As much as I appreciate Go, putting it on bare metal makes me cringe a little.

gethly

If that makes you cringe, I cannot even begin to imagine what this https://tinygo.org will do to you.

reactordev

Why? You can’t just leave that dangling like a meat stick.