New customers often look surprised when, during the planning phase, we ask whether they really need Yocto. The unspoken assumption is usually that any serious embedded Linux project these days has to use Yocto. We at sigma star gmbh consider ourselves power users and Yocto experts. That’s exactly why we’re often the ones telling our customers to think twice before reaching for it. So why is Yocto the default, and when is it the wrong default?
People sometimes call it “the Yocto Linux distribution”.
That’s not what it is.
Yocto is a toolkit for building your own Linux distribution.
The Yocto Project itself ships a reference distribution called Poky, built from bitbake, openembedded-core, and meta-yocto1.
The ability to assemble a Linux system that matches your needs exactly makes Yocto incredibly powerful for embedded projects. You can compile the whole user space for your CPU, apply patches to any component, toggle features on or off in any recipe, and pin or change every version. On top of that, many System on Chip (SoC) vendors and hardware partners publish ready-to-use Board Support Package (BSP) layers, which give you a working starting point on real hardware.
That mix of flexibility and vendor support makes Yocto the default choice. The same mix also turns it into a trap when you don’t actually need that much control.
With regulations like the Cyber Resilience Act (CRA)2, product vendors now have to keep the software they ship secure and provide security updates for the lifetime of the product. That can be a long time to maintain a Linux system.
A regular Yocto release lives only about seven months, until the next release lands. Long Term Support (LTS) releases get up to four years of updates, which is the current policy starting with Yocto 5.0 (Scarthgap)3.
One might ask why four years isn’t enough. But there’s a less obvious problem. To see it, we need to look at what a Yocto LTS release actually maintains.
A Yocto release is a set of bitbake recipes for software components, with specific versions and metadata, plus the reference distribution Poky.
During the maintenance period, the Yocto maintainers apply bug and security fixes to those components and to Poky.
For software components, those fixes usually take the form of backports from newer upstream versions.
And here’s the twist. Since Yocto is a tool to build your own distribution, you’ve most likely made changes like these:
With every Yocto maintenance release, you’ll have to check whether your changes still apply cleanly on top of the new state. On top of that, you need to confirm that the components you added or pinned still receive fixes from somewhere, because Yocto’s maintainers don’t know about them. At the end of the day, it’s your maintenance work.
If you take Poky and use it almost unchanged, a fair question to ask is: Why are you using Yocto in the first place?
Yocto ships a Linux kernel and maintains it as part of each release. But you probably won’t use it unmodified. You almost always have to apply at least your vendor’s patches, and run a kernel new enough to include the drivers and fixes you depend on. So once you factor in CVE tracking, the kernel alone is a big part of your maintenance work, whether you use Yocto or not.
There’s a way to keep that work under control. We strongly advise our customers to build on top of an LTS kernel from kernel.org4 and keep all their changes in a tidy patch queue. To stay current on security fixes, move to each new stable release and re-apply the patch queue. kernel.org maintains LTS kernels for years, so your patch queue usually applies cleanly and only needs real work when you jump to a new LTS release.
Depending on your setup and security requirements, the same applies to the bootloader, which is usually just as vendor-specific.
And for completeness: sticking with the kernel your vendor ships is usually a bad idea. Vendor kernels sit years behind kernel.org, rarely receive updates, and miss almost all security fixes. Exceptions prove the rule.
Building “your own distribution” sounds great in a slide deck. In practice, it costs real engineering time.
sstate-cache and a shared DL_DIR make repeat builds faster, but the cache itself is fragile: a small recipe change can invalidate large parts of it.sstate between jobs. You can mirror sstate and DL_DIR to make this less painful, but that infrastructure is yours to operate.bitbake recipes, layers, dynamic layers, classes, overrides, bbappend files, PACKAGECONFIG, the difference between DEPENDS and RDEPENDS: the list of things you need to internalise before you can ship a Yocto image is long. Onboarding an engineer into a Yocto codebase takes weeks, not days.meta-vendor layer that pins a five-year-old kernel or bootloader, hardcodes machine-specific recipes into the wrong layers, and breaks every time you bump Poky. That “good starting point” can become the worst part of your build.None of this is a reason to avoid Yocto. It’s a reason to make sure you actually need it before you commit.
If all you really need is a solid Linux foundation to run your application on, an established distribution like Debian GNU/Linux solves most of the same problems with much less per-project work5.
Debian today ships about 70,000 binary packages, built for all common architectures: amd64, i386, arm64, armhf, riscv64, ppc64el, and a handful of others6.
Chances are good that your SoC can run those binaries directly, with no recompilation required.
Debian doesn’t only ship modern user space with systemd, udev, and dbus.
The archive also contains everything you need to build small Linux systems with SysV-style init or BusyBox.
You pick a slim base, install only the packages your product needs, and still benefit from the work of Debian’s package maintainers.
Debian stable receives security updates from the Debian Security Team for roughly three years. After that, the Debian LTS project, a community effort, extends support for about two more years on common architectures7. That works out to around five years per release in practice, close to a Yocto LTS, but with far less per-project work.
To pick up the latest fixes, you fetch the latest Debian packages and re-roll your image. Compared to a Yocto setup where you have to backport upstream patches yourself, or recheck whether your local modifications still apply on top of a maintenance release, that’s a different world.
This is usually the point where people get confused. They picture booting an SoC from a USB flash drive and running the Debian installer. That’s not what we mean.
The idea is to generate a flashable image on a build host and write it to the device. To do that, you need:
u-boot).For that last piece, the three usual suspects are mkosi8, ELBE9, and debos10.
All three are free software, and all three produce a deterministic image you can flash to your hardware.
The maintenance work shrinks dramatically: most updates become an apt-style refresh of the packages in the image, not a recipe rewrite.
To make the Debian path concrete, here’s the rough shape of a debos-based build.
debos reads a YAML recipe: a list of actions such as running a command, generating a root filesystem, or installing a Debian package from a configured source.
The basic workflow looks like this:
aptly11 to run a local Debian mirror that holds a copy of every Debian package you need.debos to use the mirror, and write recipe actions that produce your target image.debsbom12 generate the SBOM straight from a Debian system.After all that, when should you pick Yocto?
Use Yocto when:
INCOMPATIBLE_LICENSE mechanism makes excluding a whole license family across the image straightforward; with a stock Debian base you have to audit and trim packages yourself.Skip Yocto when:
Skip Debian when:
musl or uClibc. Debian’s main archive uses glibc throughout; swapping it out means rebuilding most of the archive yourself.Whichever way you decide, decide consciously and decide early. This is a foundational choice that’s hard to walk back once a product is in the field. When in doubt, start with an established distribution. Migrating to Yocto later, once you have a real reason for it, is much cheaper than the reverse: discovering halfway through a project that you’ve taken on years of maintenance work for no real benefit.
Yocto is a remarkable piece of engineering. It lets you build exactly the Linux system you need, and that’s precisely the problem when you don’t need exactly that. The same goes for other build-from-source tools like Buildroot: almost everything above applies there too, because the moment you assemble your own distribution, you own its maintenance.
mkosi, ELBE, or debos, covers the common case with a fraction of the per-project effort.For customers building a custom distribution, we always recommend Yocto. For everyone else, we keep asking the same question: Do you really need it?
Publish date
26.05.2026
Category
embedded
Authors
Richard Weinberger
sigma star gmbh
Eduard-Bodem-Gasse 6, 1st floor
6020 Innsbruck | Austria