nix 如何知道机器需要什么二进制文件?

how does nix know what binary a machine needs?

他们写在 nix 文档中:

但是,Nix 可以自动跳过从源代码构建,而是使用二进制缓存,这是一种提供预构建二进制文件的网络服务器。例如,当被要求从源代码构建 /nix/store/b6gvzjyb2pg0…-firefox-33.1 时,Nix 将首先检查文件 https://cache.nixos.org/b6gvzjyb2pg0….narinfo 是否存在,如果存在,则从那里获取引用的预构建二进制文件;否则,它将退回到从源代码构建。

我想知道 nix 是怎么知道我的机器需要什么样的二进制文件的?假设我 运行 nix on arm or intel or amd or you name it.如何为正确的体系结构选择此缓存中的二进制文件?

nix 是一个纯功能包管理器。因此,它将包所需的一切作为函数的输入,包括所谓的 stdEnv,其中包含有关体系结构的信息。

使用这些输入 nix 生成一个散列。这是你在包名前面看到的。

所以所需的架构编码在该哈希中,这就是为什么从二进制缓存下载时只需要检查哈希。