It's better because given the same input you always get the same output. For example, in Gentoo when one builds a package the final result depends on what's been built before. Or (killer feature for configuration management):
Suppose one has a resource for file in Puppet
file "blah" do
source "yada"
end
if you erase that resource, the file still stays there. With Nix/Guix anything not defined in configuration isn't present at all on system.
Another feature : one can install, for example, different versions of Python/PyPy/etc locally using the same package manager. Local and system-wide package share the same underlying files and don't interfere.
Rollbacks, very easy way to restore system packages/configs to previous working state.
Comments
It's better because given the same input you always get the same output. For example, in Gentoo when one builds a package the final result depends on what's been built before. Or (killer feature for configuration management):
Suppose one has a resource for file in Puppet
file "blah" do source "yada" end
if you erase that resource, the file still stays there. With Nix/Guix anything not defined in configuration isn't present at all on system.
Another feature : one can install, for example, different versions of Python/PyPy/etc locally using the same package manager. Local and system-wide package share the same underlying files and don't interfere.
Rollbacks, very easy way to restore system packages/configs to previous working state.