Embedded Linux build system

Embedded Linux — without tears

Native builds. Modern languages first-class. AI that actually understands the system. One tool from your laptop to production — no SDKs, no cross-compile rituals, no rebuild-the-world for a config tweak.

The status quo

Building for the edge shouldn't feel like 2008.

Most embedded Linux toolchains were designed for an era of slow ARM hardware, scarce CI, and frozen SDKs. They still work — they're just out of step with today's technology.

Cross-compile gymnastics

Sysroot management, host contamination, mismatched pkg-config. Time spent fighting toolchains, not shipping features.

SDK drift

OS team builds an SDK. App team uses it. Six months later, "works on my SDK version" becomes a JIRA epic.

Stack traces from generated shell

A failure ten layers deep in machine-generated bash, and the actual fix is in a recipe you didn't write.

Modern languages are second-class

Go, Rust, Python wheels — bolted on after the fact, when they should be where the work happens now.

The promise

One tool. Every layer. Real speed.

[yoe] is a single Go binary that handles the entire build flow — from fetching sources, to sandboxed compilation, to bootable disk images. Three interfaces, same engine: AI conversation, an interactive TUI, and a traditional CLI.

01 / Native

No cross-compilation

Build ARM and RISC-V on a Mac, on real hardware, or in cloud CI. QEMU user-mode emulation transparently runs foreign-arch containers — same binary, native pipeline, no toolchain ceremony.

02 / Languages

Cargo, Go modules, pip — as-is

Modern languages already solved dependency resolution, caching, and reproducibility. [yoe] uses what they ship instead of reinventing it. Even pre-built PyPI wheels just work.

03 / AI

AI as a first-class interface

Starlark units, queryable dependency graphs, structured logs. An assistant can create units from a URL, diagnose a failed build, audit CVEs, and trace why a package is in your image.

04 / No SDK

Same tool, system to app

System engineers and application developers run the same binary against the same config. New hire clones the repo, types yoe, ships.

05 / Cache

Cached at the unit level

Every unit produces a content-addressed apk. Most developers never rebuild — they pull. Local, team, and global cache layers, no global lock.

06 / Sandboxed

Per-unit container, bwrap-isolated

Each unit runs in its own Docker container with a bubblewrap sandbox. Toolchain pinning per-unit; no host pollution; no leaks between builds.

Get started

From zero to bootable image in minutes.

One Go binary, Docker, and Git is all you need. No global state, no hidden caches, no SDK to install. The first build assembles a Docker toolchain container, fetches default unit modules, and produces a bootable QEMU image.

For ARM64, register QEMU user-mode once with yoe container binfmt, then add --machine qemu-arm64. The build runs inside a real ARM64 container, transparently emulated by your host kernel.

Full quickstart →

~/yoe-test  ·  bash
# Download the binary (Linux x86_64)
curl -L https://github.com/YoeDistro/yoe/releases/latest/download/yoe-Linux-x86_64 -o yoe
chmod +x yoe && mv yoe ~/bin/

# Create a project, build, run
yoe init yoe-test
cd yoe-test
yoe build base-image
yoe run base-image
Why now

The pieces finally lined up.

A decade ago, this combination wasn't realistic. Three things changed at once.

Hardware

ARM & RISC-V build at full speed

Modern dev boards and cloud instances (AWS Graviton, Hetzner CAX) run native arm64 builds at full clock. QEMU user-mode covers the rest. The cross-toolchain isn't necessary anymore — it's just inertia.

Ecosystems

Languages bring their own tools

Cargo, Go modules, pip, npm, Zig — they already handle resolution, caching, lockfiles, and reproducibility. A build system in 2026 should compose with these, not reimplement them.

AI

An assistant can carry the load

The hardest part of embedded Linux isn't writing recipes — it's knowing which knobs to turn and why. Structured Starlark and a queryable graph let an AI do the legwork instead of asking the developer to memorize a build system's quirks.

Ship modern edge products faster.

Build for ARM, RISC-V, and x86 with the same tool. No cross-compile, no SDK handoff, no rebuild-on-config-change. Pre-1.0 and moving fast — try it and tell us where it breaks.

Questions, feedback, or commercial support?

We'd like to hear from you — about a board you're targeting, a unit you can't get to build, or a contract you'd like help with.

info@yoebuild.org →