NixCon 2025 参会报告 🐝

Michael Stapelberg 事件

摘要

一份来自瑞士拉珀斯维尔NixCon 2025的参会报告,详述了会议中的演讲和体验。

<p>我今年早些时候很喜欢NixOS的聚会,在聚会结束时,他们向大家介绍了NixCon 2025,今年将在瑞士举行,地点与上次相同,即位于拉珀斯维尔的<a href="https://www.ost.ch/">OST应用科学大学</a>,所以我决定去!在这篇参会报告中,我想向大家粗略介绍一下我对这次精彩会议的体验 :)</p> <p><em>标题中的蜜蜂是NixCon的内部玩笑 ;)</em></p> <h2 id="friday">星期五</h2> <p>我大约在周五早上九点半到达,那天下着雨,我匆匆从火车站赶到OST 1号楼,出示我的门票二维码,领取了会议胸牌和预先定制的姓名标签。定制标签上刻有你的名字,并附有强力磁铁,可以贴在衣服上:</p> <a href="https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/IMG_5775.jpg"><img srcset="https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/IMG_5775_hu_2ab24eefb66f32dc.jpg 2x,https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/IMG_5775_hu_5badb8e34d0d757f.jpg 3x" src="https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/IMG_5775_hu_f608afe3d2f3ee1.jpg" alt="普通和定制姓名标签" title="普通和定制姓名标签" width="600" height="450" style=" border: 1px solid #000; " loading="lazy"></a> <p>吃了一点东西后,我前往主报告厅参加开幕式。来自OST的<a href="https://www.ost.ch/en/person/farhad-d-mehta-8699">Farhad Mehta教授博士</a>以及整个NixCon组织团队,欢迎450名注册参会者参加第十届NixCon!我认出了许多来自Nix聚会的熟悉面孔,但当主持人问观众谁是第一次参加NixCon或第一次来瑞士时,很多人举起了手。</p> <p>我特别感谢Mehta教授促成了这样的聚会和活动!👏</p> <p>如果你在大学、学校或其他有场地的机构工作,不妨考虑主办一次聚会(定期或仅一次)!场地总是很难找,所以提供空间是对开源的一大贡献。</p> <h3 id="what-if-github-actions-were-local-first-and-built-using-nix">《如果GitHub Actions是本地优先并且基于Nix构建会怎样?》</h3> <p>当天的第一个技术演讲是《如果GitHub Actions是本地优先并且基于Nix构建会怎样?》,演讲者是Domen Kožar,他是<a href="https://cachix.org">cachix.org</a>的创始人,这是一个托管的Nix缓存。该演讲推介了<a href="https://cloud.devenv.sh/">cloud.devenv.sh</a>,这是一个基于Nix的CI解决方案(类似于GitHub Actions),使用<a href="https://devenv.sh/">devenv</a>。</p> <p>通过使用这个解决方案,你解决了无法轻松/完全在本地运行GitHub Actions的问题(是的,我们都知道<a href="https://github.com/nektos/act">act</a>),并且你可以(?)编写Nix配置而不是YAML配置。</p> <p>这个解决方案看起来不错,但我发现演讲有点缺乏条理,因为讲者在幻灯片之间跳来跳去。一个关键问题没有得到解答:你如何将这个自定义解决方案与你的GitHub项目集成?对我来说,偏离配置GitHub Actions的默认方式似乎不值得我的项目这样做。你的情况可能不同。</p> <p><a href="https://media.ccc.de/v/nixcon2025-56408-what-if-github-actions">→ 在media.ccc.de上观看录像(46分钟)</a></p> <h3 id="rewriting-the-hydra-queue-runner-in-rust">《用Rust重写Hydra队列运行器》</h3> <p>接下来是《用Rust重写Hydra队列运行器》,演讲者是来自<a href="https://helsinki-systems.de/">Helsinki Systems</a>的Simon Hauser,这是一家德国小型软件公司。<a href="https://github.com/NixOS/hydra">Hydra</a>是NixOS基础设施中负责调度构建的组件:当nixpkgs发生变化时,该组件运行构建,其结果最终会出现在<a href="https://cache.nixos.org">cache.nixos.org</a>上(Debian中的等价物是<a href="https://wiki.debian.org/buildd">buildd</a>)。</p> <p>Simon解释说,当前队列运行器中的瓶颈导致了基础设施的闲置:该项目拥有可用的机器,但无法充分利用。他概述了他们如何用设计良好的gRPC协议取代了陈旧的基于SSH的自动化。我的印象是有一群人参与了这个设计的开发和审查,这是一个健康项目的好迹象。</p> <p>遗憾的是,演讲中缺少了指标。如果能有一些图表来说明重写后的队列运行器有多好,那就太好了。</p> <p>目前,新的队列运行器已用于Nix社区构建,但尚未在NixOS本身的生成环境中使用。不过希望很快就能实现!</p> <p><a href="https://media.ccc.de/v/nixcon2025-56409-rewriting-the-hydra-que">→ 在media.ccc.de上观看录像(27分钟)</a></p> <h3 id="you-cant-spell-devshell-without-hell">&ldquo;You can&rsquo;t spell &ldquo;devshell&rdquo; without &ldquo;hell&rdquo;&rdquo;</h3> <p>这个演讲由来自<a href="https://flox.dev/">Flox</a>的Zach Mitchell主持,Flox是一个基于Nix的开发环境解决方案。到目前为止,我使用<code>nix-shell</code>或<code>nix develop</code>(参见<a href="/posts/2025-07-27-dev-shells-with-nix-4-quick-examples/">使用Nix的开发环境:四个快速示例</a>),所以我很好奇能从这次演讲中学到什么。</p> <p>Zach解释说,<code>nix-shell</code>和<code>nix develop</code>最初都是为了调试Nix包构建而编写的,而不是提供通用开发环境。对于用户来说,这表现为无法使用你喜欢的shell——<code>nix develop</code>只支持Bash。你可能读到过<code>nix develop -c exec &lt;shell&gt;</code>,但这是错误的,因为那样shell的RC文件会在Nix设置<strong>之后</strong>运行,可能会破坏部分设置。</p> <p>我学到的一个有趣的事情是,Nix垃圾回收器会扫描<code>/proc</code>,以避免删除正在运行的进程仍然需要的Nix存储路径。</p> <p>Zach提到了<a href="https://github.com/zmitchell/proctrace">https://github.com/zmitchell/proctrace</a>,这是一个基于bpftrace的分析器,用于跟踪fork/exec并生成时间线的甘特图语法。听起来很酷,但可惜现在似乎坏了……?太糟糕了。</p> <p><a href="https://media.ccc.de/v/nixcon2025-56410-you-cant-spell-devshell">→ 在media.ccc.de上观看录像(45分钟)</a></p> <h3 id="the-nix-binary-cache-and-aws">《Nix二进制缓存与AWS》</h3> <p>在本次炉边谈话中,Tarus Balog分享了他如何在从事开源20年后进入AWS,以及他的团队如何回馈社区。他们这样做的一个具体方式就是托管cache.nixos.org。</p> <p><a href="https://media.ccc.de/v/nixcon2025-56403-the-nix-binary-cache-an">→ 在media.ccc.de上观看录像(24分钟)</a></p> <h3 id="nix-based-development-environments-at-shopify-reprise">《Shopify基于Nix的开发环境(重演)》</h3> <p>来自Shopify的Josh Heinrichs分享了他们是如何(再次)采用Nix的,我认为像这样的真实企业采用故事非常有趣。</p> <p>总而言之,Shopify有一个<code>dev</code>命令(自2016年起),它提供声明式配置,然后分发到<code>apt</code>(Linux)或<code>homebrew</code>(macOS)。在第一次尝试迁移到Nix时,这项努力没有达到稳定状态(有些人还不能使用它),随后公司全面转向云开发,其中更简单的解决方案是“直接使用Ubuntu”。</p> <p>几年后,人们显然对云开发环境不太满意,有一天,Shopify首席执行官<a href="https://en.wikipedia.org/wiki/Tobias_L%C3%BCtke">Tobias Lütke</a>发现<a href="ht
查看原文
查看缓存全文

缓存时间: 2026/05/16 03:32

# NixCon 2025 参会报告 🐝 **来源**: https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/ ## 目录 - [星期五](#friday) - [“如果 GitHub Actions 是本地优先的并且用 Nix 构建会怎样?”](#what-if-github-actions-were-local-first-and-built-using-nix) - [“用 Rust 重写 Hydra 队列运行器”](#rewriting-the-hydra-queue-runner-in-rust) - [“你无法在不拼写‘devshell’的情况下避开‘hell’”](#you-cant-spell-devshell-without-hell) - [“Nix 二进制缓存与 AWS”](#the-nix-binary-cache-and-aws) - [“Shopify 基于 Nix 的开发环境(再述)”](#nix-based-development-environments-at-shopify-reprise) - [“我的第一个 Nix 恍然大悟时刻:新手的视角”](#my-first-nix-aha-a-newcomers-perspective) - [闪电演讲](#lightning-talks) - [星期六](#saturday) - [“关于自行车棚的争论:官方 Nix 格式化工具”](#the-bikes-have-been-shed-the-official-nix-formatter) - [“掌握 NixOS 集成测试:快速且健壮的多虚拟机测试高级技巧”](#mastering-nixos-integration-tests-advanced-techniques-for-fast-and-robust-multi-vm-tests) - [“何时不使用 Nix:使用外部配置与 SOPS Nix”](#when-not-to-nix-working-with-external-config-and-sops-nix) - [闪电演讲](#lightning-talks-1) - [星期日](#sunday) - [结论](#conclusion) 我很喜欢今年早些时候的 NixOS 聚会,在聚会结束时大家提到了 NixCon 2025,今年将在瑞士举行,地点就在同一个地方——拉珀斯维尔的**OST 应用科学大学** (https://www.ost.ch/),所以我决定去参加!在这份参会报告中,我想粗略地分享一下我对这个精彩会议的体验 :) *标题里的蜜蜂是 NixCon 的内部梗 ;)* ## 星期五 我在一个阴雨绵绵的星期五早上大约 09:30 到达,这意味着我得从火车站快速赶到 OST 1 号楼,出示我的门票二维码,并领取我预先订购的会议胸牌和定制姓名标签。定制款姓名标签上刻有你的名字,并配有一个强力磁铁,可以固定在衣服上: [普通与定制姓名标签](https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/IMG_5775.jpg) 随便吃了点东西后,我前往主报告厅参加开幕会议。来自 OST 的 **Prof. Dr. Farhad Mehta** (https://www.ost.ch/en/person/farhad-d-mehta-8699) 以及整个 NixCon 组织团队欢迎了 450 名注册参会者参加第十届 NixCon!我认出了许多来自 Nix 聚会的熟悉面孔,但当主持人询问谁是第一次参加 NixCon 或第一次来瑞士时,很多人举起了手。我特别想感谢 Mehta 教授促成了这些聚会和活动!👏 如果你在大学、学校或其他有房间可用场所的组织工作,可以考虑主办一次聚会(定期或仅仅一次也行)!场地总是很难找,所以提供空间是对开源的一大贡献。 ### “如果 GitHub Actions 是本地优先的并且用 Nix 构建会怎样?” 当天第一个技术演讲是由 **Domen Kožar** 带来的,他是 **cachix.org** (https://cachix.org/)(一个托管的 Nix 缓存)的创始人。这个演讲推介了 **cloud.devenv.sh** (https://cloud.devenv.sh/),它是一个基于 Nix 的 CI 解决方案(类似 GitHub Actions),使用了 **devenv** (https://devenv.sh/)。通过使用这个解决方案,你可以解决无法轻松/完全在本地运行 GitHub Actions 的问题(是的,我们都知道 **act** (https://github.com/nektos/act)),而且你还可以(?)编写 Nix 配置而不是 YAML 配置。这个解决方案看起来不错,但我发现演讲有点缺乏条理,因为演讲者在幻灯片之间跳来跳去。一个关键问题没有得到解答:如何将这个自定义解决方案与你的 GitHub 项目集成?对我而言,偏离配置 GitHub Actions 的默认方式似乎不值得。当然,你的情况可能不同。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56408-what-if-github-actions) 观看录制视频(46 分钟) ### “用 Rust 重写 Hydra 队列运行器” 接下来是来自 **Helsinki Systems** (https://helsinki-systems.de/)(一家德国小型软件公司)的 **Simon Hauser** 带来的演讲:“用 Rust 重写 Hydra 队列运行器”。**Hydra** (https://github.com/NixOS/hydra) 是 NixOS 基础设施中负责调度构建的组件:当 nixpkgs 发生变化时,这个组件会运行构建,其结果最终会出现在 **cache.nixos.org** (https://cache.nixos.org/) 上(相当于 Debian 中的 **buildd** (https://wiki.debian.org/buildd))。Simon 解释说,当前队列运行器中的瓶颈导致了基础设施浪费:该项目虽然拥有可用的机器,却无法充分利用。他概述了他们如何用一个设计良好的 gRPC 协议替换了笨拙的基于 SSH 的自动化方案。我的印象是有一群人参与了这个设计的开发和评审,这对于一个健康的项目来说是个好兆头。遗憾的是,演讲中缺少了指标数据。如果能有一些图表来展示重写后的队列运行器到底好多少,那就太好了。目前,新的队列运行器已经用于 Nix Community 的构建,但尚未在 NixOS 本身的生成环境中使用。不过希望很快就能实现! → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56409-rewriting-the-hydra-que) 观看录制视频(27 分钟) ### “你无法在不拼写‘devshell’的情况下避开‘hell’” 这个演讲由来自 **Flox** (https://flox.dev/) 的 **Zach Mitchell** 呈现,Flox 是一个基于 Nix 的开发环境解决方案。到目前为止,我使用 `nix-shell` 或 `nix develop`(参见 [使用 Nix 的开发 Shell:四个快速示例](https://michael.stapelberg.ch/posts/2025-07-27-dev-shells-with-nix-4-quick-examples/)),所以我很想知道能从这次演讲中学到什么。Zach 解释说,`nix-shell` 和 `nix develop` 最初都是为了调试 Nix 包构建而编写的,而不是为了提供通用的开发环境。对用户来说,这表现为无法使用你喜欢的 Shell——`nix develop` 只支持 Bash。人们可能会读到关于 `nix develop -c exec ` 的内容,但那是错误的,因为 Shell 的 RC 文件会在 Nix 设置**之后**运行,可能会破坏部分设置。我学到的一个有趣的事情是,Nix 垃圾回收器会扫描 `/proc` 以避免删除仍在运行进程使用的 Nix 存储路径。Zach 提到了 https://github.com/zmitchell/proctrace,这是一个基于 bpftrace 的剖析器,可以跟踪 fork/exec 并生成甘特图语法的时间线。听起来很酷,但不幸的是目前似乎坏了……太可惜了。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56410-you-cant-spell-devshell) 观看录制视频(45 分钟) ### “Nix 二进制缓存与 AWS” 在这个炉边谈话中,**Tarus Balog** 分享了他如何在开源领域工作 20 年后加入 AWS,以及他的团队如何想要回馈社区。他们做这件事的一种具体方式就是托管 cache.nixos.org。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56403-the-nix-binary-cache-an) 观看录制视频(24 分钟) ### “Shopify 基于 Nix 的开发环境(再述)” 来自 Shopify 的 **Josh Heinrichs** 分享了他们如何(再次!)采用 Nix,我认为这种真实世界的企业采用故事非常有趣。简言之,Shopify 有一个 `dev` 命令(自 2016 年起),它提供声明式配置,然后分派给 `apt`(Linux)或 `homebrew`(macOS)。在第一次尝试迁移到 Nix 时,这项工作没有站稳脚跟(有些人还不能使用它),随后公司全面转向云开发,在这种情况下更简单的解决方案是“直接用 ubuntu”。几年后,人们显然对云开发环境不太满意,有一天 Shopify 的 CEO **Tobias Lütke** (https://en.wikipedia.org/wiki/Tobias_L%C3%BCtke) 发现了 **devenv** (https://devenv.sh/),这是一个基于 Nix 的解决方案,与 Shopify 的 `dev` 非常相似。于是 Tobi 在自己的一个服务中采用了 devenv,并开始支持使用 Nix。这一次,他们在组织内投入了更多时间来成功推广,这意味着渐进式采用、让所有利益相关者参与进来等等。关键点在于,一个具体的、得到良好支持的用例可以成为采用的驱动力。一旦你的开发环境基于 Nix 解决方案,你就可以更容易地采用生态系统的其他部分。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56413-nix-based-development-e) 观看录制视频(19 分钟) ### “我的第一个 Nix 恍然大悟时刻:新手的视角” 与 Shopify 演讲类似,来自 ASML 的 **Kavisha Kumar** 分享了她如何在看到同事使用 `nix-shell` 获得一个干净开发 shell 后开始接触 Nix。Kavisha 在 ASML 花费了大量时间向其他人传授为什么以及如何使用 Nix。她分享了一些很好的比喻,通过电子游戏领域来解释 Nix 概念。我认为很多人对 Nix 感到兴奋,但很难将这种兴奋传达给其他人。Kavisha 向我们展示了一种对她有效的好方法。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56414-my-first-nix-aha-a-newc) 观看录制视频(19 分钟) ### 闪电演讲 当天剩余的时间被闪电演讲填满。来自 **Determinate Systems** (https://determinate.systems/) 的 **Cole Mickens** 解释了他们的下游发行版“Determinate Nix”当前正在交付哪些功能(这些功能将会向上游合并):懒加载树(评估 Flakes 的性能优化)、并行评估(将评估时间从 16 秒缩短到 7 秒)以及一个适用于 Mac 的原生 Linux 构建器。接下来是 Flake Schemas,我还没有了解过。 来自 **Numtide** (https://numtide.com/)(一家 Nix 和 DevOps 咨询公司)的 **Yvan Sraka** 展示了他如何用 NixOS 管理亲朋好友的 Linux 机器。他有自己的配置层,建立在 NixOS 之上,仅将系统作为基础使用。大多数实际程序通过 AppImage、Flatpak、**envfs** (https://github.com/Mic92/envfs) 和 **nix-ld** (https://github.com/nix-community/nix-ld) 来使用。后两者是用来在像 NixOS 这样的非 FHS 系统上运行基于 FHS 的程序(这些程序期望 `/usr/bin` 和其他标准位置存在)的解决方案。我以前听说过 nix-ld,但没听说过 envfs。 来自 **Nixcademy** (https://nixcademy.com/) 的 **Jacek Galowicz** 展示了如何使用 systemd-sysupdate 和 systemd-repart 在 NixOS 和 systemd 中实现 A/B 模式更新。很高兴看到这种技术越来越主流,因为我在 **gokrazy** (https://gokrazy.org/) 中也成功使用了 A/B 模式更新。 ## 星期六 星期六的天气好多了,所以我特意找了一个能欣赏苏黎世湖景的座位: [湖景!](https://michael.stapelberg.ch/posts/2025-09-21-nixcon-2025-trip-report/IMG_5754.jpg) ### “关于自行车棚的争论:官方 Nix 格式化工具” 在这个演讲中,来自 Tweag(也是 NixCon 的主要组织者之一!)的 **Silvan Mosberger** 解释了用于 .nix 文件的官方格式化工具是如何诞生的。我很高兴听到 `gofmt`(Go 语言的官方格式化工具)被提及为灵感来源。就像在其他语言生态系统中一样,引入统一的格式化消除了代码审查中由于编码风格差异而耗费的时间。不幸的是,负责格式化的团队没有复制 gofmt 成功的一个关键方面:gofmt 没有选项。正如著名的 Go 谚语所说: > Gofmt 的风格不是任何人的最爱,但 gofmt 却是每个人的最爱! 这意味着每个人都使用相同的风格比每个人都能表达自己的个人风格偏好更重要。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56375-the-bikes-have-been-she) 观看录制视频(20 分钟) ### “掌握 NixOS 集成测试:快速且健壮的多虚拟机测试高级技巧” 在这个两小时的工作坊中,来自 **Nixcademy** (https://nixcademy.com/) 的 **Jacek Galowicz**(他不仅是 Nix 教师,还是 NixOS 集成测试驱动的维护者)向我们展示了如何用几行 Nix 和 Python 编写复杂的集成测试。Jacek 展示了一个集成测试示例:一个 BitTorrent 服务,包括 tracker、客户端、防火墙和多个网络!nixpkgs 包含了超过 1000 个这样的集成测试,在你的笔记本上运行一个很容易。调试测试的各种方法看起来非常酷:使用 vsock 而不是端口转发,以及启用一个调试钩子,该钩子会让失败的测试挂起并等待调试。我认为这是一个很棒的概述,Jacek 是一位引人入胜的老师。我会推荐你们去上他的课! ### “何时不使用 Nix:使用外部配置与 SOPS Nix” **Ryota** 讲述了何时使用 Nix 以及何时不使用 Nix。例如,你可以用 Nix 管理你的 dotfiles(配置文件),也可以决定不用。鉴于我最近越来越多地将机器和配置迁移到 Nix,我发现自己在赞同这个演讲:理解你能从声明式或有状态管理配置中获得什么,以及哪种方法在什么时候更合适,这一点很重要。 → 在 media.ccc.de (https://media.ccc.de/v/nixcon2025-56381-when-not-to-nix-working) 观看录制视频(19 分钟) ### 闪电演讲 当天剩下的时间我都在参加闪电演讲,其中一些是赞助商演讲时段。我了解到以下内容(排名不分先后): - **Cloud Hypervisor** (https://www.cloudhypervisor.org/),一个基于 KVM 的虚拟机监控程序,类似 qemu,但用 Rust 编写。 - **nixbuild.net** (https://nixbuild.net/),一种按需付费的额外构建能力租赁服务。星期天我听到有人说他们公司正在使用 nixbuild.net,非常流畅。 - **NixCI** (https://nix-ci.com/),一个基于 Nix 的托管 CI 服务。所以,我们星期五听说的 cloud.devenv.sh 服务是这个服务的竞争对手。 - **Nix in the Wild** (https://flox.dev/nixinthewild/),是 Flox 的一项工作,他们进行 45-60 分钟的采访,讲述 Nix 成功的案例。这可能会帮助你说服组织中的其他人。 - **clan** (https://clan.lol/),一个车队管理解决方案。 - **NovaCustom** (https://novacustom.com/),一家一人笔记本电脑/PC 公司。这些笔记本电脑搭载 coreboot,并支持 NixOS。 - **ExpressVPN** 正在将其内部服务器设置(TrustedServer)从 Debian 迁移到 NixOS!每周在 105+ 个国家进行部署。 - **Cyberus**,一家德国公司,提供符合欧盟网络韧性法案义务的 NixOS LTS 版本。 - David 的 **styx** (https://github.com/dnr/styx) 项目,一种用于 NixOS 更新的更高带宽效率的下载机制。这使用了 **EROFS** (https://en.wikipedia.org/wiki/EROFS),看起来是 SquashFS 的一个有趣替代方案。

相似文章

LixCon 2026

Lobsters Hottest

LixCon 2026 会议资料现已上架 media.ccc.de,并提供播客订阅源。

将我的 NAS 从 CoreOS/Flatcar Linux 迁移到 NixOS

Michael Stapelberg

Michael Stapelberg 详细介绍了他将一台 NAS 从 CoreOS/Flatcar Linux 迁移到 NixOS 的过程,涵盖了从 Docker 容器逐步过渡到原生 NixOS 模块的步骤,并附有实际示例。

NixOS 与密钥管理

Lobsters Hottest

教程介绍 NixOS 的密钥管理选项,比较 sops-nix、agenix 和 ragenix 工具,并提供使用 sops-nix 进行加密密钥管理的实际示例。

我喜欢的 NixOS 声明式安装方式

Michael Stapelberg

一份关于使用 nixos-anywhere 等工具通过网络声明式安装 NixOS 的指南,重点强调在版本控制下管理配置文件。