Nix 包管理器

Nix 是一个操作系统包管理器。同 RPM、APT 和许多其它的软件包管理系统一样，它可以用来控制软件包的安装，或已命名的，带版本号的文件组，例如软件应用及其相关的配置数据等。Prins, P., Suresh, J. and Dolstra, E., "Nix fixes dependency hell on all Linux distributions,"  linux.com, December 22, 2008Dolstra, E., de Jonge, M. and Visser, E. "Nix: A Safe and Policy-Free System for Software Deployment."  In Damon, L. (Ed.), 18th Large Installation System Administration Conference (LISA '04) , pages 79–92, Atlanta, Georgia, USA. USENIX, November 2004.Dolstra, E. The Purely Functional Software Deployment Model.  PhD thesis, Faculty of Science, Utrecht, The Netherlands. January 2006. .

 Nix 
Nix 包采用一种专门设计的，惰性求值的纯函数式语言进行配置；Shell 脚本或其它外部程序（如 Make）可用于从源码构建包。此系统的纯函数式性质能够保证非常精准的依赖跟踪。例如，一个二进制包依赖于对应的源码包、编译器和其它用于构建的包。密码散列函数确定了每个包的精确构建和运行时依赖，而每個源碼或二進位包都以一個這樣的散列值表示。其结果就是，二进制包仓库成为了包管理器基本操作透明性的优化（类似幹于通过密码散列函数来“缓存”）。

依赖问题通过功能上等价于硬链接的一套系统来解决，若软件的某个版本被某个包所依赖，那么仅当没有包依赖于它之前，它都不会被移除。这会导致需要更多的存储空间，但可以保证所有升级的安全性（保证不会破坏现有的应用）和原子性。它也允许任何包的多个版本，包括参数化地包含某一特性的包同时存在而没有冲突。

Nix 在安装包时依赖于自身的目录结构。所有的包均会被安装到 nix 目录的子目录中。在命名文件夹时，一个包的不同版本会根据包的 hash 加以区分。

此外，Nix 可作为现有系统（例如 GNU/Linux 发行版）的包管理器使用。除了严格意义上的软件包外，Nix 也可被用于维护任何类型的文件配置，如服务器的配置等。

 NixOS 
NixOS 是一个 Linux发行版，它采用 Nix 来管理操作系统中包括 Linux 内核的所有部分。Dolstra, E. and Löh, A. "NixOS: A Purely Functional Linux Distribution ." In ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming , pages 367–378, Victoria, British Columbia, Canada. September 2008.

 参见 
 Maak -  一个类似于 make 的自动化构建工具，它被设计用于构建复杂的软件系统。
 脚本语言
 软件包（软件包管理系统）
 GNU Guix - 另一个 GNU/Linux 发行版的声明式包管理器，基于 Nix 构建，不过采用了更加普及的 GNU Guile 语言而非 Nix 的领域特定语言进行配置和定制。
 批处理
 办公自动化
 运维自动化 - 包管理器的潜在应用场景
 软件工程

 参考文献 

 外部链接 

 零安装和 Nix 这类系统的比较 
 Debian 开发者的批评  (2008)
 介绍：Purely Functional Configuration Management with Nix and NixOS 

Category:2012年软件
Category:數據管理軟件
Category:自由電腦程式設計工具
Category:自由软件包管理系统
Category:函數式編程
Category:GNU计划软件
Category:Linux软件包管理相关软件
Category:Unix软件