Design goals

Nix: A Safe and Policy-Free System for Software Deployment

Existing systems for software deployment are neither safe nor sufficiently flexible. Primary safety issues are the inability to enforce reliable specification of component dependencies, and the lack of support for multiple versions or variants of a component. This renders deployment operations such as upgrading or deleting components dangerous and unpredictable.

The primary features of Nix are:

  • Concurrent installation of multiple versions and variants
  • Atomic upgrades and downgrades
  • Multiple user environments
  • Safe dependencies
  • Complete deployment
  • Transparent binary deployment as an optimisa- tion of source deployment
  • Safe garbage collection
  • Multi-level package management (i.e., centralised + local)
  • Portability

Safe and flexible software deployment

Software deployment is the act of transferring software to the environment where it is to be used. This is a deceivingly hard problem: a number of requirements make effective software deployment difficult in practice, as most current systems fail to be sufficiently safe and flexible.

The main safety issue that a software deployment system must address is consistency: no deployment action should bring the set of installed software components into an inconsistent state. For instance, an installed component should never be able to refer to any component not present in the system; and upgrading or removing components should not break other components or running programs, e.g., by overwriting the files of those components. In particular, it should be possible to have multiple versions and variants of a component installed at the same time.