GNU Shepherd 0.8 Released as an Alternative to Systemd
lists.gnu.org
lists.gnu.org
The systemd defines declarative configuration formats, include dirs, strict rules and so on to limit what startup scripts can do, and to keep system bootable. You can install many third-party software, and be pretty sure that when you say "stop", it stops; and when you say "status" you will get its status. The cost of that is that some things are non-trivial or require extra steps.
Shepherd, on the other hand, fully trusts user. There are no safeties -- your config file is basically a lisp program running in PID 1. It is up to every programs' author to implement boot logic properly -- an infinite loop can render your system unbootable, and if "stop" command leaves stray processes around.. well, you can fix it yourself.
The only safety Guix provides is an ability to roll back the system to the previous state, so if your latest changes rendered system unbootable, you can undo them.
> The GNU Daemon Shepherd or GNU Shepherd is a service manager written in Guile
Oh, great. So it'll probably cease to work with the next Guile release like lilypond and texmacs.</angry-distro-maintainer>
I also believe that comparing gnu shepherd and systemd is potentially confusing, because systemd refers to a whole set of programs covering various aspects of networking, logging, etc. and not just to the pid 1 daemon launched on startup.
(By the way, I have no strong opinion for or against systemd, to me it’s just another tool, and like any tool it’s more appropriate in some use cases than in others.)
Systemd's memory footprint, it must be said, is nothing to write home about. Generallly you get good daemon behavior, when demands are very dynamic, by periodically starting a new process, passing the baton, and dying. Biology discovered this early on.
reads changelog Fix compilation on systems without ‘prctl’ such as GNU/Hurd
Ahh yes.
For example, systemd bundles service management (Type=, Restart=) and containers (DynamicUser=, SyscallFilter=, etc.) into the same binary/process. Shepherd separates these roles.
Shepherd just does service management. Containerisation can be provided by any tool, but Guix System provide call-with-container to make this easier: https://guix.gnu.org/blog/2017/running-system-services-in-co...