Why systemd is a problem for embedded Linux

Scope and adoption of systemd

  • Many argue systemd’s primary win is on servers and general-purpose desktops: dependency-aware service management, parallel boot, standardized logging, and unified tooling across distros.
  • Several point out that adoption was driven by sysadmins’ needs and distro maintainers’ convenience, not just “desktop integration.”
  • Others see political and vendor influence (especially large commercial Linux vendors) as a major driver and call the adoption “forced” rather than organic.

Embedded constraints: RAM, flash, boot time

  • One camp says modern embedded Linux devices often ship with ≥512 MB–1 GB RAM, where systemd’s real footprint (~3–8 MB RAM, a couple MB on disk) is negligible.
  • Another stresses that many cost-sensitive products still ship with 16–256 MB RAM and tight flash/OTA budgets; a few extra MB for systemd (and dbus) are a real cost and can lengthen boot times.
  • Economic arguments recur: saving even ~$0.10–$2.50 per unit in RAM/flash can matter at million‑unit scale; others counter that small RAM size deltas at low capacities are now cheap.

Technical benefits cited

  • Faster, more predictable boot on many systems; out‑of‑the‑box parallelization.
  • Unified service management (restart, watchdogs, dependencies, device/network awareness).
  • Integrated but optional components (journald, networkd, resolved, timers, timesyncd) can replace ad‑hoc scripts and cron in some deployments.
  • Some embedded teams report good results running systemd on 128 MB–512 MB boards and value reduced fiddling.

Technical issues and criticisms

  • Complaints about long or opaque shutdown/boot timeouts, non‑deterministic boot ordering in complex setups, and “fiddly” configuration when deviating from defaults.
  • Journald is seen by some as fragile (corruption, gaps, rotation issues) and often incomplete vs traditional file/syslog setups.
  • systemd is viewed as monolithic “epoxy”: logging, init, udev, login, DNS, time sync, etc., are tightly coupled and hard to swap out; this is framed as “anti‑Unix‑philosophy” and creating de‑facto lock‑in.
  • Portability concerns: heavy reliance on glibc/gcc extensions and weaker support with musl/LLVM in some embedded stacks.
  • Some report yearly “weird” failures or undocumented behaviors, and say maintainers can be dismissive of “unsupported” use cases.

Alternatives and ecosystems

  • Non‑systemd options mentioned: OpenWRT’s procd, BusyBox init + mdev, OpenRC, runit, s6, Gentoo, Devuan, Void, Alpine, Chimera, Yocto/Buildroot, BSDs, and non‑Linux RTOSes (Zephyr, FreeRTOS).
  • Consensus: for very small or highly cost‑constrained devices, minimal init + BusyBox/RTOS is often preferable; for larger embedded or server‑class devices, systemd can be attractive if its trade‑offs are acceptable.