在传统的软件管理方式(如 apt、yum、brew)中,安装软件往往依赖于全局环境(如 /usr/bin/lib 等),这意味着:

  • 构建结果受环境影响:如果你的 /usr/lib 目录有不同的库版本,你的软件可能表现不同,甚至编译失败。
  • 依赖地狱(Dependency Hell):不同软件可能依赖不同版本的库,无法同时满足。

而 Nix 规定所有构建都是纯函数,软件包的安装和构建必须是“纯粹的”,即:

  • 相同输入 产生相同输出
  • 不依赖外部环境(如 /usr/bin
  • 所有依赖项都是显式声明的

Nix 构建软件的方式就像数学上的函数:f(x) = y,相同的 x(源码 + 依赖)一定会产生相同的 y(软件包) 这意味着,即使你在不同的系统上构建,结果也是完全一致的(可复现性)。