This work presents initd, a lightweight init system designed for constrained and containerized Linux environments, with practical compatibility for commonly used systemd service interfaces. Modern Linux systems are increasingly built around systemd, which tightly couples a widely adopted service interface with a complex runtime model. While this integration provides powerful functionality, it assumes a privileged and feature-complete environment that is often unavailable in containerized environments (e.g., Docker), embedded systems, chroot-based environments, and unprivileged user-space runtimes (e.g., proot). In such environments, developers face a fundamental trade-off: either attempt to run systemd outside its intended context, or abandon its interface in favor of incompatible alternatives. This creates a gap between the de facto standard service interface and the realities of constrained execution environments. Initd addresses this gap by preserving the externally visible service model of systemd while relaxing its runtime assumptions. Instead of replicating the full systemd architecture, initd enables reuse of a subset of unmodified unit files under a simplified execution model, avoiding dependencies on components such as D-Bus, cgroups, and journald. It supports operation both as PID 1 and as a standalone service manager, maintaining a familiar systemctl-style workflow. The paper describes the design and implementation of initd, introduces a pragmatic compatibility model for systemd unit files, and evaluates its behavior across Debian-based systems and containerized environments. Experimental results indicate that a subset of commonly used systemd service units can be executed without modification in practical scenarios under a lightweight runtime model.
Yujie Xing (Sat,) studied this question.