When looked at the right way, init systems like systemd, launchd, etc are build systems; instead of building a piece of software, they build a working environment. This is more than just a vague metaphor: most reasonable init systems will have a way of expressing dependencies, expected outputs, etc.

What *is* legitimately different is that init systems keep running after the artifact is built, and have rules that dynamically fire; EG: a rule that fires when network configurations change, a rule that fires every hour, etc. In a sense, this means that init systems are build systems that are always in watch mode, and support dynamic rules.

It would be interesting to transfer these rules across our analogy, and experiment with a build-style system that supports dynamic watch rules. Most fancy build systems already support an ad-hoc form of this via hot-reloading, but a principled version seems very useful!

@totbwf

I vaguely recall reading about a Linux distro (or hack thereon) that used `make` to launch services and dependencies. The reasoning (IIRC) was to start up faster by only launching the services you need and doing so in parallel.

@suetanvil that might have been Debian's sysvinit mod, I'm not sure if they used startpar in "make-like" mode or if it was literally a makefile.

the reasoning sounds closer to systemd's though, as parallel sysvinit didn't change /what/ was being launched, whereas systemd integrated like five different kinds of on-demand activation into the init system, so that many services no longer had to be started upfront (e.g. it kind of re-popularized inetd style services)