Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一
Nix 1.11 发布说明深度解读确定性构建验证、Nix 表达式预取与沙箱命名统一【免费下载链接】nixNix, the purely functional package manager项目地址: https://gitcode.com/gh_mirrors/ni/nix导读本文基于 Nix 官方发布说明 rl-1.11.md系统解读 Nix 1.112016-01-19 发布带来的核心能力nix-prefetch-url支持直接从 Nix 表达式预取源码并打印哈希、fetchurl内置函数支持 NAR 下载与解包、SHA-512 哈希全面支持以及以--option build-repeat、--check、-K组合为核心的构建确定性验证工作流。文中所有实现细节均结合当前仓库源码进行佐证读者读完后既能理解这些历史特性背后的设计动机也能掌握它们在今日 Nix 中的实际用法与底层原理。说明这是一个以修复 bug 为主的次要版本primarily a bug fix release但其中引入的多个新特性——尤其是构建确定性检查机制与chroot到sandbox的术语统一——深刻影响了后续 Nix 的迭代方向至今仍可在当前仓库源码中看到其印记。一、nix-prefetch-url从 Nix 表达式直接预取源码1.1 核心新能力1.11 之前nix-prefetch-url只能接受一个裸 URL。新版本允许它直接解析当前目录下的 Nix 表达式取出某个属性所对应的下载源并完成预取$ nix-prefetch-url -A hello.src这条命令会求值当前目录 Nix 表达式中的hello.src属性找到其中的fetchurl调用下载其指定的文件并把结果文件的密码学哈希打印到 stdout。它与nix-build -A hello.src的关键区别在于nix-prefetch-url不校验哈希不要求表达式里预先填写正确的哈希因此非常适合在更新 Nix 表达式时用来重新计算哈希值——先跑一次拿到新哈希再回填到表达式里。1.2 支持解包类函数fetchFromGitHub场景-A模式不仅能处理fetchurl也能处理那些下载后需要解包的取源函数如 Nixpkgs 中的fetchFromGitHub因为它会读取表达式中的outputHashMode属性来判断是否属于recursive递归/解包模式$ nix-prefetch-url --unpack https://github.com/NixOS/patchelf/archive/0.8.tar.gz也可以从 Nix 表达式出发$ nix-prefetch-url -A nix-repl.src1.3 源码级实现prefetch.cc当前仓库中nix-prefetch-url的实现位于 src/nix/prefetch.cc。其核心逻辑prefetchFileprefetch.cc完成下载 → 可选解包 → 加入 store → 返回哈希的完整链路下载阶段通过FileTransferRequest将 URL 内容写入临时文件req.decompress false保持原始字节以便精确计算哈希解包阶段当--unpack生效时调用unpackTarfile解包到临时目录若解包结果只有一个顶层文件/目录则取其本身否则取整个解包目录入店阶段调用store-addToStoreSlow根据是否解包/可执行选择NixArchiveNAR或Flat内容寻址方式哈希模式默认 SHA-256HashAlgorithm::SHA256可用--type指定其他算法。参数解析在main_nix_prefetch_urlprefetch.cc中完成-A/--attr模式会通过evalFile求值指定或默认当前目录的 Nix 表达式沿属性路径定位目标属性findAlongAttrPath读取urls属性并取第一个 URL这正是fetchurl为配合本命令而暴露的属性见下文读取outputHashMode若为recursive则自动开启解包模式读取name属性作为 store 路径名。有意思的是prefetchFile还被复用于新式命令nix store prefetch-fileprefetch.cc并支持--json输出 store 路径与 SRI 格式哈希——可见 1.11 的设计在新命令体系中被完整继承。1.4 配套设施fetchurl.nix中的urls属性为了让nix-prefetch-url -A能够工作内置取源表达式 src/libexpr/fetchurl.nix 专门暴露了urls [ url ]属性fetchurl.nix注释即写着 To make nix-prefetch-url work.。该表达式还通过outputHashMode if unpack || executable then recursive else flatfetchurl.nix把是否需要解包这一信息暴露给预取逻辑形成表达式与命令之间的契约。二、内置fetchurl支持 NAR 下载与解包简化 stdenv 引导1.11 中内置函数nix/fetchurl.nix现在支持下载并解包 NARNix Archive。这带来的直接收益是Nixpkgs 的 stdenv 引导bootstrap过程不再需要多次独立下载例如 Linux 上的单独 busybox 二进制、Darwin 上的 curl/mkdir/sh/bzip2 等所有这些文件可以被合并进单个 NAR并可选地使用xz压缩。从当前仓库的实现看src/libexpr/fetchurl.nix 中的builder builtin:fetchurlfetchurl.nix将下载工作委托给 Nix 内置的 fetchurl builderunpack参数控制是否解包executable参数控制是否保留可执行位两者任一为真时outputHashMode即为recursiveNAR 模式与nix-prefetch-url --unpack的语义完全一致。同时preferLocalBuild truefetchurl.nix保证取源不进入远程构建调度。这一改动从架构上统一了单文件下载与压缩归档下载两条路径使引导链更短、更不易受外部资源点故障影响。三、SHA-512 哈希支持1.11 起Nix 支持使用SHA-512校验固定输出派生fixed-output derivation并支持在builtins.hashString中使用builtins.hashString sha512 hello仓库证据builtins.hashString的实现在 src/libexpr/primops.cc通过RegisterPrimOp注册为__hashString按用户传入的算法字符串解析出HashAlgorithm后计算。固定输出派生侧src/libexpr/fetchurl.nix 也增加了sha512参数并在未显式指定hash时优先回退使用 sha512 → sha1 → md5 → sha256 的优先级链。哈希算法枚举在HashAlgorithm中统一管理这意味着用户既可以在builtins.hashString里、也可以在取源表达式的sha512参数里使用 SHA-512。四、构建确定性验证--option build-repeat、--check与-K4.1build-repeat构建 N1 次并强制比对新标志--option build-repeat N会让每次构建实际执行 N1 次。如果任何两轮构建的输出不一致该构建即被判定失败、输出路径不会注册为有效not registered as valid。其典型用途是验证构建的确定性build determinism。与此前已有的--check选项相比区别在于--check只是重复一次此前已成功的构建且一旦发现不确定性结果仍会被注册进数据库而build-repeat从源头阻止不确定性产物进入数据库——这对 Hydra 至关重要可确保非确定性构建不会进入二进制缓存对外发布。用法示例$ nix-build --option build-repeat 3即对每个派生执行 4 次构建并比对。4.2--check-K保留对照输出以便 diff当--check或build-repeat检测到两次运行结果不一致并且同时给出了-K--keep-failed时另一轮运行的输出会以store-path-check后缀的形式保留下来方便用diffoscope等工具深入调查不确定性来源。发布说明中的经典示例$ nix-build pkgs/stdenv/linux -A stage1.pkgs.zlib --check -K error: derivation ‘/nix/store/l54i8wlw2265…-zlib-1.2.8.drv’ may not be deterministic: output ‘/nix/store/11a27shh6n2i…-zlib-1.2.8’ differs from ‘/nix/store/11a27shh6n2i…-zlib-1.2.8-check’ $ diffoscope /nix/store/11a27shh6n2i…-zlib-1.2.8 /nix/store/11a27shh6n2i…-zlib-1.2.8-check … ├── lib/libz.a │ ├── metadata │ │ -1,15 1,15 │ │ -rw-r--r-- 30001/30000 3096 Jan 12 15:20 2016 adler32.o … │ │ rw-r--r-- 30001/30000 3096 Jan 12 15:28 2016 adler32.o上例中两份归档内adler32.o的时间戳元数据15:20 vs 15:28被 diffoscope 精准定位——这正是构建非确定性的典型来源之一构建时间被写入了产物。对照输出以-check后缀命名与原始输出路径一一对应极大降低了排查成本。4.3 当前仓库中的实现印记虽然 1.11 距今已久构建检查逻辑在演化后仍有清晰脉络可循构建模式bmCheck贯穿 src/libstore/build/derivation-building-goal.cc如buildMode bmCheck ? checking outputs of %s : ...derivation-building-goal.cc表示重复验证已有输出这一 1.11 引入的语义沿用至今bmCheck分支下验证逻辑在 src/libstore/build/derivation-builder-impl.cc 中实现并检查settings.keepFailed对应-K以决定是否保留失败输出需要特别说明的是build-repeat时代久远src/libstore/legacy-ssh-store.cc 中留有注释 buildRepeat hasnt worked for ages anyway说明该机制在后来的 store 接口演进中逐渐退居次要位置而--check路径则持续维护至今。读者在实践确定性问题排查时应以当前版本nix-build --check/nix-store --check的实际行为为准。五、其他改进5.1 改进的 FreeBSD 支持1.11 修复了若干 FreeBSD 平台问题。当前仓库中仍保留着完整的 FreeBSD 支持代码如 misc/freebsd/nix-daemon.in、scripts/install-freebsd-multi-user.sh以及 src/libstore/freebsd 与 src/libutil/freebsd 平台目录印证 FreeBSD 是 Nix 持续支持的官方平台。5.2nix-env -qa --xml --meta输出许可证信息nix-env -qa --xml --meta现在会在 XML 输出中打印软件包的许可证license信息。这为包管理审计、许可证合规扫描提供了机器可读的通道。5.3 二进制缓存并发连接数150 → 25二进制缓存替换器binary cache substituter使用的最大并行 TCP 连接数从 150 降到 25。官方发布说明给出两个理由一是避免激怒某些存在缺陷的 NAT 路由器broken NAT routers二是同时改善了整体性能表现。5.4 chroot 全面更名为 sandbox所有包含 chroot 的字符串被重命名为 sandbox。部分 Nix 选项随之改名旧名字仍然作为低优先级别名被接受。这一术语统一在后续版本中完全定型可从当前仓库的设置定义中直接看到别名痕迹src/libstore/include/nix/store/local-settings.hh 中sandboxMode设置项带有{build-use-chroot, build-use-sandbox}两个旧别名即 1.11 前后选项名的直接对应关系旧build-use-chroot在更早版本中还写作build-use-chroot的布尔开关新build-use-sandbox→ 最终定型为sandbox同一设置项还说明了沙箱语义Linux 上默认启用smEnabled构建在私有 PID、mount、network、IPC 与 UTS 命名空间中进行仅固定输出派生保留网络访问macOS 也受支持但需要以 root 配合 build users 使用local-settings.hh。配套的sandbox-paths选项旧别名build-chroot-dirs等支持targetsource语法将宿主路径挂载进沙箱甚至可以用?后缀容忍源路径不存在local-settings.hh。六、版本贡献者本版本汇集了社区大量贡献官方致谢名单包括Anders Claesson、Anthony Cowley、Bjørn Forsman、Brian McKenna、Danny Wilson、davidak、Eelco Dolstra、Fabian Schmitthenner、FrankHB、Ilya Novoselov、janus、Jim Garrison、John Ericson、Jude Taylor、Ludovic Courtès、Manuel Jacob、Mathnerd314、Pascal Wittmann、Peter Simons、Philip Potter、Preston Bennes、Rommel M. Martinez、Sander van der Burg、Shea Levy、Tim Cuthbertson、Tuomas Tynkkynen、Utku Demir 与 Vladimír Čunát。结语Nix 1.11 虽然自我定位为 bug 修复版本但其引入的从 Nix 表达式预取并打印哈希NAR 化引导下载SHA-512 支持以及重复构建强制比对 -check对照产物的组合拳为可复现构建实践奠定了坚实基础chroot → sandbox的术语统一则让 Nix 的隔离模型在文档与代码层面走向一致。读者若想深入探索可以继续阅读 src/nix/prefetch.cc、src/libexpr/fetchurl.nix 与 src/libstore/build 目录下的构建目标源码并结合当前 Nix 的nix store prefetch-file命令src/nix/prefetch.cc体验这套机制的现代形态。【免费下载链接】nixNix, the purely functional package manager项目地址: https://gitcode.com/gh_mirrors/ni/nix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Torchvision 内部代码同步脚本 fbcode_to_main_sync.sh 使用指南:将 fbsync 分支变更批量落地为开源 PR

Torchvision 内部代码同步脚本 fbcode_to_main_sync.sh 使用指南:将 fbsync 分支变更批量落地为开源 PR

计算机视觉深度学习图像处理数据集 【免费下载链接】vision Datasets, Transforms and Models specific to Computer Vision 项目地址: https://gitcode.com/gh_mirrors/vi/vision 点击查看 免费下载 本篇文章围绕 scripts/README.rst 所记载的唯一实用脚本 fbcode…

2026/9/21 12:01:54 阅读更多 →
Wasmtime 中的 Pulley:可移植字节码与快速解释器的设计剖析

Wasmtime 中的 Pulley:可移植字节码与快速解释器的设计剖析

Wasmtime 中的 Pulley:可移植字节码与快速解释器的设计剖析 【免费下载链接】wasmtime A lightweight WebAssembly runtime that is fast, secure, and standards-compliant 项目地址: https://gitcode.com/gh_mirrors/wa/wasmtime Pulley 是 Wasmtime 运行时…

2026/9/21 12:01:54 阅读更多 →
多阶段工作流编排实战:Babysitter 复杂开发流程高级教程完整拆解

多阶段工作流编排实战:Babysitter 复杂开发流程高级教程完整拆解

多阶段工作流编排实战:Babysitter 复杂开发流程高级教程完整拆解 【免费下载链接】babysitter Babysitter enforces obedience on agentic workforces and enables them to manage extremely complex tasks and workflows through deterministic, hallucination-fre…

2026/9/21 12:01:54 阅读更多 →

最新新闻

CANN ops-transformer FlashAttn 性能建模:D=256 下基本块 (M, N) 的选择与 Cube Bound 达成分析

CANN ops-transformer FlashAttn 性能建模:D=256 下基本块 (M, N) 的选择与 Cube Bound 达成分析

CANN ops-transformer FlashAttn 性能建模:D256 下基本块 (M, N) 的选择与 Cube Bound 达成分析 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-t…

2026/9/21 12:04:03 阅读更多 →
VSS横向扩展指南:如何把视频AI处理规模从单机扩展到生产级

VSS横向扩展指南:如何把视频AI处理规模从单机扩展到生产级

VSS横向扩展指南:如何把视频AI处理规模从单机扩展到生产级 【免费下载链接】video-search-and-summarization NVIDIA AI Blueprint for video search and summarization (VSS) is a GPU-accelerated reference architecture for building video analytics agents wi…

2026/9/21 12:02:56 阅读更多 →
MCP Python SDK 依赖注入实战:用 `Resolve` 让工具参数脱离模型幻觉

MCP Python SDK 依赖注入实战:用 `Resolve` 让工具参数脱离模型幻觉

MCP Python SDK 依赖注入实战:用 Resolve 让工具参数脱离模型幻觉 【免费下载链接】python-sdk The official Python SDK for Model Context Protocol servers and clients 项目地址: https://gitcode.com/gh_mirrors/pythonsd/python-sdk 在 MCP&#xff08…

2026/9/21 12:02:56 阅读更多 →
Foam for VS Code 深度指南:用 Markdown + Wikilinks 构建本地优先的个人知识库

Foam for VS Code 深度指南:用 Markdown + Wikilinks 构建本地优先的个人知识库

Foam for VS Code 深度指南:用 Markdown Wikilinks 构建本地优先的个人知识库 【免费下载链接】foam A personal knowledge management and sharing system for VSCode 项目地址: https://gitcode.com/gh_mirrors/fo/foam Foam 是一款运行在 VS Code 之内的…

2026/9/21 12:02:56 阅读更多 →
Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一

Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一

Nix 1.11 发布说明深度解读:确定性构建验证、Nix 表达式预取与沙箱命名统一 【免费下载链接】nix Nix, the purely functional package manager 项目地址: https://gitcode.com/gh_mirrors/ni/nix 导读 本文基于 Nix 官方发布说明 rl-1.11.md,系…

2026/9/21 12:01:54 阅读更多 →
Torchvision 内部代码同步脚本 fbcode_to_main_sync.sh 使用指南:将 fbsync 分支变更批量落地为开源 PR

Torchvision 内部代码同步脚本 fbcode_to_main_sync.sh 使用指南:将 fbsync 分支变更批量落地为开源 PR

计算机视觉深度学习图像处理数据集 【免费下载链接】vision Datasets, Transforms and Models specific to Computer Vision 项目地址: https://gitcode.com/gh_mirrors/vi/vision 点击查看 免费下载 本篇文章围绕 scripts/README.rst 所记载的唯一实用脚本 fbcode…

2026/9/21 12:01:54 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →