Multiple bootable roots

NixOS and OSTree both support the idea of independent "roots" that are bootable.

In NixOS, the entire system is based on checksums of package inputs (build dependencies) See Nix store. A both positive and negative of the Nix model is that a change in the build dependencies (e.g. being built with a newer gcc), requires a cascading rebuild of everything.

In OSTree, the checksums are of object *content* (including extended attributes). This means that any data that's identical is transparently, automatically shared on disk. It's possible to ask the Nix store to deduplicate, (via hard links and immutable bit), but this is significantly less efficient than the OSTree approach. The Nix use of the ext immutable bit is racy, since it has to be briefly removed to make a hard link.

At the lowest level, OSTree/VCS is just "git for binaries" - it isn't tied strongly to any particular build system. You can put whatever data you want inside an OSTree repository, built however you like. So for example, while one could make a build system that did the "purely functional" approach of Nix, it also works to have a build system that just rebuilds individual components (packages) as they change, without forcing a rebuild of their dependencies.