systemd has many options to reduce the privileges of a service: like running as a normal user with only certain POSIX capabilities, setting up a mount namespace with a limited view of the root filesystem, locking down which system calls can be invoked, etc.
[0] https://files.spritely.institute/papers/spritely-core.html
least-authority-wrapper: https://codeberg.org/guix/guix/src/commit/e3fbaeee1386fd447f...
I'm not sure why it's being sold as an alternative to Nix/NixOS
Some people want FOSS only, some people dislike systemd, some people like Scheme....
As for learning curve, I find Nix substantially easier, since the language is much simpler (JSON-like with lazy-functions) and doesn't need all that weirdness that result from using Scheme as configuration language (lots of quoting, module system, etc.)
I also think the shepherd alone is almost a killer app relative to something like systemd. I had to write a service myself for restarting ssh tunnels, and I could even do "advanced" things like templated configuration, almost trivially. It felt like a superpower, relative to systemd services.
A package that fully specifies its dependencies (via flake.nix/flake.lock) instead of depending on whatever the user has in their Nix channels. You enable them via:
nix.settings.experimental-features = [ "nix-command" "flakes" ];
And then forget about "nix-channel", "nix-env" and all the old ways of doing stuff, the new "nix" command is much easier to understand and much closer to what guix is doing.The fun part with flakes is that they turn git repositories into full packages, meaning you can do stuff like:
nix run github:user/project?ref=v0.2.0rc1
or use other git repositories directly as dependencies.That flakes are still marked as experimental is annoying, but they have been working fine for well over three years.
You can be certain that, if you've managed to get a piece of software running with Guix, you can also get it running identically on any other machine.
einpoklum•6mo ago
1. It seems one needs to know some Scheme in order to write these files:
https://www.scheme.org/
I don't think it's possible to just "wing it" by copy-and-paste.
2. I did not understand the introductory paragraph about how services "extend" each other. Does every service have hooks for possible extensions? What if a new service doesn't fit existing extension hooks?
(I can understand service dependencies of course, but it seems to go beyond that.)
foretoldfeline•6mo ago
No, only few services define service extensions.
It's more common for services to be configured solely via their configuration struct.
See the following for docs:
* https://guix.gnu.org/manual/en/html_node/Service-Composition...
* https://guix.gnu.org/manual/en/html_node/Service-Types-and-S...
This is less flexible-by-default than NixOS module, where any module can modify any other module. That is by design. The Guix developers see NixOS's approach as failing the principle-of-least-authority, where any arbitrary module (even those imported via flakes) can add a root SSH key.
I use NixOS, but it's an interesting tradeoff.