Nix is a purely functional package manager. This means that it treats packages like values in purely functional programming languages such as Haskell. They are built by functions that dont have side-effects, and they never change after they have been built. Nix stores packages in the Nix store, usually the directory /nix/store, where each package has its own unique subdirectory such as /nix/store/nlc4z5y1hm8w9s8vm6m1f5hy962xjmp5-firefox-12.0 where nlc4z5... is a unique identifier for the package that captures all its dependencies (its a cryptographic hash of the packages build dependency graph). This enables many powerful features.