| Others have explained it, but I like to see it like that: - apt-get, yum, pacman and "traditional" package managers deal with _transition of your system_: _please install this packet_, _please remove this packet_ - nix and guix deal with _state of your system_: _please make sure that the final state is thus_. This brings easy reproducibility of a system (if you have the recipe, you can have a another machine be an _exact_ copy) and de-entanglement (no more managing conflicting dependencies, no more dangling files). If I were to draw parallel, it would be like this: - "traditional" package managers are like jQuery: you pick some DOM node / some package, and modify it / update it. After some time you don't know anymore who modified this DOM node, who needs it, ... things become hard to track - nix and guix are like React: you specify the state you want in a single place (or rather in a definite place) and React/nix maps that definition into your final product Here's a long blog post that goes into more detail: https://www.domenkozar.com/2014/03/11/why-puppet-chef-ansibl... |