Porting systemd to musl Libc-powered Linux
Porting systemd to musl & upstreaming
- Multiple PRs to support musl have already been merged; likelihood of full upstreaming is described as high.
- Many patches fix assumptions where glibc exposes extra symbols or APIs and musl does not.
- Prior debates show musl maintainers dislike copying non‑POSIX “glibc‑isms”, while systemd maintainers don’t want to re‑implement glibc extensions they rely on.
- Some suggest a compatibility libc or headers to provide glibc APIs on top of musl; existing gcompat is noted as binary‑only, not for compiling.
- One controversial API is
malloc_info(XML dump of allocator state) used only for debugging; critics call it a bad interface and resent that making it optional “can’t be upstreamed.”
Boot performance & init systems
- Blog claims systemd boots in ~1/3 the time of OpenRC; some find this suspiciously large but note OpenRC’s parallel startup is disabled by default and documented as unstable.
- Several argue boot time doesn’t matter for always‑on servers/laptops, but others stress its importance for embedded, serverless, microVMs, and post‑S3 laptops.
- Some report OpenRC (or even a minimal inittab) already boots “fast enough”; others say OpenRC is “known slow” and that systemd wins on parallelization.
Systemd benefits vs drawbacks
- Pro‑systemd points:
- Huge ecosystem support, wide testing, and heavy sponsorship.
- Big win for distro maintainers vs duct‑taped sysvinit.
- Rich features: socket activation, user services, declarative sandboxing (namespaces, syscall filtering), tmpfiles, TPM secrets, logind, networkd.
- Critiques:
- “Good ideas, bad implementation” and poor UX (confusing defaults, unhelpful error messages, sparse docs).
- journald seen by some as slow, resource‑heavy, single‑bucket logging with awkward defaults and binary format; others report it performing fine even on weak hardware.
- Past high‑impact bugs are cited (system‑bricking issues, efivarfs RW, DHCP failures, coupling into OpenSSH).
- Some view systemd as work‑only “big contraption,” preferring simpler stacks at home.
Alpine, OpenRC, and ecosystem tensions
- Alpine’s musl/busybox/OpenRC stack is praised for minimalism, good battery life, and low background activity.
- Strong resistance to systemd entering Alpine or its ecosystem; fear of packages eventually requiring systemd.
- Counter‑argument: distros voluntarily chose systemd because alternatives are slower, less featureful, and harder to integrate; forking to avoid systemd is possible but costly, so “choice” feels constrained.
musl vs glibc performance & tradeoffs
- Shared links show mostly small performance differences, with one outlier reporting musl much slower for multithreaded allocation.
- Some believe musl’s malloc and overall performance are weaker; others note glibc’s allocator is hardly ideal either.
- General view: musl prioritizes size and simplicity, glibc prioritizes features and speed; you usually trade one for the other.