A Go unikernel running on x86 bare metal
In this technical retrospective (2020), @Lealen shares practical architectural lessons learned from running, scaling, or migrating production software under lean constraints.
Core Principles for Independent Builders:
Defaulting to simpler architectures (such as monolithic frameworks, SQLite, or managed VPS) prevents early engineering bankruptcy.
Evaluating true compute and egress costs reveals that high cloud bills can often be slashed by 80%+ through judicious re-platforming.
Code you write at 2 AM as a solo engineer must be easy to debug six months later without complex microservice dependencies.
Community Debate Themes:
HN engineers debated the tradeoffs between cloud convenience and raw server economics, database indexing strategies, and resisting premature architectural complexity.
CATEGORY Frugal Engineering →
HISTORICAL ERA Pandemic Bubble (2020–2022)
COMMUNITY SCORE ★ 177 points
TOTAL DISCUSSIONS 42 comments
Honest question: why use a unikernel on bare metal?
I can see the lure on top of an hypervisor. You already have an actual kernel running which you can use it to administer the machine. Why pay the performance price of a full kernel in your vm if you are only going to run one application ?
On bare metal however, you will probably need to bundle a ton of things if you don't want to end up with an unmanageable device. That leaves the performance gain of compiling everything together or actually disposable devices (maybe for embedded?) as potential use cases I can envision. Is there more ?
Anyone's using this in production? Or any other unikernels?
tl;dr: a unikernel means there's no standard OS other than the runtime execution environment specifically just for Golang in this instance; which means it should be much faster and much more lean (at the price of not having standard tools like SSH and all)
What are the differences between Unikernel and RTOS? Both are lean. Except for the fact that RTOSes are usually coded in C/C++ mostly. And Unikernel implementations are present in various languages. Other than that what is the difference? Moreover, RTOSes provide all those Real-Time guarantees.
The README is concise and well written in my opinion, I was wondering how useful it would be without standard libraries before I clicked the link, the first paragraph says it has support for network libraries and went on to show Mario running in this!
This is fascinating to me as I reorient https://go-micro.dev towards something of an embeddable distributed systems framework. Really cool work, thanks for sharing.