Hacker News new | ask | show | jobs
by rakoo 4152 days ago
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...