The benefit is that it integrates with the rest of the system and thus shares software updates, storage space, and gets overall features such as isolated builds and transactional upgrades and rollback.
254 karma · joined February 24, 2013
The benefit is that it integrates with the rest of the system and thus shares software updates, storage space, and gets overall features such as isolated builds and transactional upgrades and rollback.
More importantly, part of the dependency graph, including compilers, is treated specially and essentialy considered outside of the scope of Spack. This seriously hinders reproducibility, as we tried to explain in https://hal.inria.fr/hal-01161771/en .
In GNU Guix, we don't go as far as the author suggests (starting from a FORTH-like VM, then building a small Lisp, etc.), but we've been thinking about going in that direction: We already have Guile Scheme at the bottom, with which we can implement a range of tools, ranging from HTTP/FTP clients to ELF parsers, and more. We could imagine having (possibly feature-limited) variants of some of the bootstrap tools, written in Scheme, for the purpose of building the "real" tools.
Our current bootstrap looks like this: https://www.gnu.org/software/guix/manual/html_node/Bootstrap... .
This is in addition to whole-system containers: http://www.gnu.org/software/guix/manual/html_node/Invoking-g... .
The package recipes themselves are in a Git repo, which has signed release tags (but not signed commits.)
Lastly, the new 'guix challenge' command helps users check whether binaries provided by a server genuinely come from the source it claims to have built. See http://www.gnu.org/software/guix/manual/html_node/Invoking-g... .
Technically, I don't see it as "duplicating" Nix: Guix uses low-level parts of Nix that are awesome, and replaces higher-level layers with a more integrated and unified system. See https://arxiv.org/abs/1305.4584 for the technical rationale or the video on the home page on the concrete impact of those differences. Hacking GuixSD is a very different experience, I think!
(Disclaimer: I maintain Guix and I'm a former NixOS hacker.)
The way it is used, dmd itself takes care exclusively of keeping services running. Services themselves are "translated" to for dmd's configuration file from their higher-level definition (see http://www.gnu.org/software/guix/manual/html_node/Defining-S... ).
The nice thing is that service actions are written in Scheme so they can do anything. For instance, 'static-networking-service' at http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services/... uses directly the right ioctls to set up the network; so does 'file-system-service' at http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services/... and so on.
However, all libc symbols not used by Guile are omitted from the resulting static binary, which is why the FFI is not an option. (This is independent of Guile or the libc brand.)
As for the size, the initrd is less than 5 MiB (the 'guile' binary is less than 4 MiB).