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's basically the reasoning behind every modern init system as well, but i figure make brought this idea into unix nerds' minds first