
NixOS 强势回归, 尼克斯操作系统 25.11, 一个带来深刻变化的版本 无论是系统本身还是围绕它构建的庞大软件包生态系统,都存在着诸多问题。这款代号为“Xantusia”的系统现已发布,它为桌面、服务器、开发和云部署带来了诸多令人兴奋的新功能,但同时也存在相当多的不兼容性和已弃用的软件包,因此在更新之前应仔细检查。
在本文中,我们将看到 所有重要新闻 基于 NixOS 25.11 和 Nixpkgs 软件包库:关键更新包括 GNOME 49、LLVM 21 和 ROCm 6.3;对 Go、Rust、Node.js、PostgreSQL 和 Docker 进行了重大更改;重命名了服务;新增了模块;并增加了配置选项。我们还将讨论一个实际案例,该案例涉及编译 Discord 时遇到的代理问题,以及如何在新环境中解决这些问题。
NixOS 25.11 “Xantusia”:生命周期和发布数据
新稳定版本 NixOS 25.11 “Xantusia”现在可以通过稳定渠道在任何系统上安装和更新。此版本将获得为期七个月的安全补丁和错误修复,直至 2026 年 6 月 30 日,因此如果您是从之前的版本升级而来,我们强烈推荐您升级到此版本。
之前那个稳定的版本, NixOS 25.05 “Warbler”该版本将于 2025 年 12 月 31 日起正式过时,并将停止接收安全更新。如果您仍在使用 25.05 或更早的版本,现在是时候冷静地计划迁移到 25.11 了,请仔细阅读本文中将详细介绍的不兼容变更。
此次发布会也是一次展示…… 发展速度 在 NixOS 25.05 到 NixOS 25.11 版本之间,共有 2742 位贡献者参与其中,他们总共提交了不少于 59.430 次 Nixpacks 和系统配置相关的代码。这些数字背后包含了从细微的修复到边缘软件包的改进,再到关键发行版模块的重大重构等方方面面的贡献。
Nixpkgs:NixOS 25.11 中新增、更新和移除的软件包
Nixpkgs软件包集合,即 骨干 不仅是 NixOS,任何在 Linux 或 macOS 上使用 Nix 包管理器的系统,在这个周期都得到了大规模的维护。
一方面,已经存在 新增7002个包裹进一步扩展可用软件的范围。这包括从尖端开发工具到桌面应用程序、管理实用程序和科学软件等各种软件。
与此同时,该团队拥有 更新了 25.252 个现有软件包这确保了大多数常用软件都能更新到最新版本,尤其是那些包含安全补丁和性能改进的版本。这在需要保证可复现性并同时保持合理更新的环境中至关重要。
为了保持存储库的可管理性和安全性,Nixpkgs 采取了以下措施: 已移除 6338 个旧包裹 这些软件包要么已停止维护,要么已损坏,要么已在上游过时。在许多情况下,Nixpkgs 软件包树本身就存在直接的替代方案,但在其他情况下,为了避免安全或编译问题,这些替代方案被直接禁用。
NixOS 模块和配置选项
除了软件包之外,NixOS 还以其强大的声明式模块系统而著称。这一周期包括 新增107个模块这些更新增加了对新服务、守护进程、应用程序和系统配置的支持。它们还带来了 1778 个新的配置选项,进一步提高了系统描述的精细程度。
另一方面,也存在一些问题。 移除了 41 个模块 此外,还有 807 个配置选项已过时、失效或被更现代的替代方案取代。如果您要重复使用旧配置,最好在升级前查看弃用通知并相应地修改您的文件。
桌面环境的显著新特性:GNOME 49 “Brescia”
桌面用户面临的一大新功能是更新至 GNOME 49 “布雷西亚”此版本的桌面环境向 Wayland 迈出了决定性的一步,并取消了基于 X11 的会话,如果您维护了明确依赖于 Xorg 的旧配置或扩展,这可能是一个重大变化。
GNOME 49 包含 新的应用 此次更新包括重新设计的视频播放器、更新的文档查看器、重新设计的日历以及诸多用户体验方面的改进。如果您依赖任何高度特定的功能或复杂的扩展程序,建议您查阅官方的 GNOME 发行说明。
C 编译器和工具链:LLVM、GCC 和 CMake
在编译部分,NixOS 25.11 更新 LLVM 至版本 21对于使用 Clang 工具链的 C、C++ 或 Rust 开发者而言,这是一个重大的进步。此版本包含优化改进、新增支持的目标,以及对可能导致某些项目行为改变的警告信息的调整。
编译器 GCC 仍保留在第 14 分支这是一个已在生产环境中建立和测试过的版本。这使得与仍然依赖于该系列编译器的项目保持兼容性变得更加容易,避免了每次系统更新带来的破坏性变化。
就其本身而言, CMake 已更新至版本 4这可以为现代构建系统启用新功能,但也可能需要对使用过时语法或命令的项目进行调整。如果您有较旧的 CMake 模板,最好在完成迁移之前运行构建测试。
GPU、计算以及 ROCm 和 CUDA 的变化
对于那些使用 GPU 加速的人来说,分支 rocmPackages_6 升级到 ROCm 6.3而 rocmPackages_5 它已从树上移除。部分结构已重新调整: rocmPackages.rocm-thunk 它作为一个单独的软件包消失了,并被集成到…… rocmPackages.clr,而 rocmPackages.clang-ocl 他在2023年被AMD放弃后退休。
在平行下, CUDA 10 的官方支持已终止正如 NixOS 24.11 发行说明中已经提到的那样,仍然支持非常老旧硬件的用户应该考虑升级他们的 GPU,或者查看是否有其他制造商或后端维护的替代方案。
浏览器、代理和 Discord 编译问题
这个版本暴露出的一个实际问题是: 编译过程中使用代理用户描述了如何成功下载文件。 discord-0.0.116.tar.gz 从浏览器使用公司代理,但运行时 nixos-rebuild 使用 curl 下载反复失败并出现错误 curl: (35) Recv failure: Connection reset by peer 直到所有尝试都失败为止。
Nix错误信息表明 Discord压缩包下载失败 没有镜子,因此推导过程被破坏了。 discord-0.0.116.tar.gz.drv 进而,构建用户环境和整个系统。尽管日志显示了自动重试的警告,但诸如以下变量: https_proxy o all_proxy这表明构建沙箱内的运行时环境无法识别用户的网络配置。
在NixOS中, 标准代理环境变量 如果使用严格的沙箱机制,或者系统配置未将它们导出到构建中,则这些更改可能不会直接传播到分支。典型的解决方案是将 Nix 选项配置为: nix.extraOptions 包括 http_proxy, https_proxy 和公司,或者暂时禁用该机器的沙箱(不建议长期这样做),同时调整代理服务器以允许来自构建者 IP 的流量。
另一种选择是诉诸…… 已包含 Discord 的二进制缓存 或者其他有问题的软件包,从而导致 Nix 无法直接下载源文件。无论如何,这类网络错误在 25.11 这样的版本中会变得更加突出,因为该版本一次性更新了很多组件,可能会导致 URL 解析方式出现不同的行为。
网络、容器和 Web 服务
在网络和容器领域,NixOS 25.11 引入了重大变化。 Squid HTTP 代理升级至版本 7此版本包含一些不兼容的更改,例如移除了 ESI 功能。如需调整自定义设置,建议您查看 Squid 发行说明。
在编曲层面, containerd 更新至其 2.x 分支这会带来一系列行为上的变化。无论您是直接使用 containerd 还是将其作为平台组件,都必须仔细阅读 containerd 2.0 的文档,以避免在生产环境中出现意外情况。
在 Docker 世界中, docker_24 已从树中移除 因为它已停止支持,并且自 2024 年 6 月起存在已知漏洞。我们的想法是将安装推送到更新、维护更完善的 Docker 版本。
关于服务器和控制面板, NetBox 已更新至 4.2 分支。架构和行为层面均有重大变更。4.0.x 版本已从版本树中移除,建议用户在升级前查看 4.1 和 4.2 版本的更新通知。其他服务,例如: 马托莫 他们默认切换到使用版本 5(不再支持版本 4),并且该软件包被移除。 matomo-beta 因为现在很容易覆盖原有版本。 overrideAttrs.
卡夫卡也做出了一个重大飞跃: Apache Kafka 已更新至 4.0 分支。该版本已不再支持 ZooKeeper。所有安装都必须按照 Apache 基金会的指南迁移到 KRaft 模式。在 NixOS 上,这包括审查配置以移除对 ZooKeeper 的引用并调整代理部署。
NixOS 25.11 中发生变化或消失的服务、守护进程和应用程序
清单 已更名、更新不兼容或已停用的软件包和服务 这个周期很长,这表明他们愿意清理旧的或有问题的软件。
一些值得注意的例子: 海怪 它会消失,建议使用 coolercontrol 作为替代方案; opensmtpd-extras 因为它与 OpenSMTPD 7.6.0+ 不兼容,所以被移除,以便为特定软件包让路。 opensmtpd-table-*; 扎马德 它停止支持 MySQL,并强制用户按照官方指南迁移到 PostgreSQL。
在名字的世界里, Minetest 现在更名为 Luanti 为了反映上游的变化,但保留别名以避免立即造成中断。同样地, poac 变更至 cabinpkg, xdragon 变成龙之滴 (带 xdragon (作为别名) siduck76-st 它被重命名为 st-snazzy还有一些小写字母:字体 serious-sans 它之所以撤回,是因为上游已将名称更改为 Serious Shanns,但尚未打包。
其他项目则直接存档: gkraken、ephemeral、vocal、fluxus、sm64ex-coop、nexusmods-app、nodePackages.ganache 还有许多软件被标记为损坏、无人维护或不安全,并从 Nixpacks 中移除。在某些情况下,我们会推荐替代方案(例如, sm64coopdx 替换 sm64ex-coop,或 gnome-podcasts y kasts (替换元音)。
在消息传递和隐私环境中,数据包 signald、signaldctl 和 purple-signald 由于长期与 Signal 官方服务器和 Matrix 服务器不兼容,它们将被停用。 导管 由于开发者停止维护,该漏洞被标记为易受攻击漏洞。
热门应用程序的新版本和行为变化
除了消失之外,许多应用程序还会进行更新。 破坏兼容性的行为改变。 例如, Grafana Agent 及其模块 他们正在退出市场,转而支持已经拥有自己服务的 Grafana Alloy。 services.alloyGrafana 建议迁移到 grafana-alloy 并提供完成转让所需的文件。
显示器和面板的生态系统也在不断发展: Prometheus 版本升级至 3.x 分支附上官方移民文件, Kanata、Authelia、Helmfile、OpenPolicyAgent 许多其他软件包也更新到了主要版本,语法、配置格式和默认值都发生了变化。特别是 OPA 软件包。 rego.v1 现在是默认样式,将 v0 语法标记为继承,尽管仍然存在兼容模式。
桌面电脑领域也紧随其后: GIMP 3.0 显示为 gimp3, 草莓已更新至 1.2 版本 并放弃了 VLC 和 Qt5 后端(该软件包消失了) strawberry-qt5 以及一些使用 GStreamer/VLC 的选项), rofi 版本从 1.7.5 升级到 1.7.6,二进制插件的 ABI 也发生了变化,并且 tauon 7.9.0+ 您的数据库正在迁移到向后不兼容的架构,因此建议您先进行备份。 ~/.local/share/TauonMusicBox 在打开新版本之前。
在网页开发和JavaScript领域, nodejs_latest 演进至 24.x 系列被消除 nodejs_23 y nodejs_18并清理那些本不应该被设为全局的 Node 包(例如): webpack-dev-server, copy-webpack-plugin, expo-cli o create-react-native-app建议在项目层面安装这些工具。例如: pnpm 版本升级至 10 附带二级包装 pnpm_9 适用于需要兼容性的用户。
字体也进行了一些调整: nerdfonts 分为多个独立的软件包。 在命名空间下 nerd-fonts 字体安装路径也发生了变化,现在按字体类型分为不同的目录(<fontDirName>这迫使我们调整指向旧路由的配置。
内核、硬件和系统环境的变化
在系统层面,它已被放弃。 完全支持 32 位 Darwin仅维护现代平台。此外,三重配置 aarch64-darwin 符合 arm64-apple-darwin 标准符合苹果和LLVM的预期。
埃尔帕克特 tinycc 然后它将输出结果分成 dev, doc y lib制作 tinycc.out 它仅包含 tcc 二进制文件和交叉编译器。在 TPM 中, tpm2-pkcs11 它编译时不支持 abrmd 默认情况下,它优先使用内核资源管理器;如果您需要使用 abrmd 的变体,它也是存在的。 tpm2-pkcs11.abrmdNixOS 模块会自动根据以下情况进行选择: security.tpm2.abrmd.
在 udev 中,规则是 libjaylink 他们现在要求加入该组织。 jlink 而不是 plugdev这在 NixOS 中非常罕见。此外,也可以通过会话访问,因此如果您使用的是标准桌面,则影响有限。
道具 mkBinaryCache 它已现代化并开始使用 zstd 作为默认压缩
对于生成的二进制缓存您可以选择继续。 xz 通过 compression = "xz";这在大多数情况下可以提高二进制文件的生成和使用性能。
在网络选项中, networking.nat.externalIP 和 externalIPv6 的行为会发生变化:规则 networking.nat.forwardPorts 这些规则现在仅适用于发往明确指定 IP 地址的数据包。这可以防止意外重定向,但可能需要调整现有的 NAT 定义。
在文件系统管理中,定义 文件系统(例如 fileSystems."/") 使用 lib.mkDefault 设置。 来自 NixOS 模块,它允许一次性全部替换,但如果只覆盖单个属性而未指定具体属性,则会出错。 device否则,您可能会遇到类似这样的消息: No device specified for mount point '/'.
NixOS 25.11 的文本编辑、开发环境和各种实用程序
在 Emacs 生态系统中,NixOS 25.11 移除 Emacs 28 和 29标准版和适用于 Emacs 28 的 Macport 版本均已包含在内。适用于 Emacs 29 的 Macport 版本仍在维护中,但已针对已知漏洞打上了补丁。Racket 也进行了精简: 由于不安全,racket_7_9 已被撤回。推动使用 Racket 8,从而消除 激浪多年来,该公司一直依赖于那个无人维护的版本。
文本搜索引擎 binwalk 3.1.0 它用 Rust 重写,相关的 Python 模块变得不可用;个人账户工具 python3Packages.beancount 它上升至 3.1,与之前的系列保持不变。 beancount_2在电子邮件和命令行界面中, tldr 它改用 Python 客户端而不是 C 客户端,并且 喜马拉雅山 它更新至 1.1.0 版本,其中包含突破性更改,需要进行配置审查。
在各种工具中, nq 1.0 将 fq 和 tq 重命名为 nqtail 和 nqterm。, zf 0.10.2 它改变了处理Unicode和转义序列的方式,并且 ast-grep 删除该命令 sg 为了避免与 shadow-utils 发生冲突,同时仍然允许使用旧版兼容版本。 enableLegacySg = true;.
同时,标准对数函数族 nixLog* 它被重写,在调试级别和调用函数名称前加上前缀,重新引入了 nixLog 它作为一个无条件日志记录器,还会添加函数上下文。这使得调试复杂的派生和钩子函数变得更加容易。
最后,还有一些测试工具,例如 测试人员.shell检查 现在,如果未提供该属性,系统会发出警告。 name这在未来的版本中将成为强制性要求。在 Haskell 中, testTarget 被标记为已过时 有利于 testTargets它接受一个明确的目标列表,而不是一个以空格分隔的字符串。
NixOS 25.11 版本整合了大量更改,从 GNOME 49 桌面和大规模软件包更新到工具链、网络服务和兼容性策略的深度调整,使其成为任何希望保持 Nix 环境最新状态而不偏离其核心功能的用户的关键版本。 稳定性和可重复性 这是该项目的特点。