Gokrazy – Go Appliances
A minimalist operating system called Gokrazy aims to turn devices like Raspberry Pis into single‑purpose “appliances” by running an almost entirely Go-based userspace on top of the Linux kernel. Commenters compare it to unikernels, Talos Linux, LinuxKit, u-root, and Elixir’s Nerves, highlighting benefits such as a smaller attack surface, straightforward deployment, and strong memory safety relative to C. The main point of contention is whether Go’s garbage-collected runtime is suitable for low-memory or latency-sensitive environments, with several real-world examples suggesting it performs well on modest hardware when applications are written carefully.
Overall reaction to gokrazy
- Strong interest in the idea of “Go appliances”: a minimal Linux kernel with a Go-only userspace for single-purpose devices.
- Several commenters see it as an ideal fit for Raspberry Pi–class hardware and “the right way” to do Pi projects, especially when running just one application.
- Some think binding the concept tightly to Go is a design mistake and would prefer a more language-agnostic approach.
Related and similar projects
- Multiple comparisons to other minimal or specialized OS/userland approaches:
- Talos Linux and Bottlerocket OS (Go-heavy or Go-based userspaces for servers/Kubernetes).
- LinuxKit, u-root (Go userland / container-based minimal systems).
- TinyGo and TamaGo (Go for microcontrollers or bare metal).
- Unikernels (OSv, NanoVMs/OPS) and MirageOS, plus Android as a “Java userspace” analogy.
- Elixir Nerves framework for embedded systems (noted for OTA and blue/green deploys).
Memory usage, GC, and “low-powered” devices
- One side claims Go is poorly suited to low-memory/IoT targets, arguing:
- Go’s GC needs “lots” of RAM or careful tuning (GOGC, GOMEMLIMIT, MADV_DONTNEED).
- Performance degrades sharply under memory pressure.
- Others strongly disagree, citing:
- Many production Go services running comfortably within 50–128MB limits.
- Multiple services and databases running on 512MB–4GB servers without GC issues.
- Successful gokrazy usage on a Raspberry Pi Zero 2 W (512MB) for motion-detection camera workloads.
- TinyGo is discussed as a better fit for true microcontrollers but is described as a “dialect” of Go with reduced language/runtime support.
Networking and performance
- One commenter claims Go’s networking stack performs poorly over lossy, high-latency links.
- Others challenge this, note that Go uses the OS networking stack, and report good real-world throughput (thousands to tens of thousands of RPS) under modest memory budgets.
- Some report good performance even on older single-core Pis, though ARMv6 support details are contested.
Deployment model and security
- Concern is raised about having a Go compiler on production devices.
- Clarified that gokrazy builds images elsewhere (e.g., on a PC/CI) and deploys them; the target device does not contain the Go toolchain.
- Compared to “lightweight Linux + SSH + Ansible,” gokrazy is seen as even more minimal, though it still relies on the Linux kernel.
Use cases and appeal
- Strong appeal for “one-process machines” with tiny attack surface; some see this as the opposite of container-heavy setups.
- Interest in using gokrazy for personal/home projects, servers, and appliances; some see execution and long-term maintenance as the hard part rather than the concept.