返回 2026-06-14
🛠 工具 / 开源

包管理周报:2026年6月13日This Week in Package Management: 13 June 2026

nesbitt.io·2026-06-13

本周包管理周报汇总了全球各大包管理器生态系统的最新动态。内容涵盖了主流编程语言包管理器的版本发布信息、关键的安全漏洞建议以及社区内的深度技术文章。通过这一汇总,开发者可以快速追踪依赖项管理工具的更新节奏与安全态势。这为维护项目依赖和跟进开源生态系统演进提供了极具价值的参考。

Andrew Nesbitt

本周摘要的第四期,内容基于包管理器的 OPML 订阅源集合以及我在 Mastodon 上发布或转发的所有内容。

安全

GitHub 宣布了 npm v12 即将推出的破坏性变更,预计将于 7 月发布。除非通过 11.16.0 在建议模式(advisory mode)下引入的 allowScripts 字段允许,否则 npm install 将停止运行依赖项的生命周期脚本,这在我上周写的安装脚本白名单文章中已有介绍。隐式的 node-gyp 构建也被阻止了,因此带有 binding.gyp 但没有安装脚本的包也需要像其他包一样获得批准。Git 依赖和远程 URL tarball 默认也停止解析,分别需要使用新的 --allow-git / --allow-remote 标志来启用。目前,所有这些功能在 npm 11.16.0+ 版本中均已通过警告形式发布。

uv audit 是一个新的预览版命令,用于扫描 Python 依赖项中的已知漏洞以及如项目被弃用等不良状态,它是 pip-audit 的 uv 原生替代方案。同一公告还介绍了一项实验性的恶意软件检查功能:通过设置 UV_MALWARE_CHECK=1,uv add 和 uv sync 可以在每次同步时根据 OSV 数据库查询先前解析的包。

pnpm 11.5.3(已反向移植到 10.34.2)强化了 packageManager 的引导路径。用于下载指定 pnpm 版本的 registry 和代理设置现在仅来自受信任的配置源,而不是仓库自身的 .npmrc 文件;并且在运行前会验证下载的二进制文件的 npm registry 签名,验证失败则拒绝运行。受仓库控制的配置无法再将环境变量扩展为 registry URL 或凭据值,并且 Node.js 下载会根据发布团队的 PGP 密钥检查其 SHASUMS256.txt 文件,而不是盲目信任配置的镜像源来自证安全。后续的一篇文章详细介绍了此环境变量变更所阻止的恶意仓库攻击场景。

对于 Private Packagist 客户,Composer 插件白名单现在可以在组织级别使用,这是 Packagist 供应链安全系列的又一篇文章。Composer 插件在安装和更新期间会运行代码,而现有的面向单个开发者的信任提示很容易被无意识地清除,或者被处于自动执行状态的编程代理(coding agent)误清除。

Arch 用户仓库(AUR)的 alvr 包被遗弃(orphaned),并立即被一名威胁行为者接管,该攻击者推送了携带信息窃取恶意载荷的更新。aur-general 邮件列表中的讨论帖追踪了此次接管事件以及导致该事件发生的“遗弃-接管”机制。

Podman 5.8.3 修复了 CVE-2026-44517,在该漏洞中,使用 Dockerfile 的 ADD 或 COPY 指令从恶意 git 仓库或 tar 归档文件中拉取内容时,可能会将文件写入构建上下文之外。

Ruby Central 宣布了一项“驻场安全工程师”(Security Engineers in Residence)计划,该计划由 Alpha-Omega 资助,旨在向维护者报告之前发现并验证广泛使用的 gems 中的漏洞,这沿用了 Python、Rust 和 PHP 基金会已经在运行的模式。我正在为该团队提供有关包生态系统安全的咨询。首次工作就发现了 Nokogiri 的 CSS 查询分词器(tokenizer)中存在的 ReDoS(正则表达式拒绝服务)漏洞,该漏洞在披露前已得到验证和修复。

版本发布

RubyGems 和 Bundler 4.0.14 是对上周 Cooldown 功能的后续跟进:Bundler 现在在从 lockfile 合并源时会保留每个源的冷却(cooldown)设置,并且在执行 bundle update 期间不再将锁定的版本排除在冷却机制之外。在 RubyGems 方面,gem 安装器会验证可执行文件和 bindir,并且显示的 gem 文本中会剔除 C1 控制字符。

gem.coop 命名空间已从测试版转为正式版,因此 Gemfile 可以指向特定发布者的源,例如 https://gem.coop/@kaspth。每个命名空间都通过 /cooldown 后缀增加了冷却期支持,不过在修复 bug 期间,该部分仍将保留在测试版域名上。

npm 11.17.0 新增了 min-release-age-exclude 配置,以使指定的包免受发布时间限制。allowScripts 策略现在应用于 prune、dedupe、uninstall、audit 和 link 操作,并且修复了 config Queryable setter 中的原型污染漏洞路径。

Dependabot Core 0.381.0 增加了对 Bundler 4 的支持,并在 Yarn Berry 的安全更新中禁用了 npm 最短发布时间限制,这与上周应用于 pnpm 的“安全修复绕过冷却期”模式相同。Go module 更新现在会遵循 GONOPROXY 和 GONOSUMDB 设置。

mise 2026.6.3 在其最短发布时间设置中增加了 excludes 选项,以便冷却策略可以豁免特定工具,此外还新增了可选的 auto_env 功能,它可以根据检测到的操作系统和架构来激活感知平台的配置和锁文件。2026.6.5 修复了信任绕过路径,防止不受信任项目的 mise.toml 或 mise-tasks/ 目录在用户批准前运行代码,同时将 credential_command 设为仅限全局使用,从而防止检出的代码仓库通过它执行任意 shell 命令。

Flatpak 1.18.0 通过 DRI 设备权限开放了 AMD 的计算接口(/dev/kfd),在 flatpak update 的输出中打印失败原因,并加快了启动时的 fish shell 集成速度。

Homebrew 6.0.0 增加了 tap 信任机制,要求在机器上运行第三方 tap 的 Ruby 代码前必须获得明确批准。该版本还提供了一个更小的默认内部 JSON API、Linux 上的沙盒机制,以及通过 brew bundle 并行安装 formula 的功能。同一版本还解决了三个安全公告:POST 下载策略中的 HTTPS 到 HTTP 重定向绕过、macOS pkg postinstall 中通过 Git hooks 执行 root 代码,以及 macOS 安装程序信任用户可控的 plist 文件。brew bundle 还增加了对 npm、krew 和 winget 的支持,现在在清理期间移除软件包之前会进行提示。我提交的一个 PR 为 brew info --json 和 formulae.brew.sh API 增加了 patches 键,以便 SBOM 生成器和漏洞工具能够查看每个 formula 在上游基础上应用了哪些补丁。

Deno 2.8.3 在 dependency 和 registry 子命令中支持了 --env-file 参数,并在 fetch 遇到不受信任的证书时提示使用 DENO_TLS_CA_STORE。

同期发布的还有:pixi 0.70.2、Mamba 2.8.1、uv 0.11.21、Chocolatey 2.7.3、sbt 2.0.0-RC16、Gradle 9.6.0-RC2、Conan 2.29.1、Helm 4.2.1、Helm 3.21.1、pnpm 11.6.0、Homebrew 6.0.1、Windows Package Manager 1.29.250、Docker Engine 29.6.0-rc.1、Podman 6.0.0-RC1、Verdaccio 7.0.0-next-7.21、Renovate 43.220.0。

文章推荐

《我们正在失去什么:AI 与开源世界里隐形的新人》(Mara Averick,stdlib 博客)一文指出,新人第一次提交生涩的 issue 或 pull request 时所产生的摩擦,正是社区发现并欢迎新贡献者的方式;而现在,AI 辅助在任何人察觉之前就已经抹平了这种摩擦。

《我们必须改变安全规则》(Josh Bressers)一文主张,应有意识地去选择停止某些安全工作,而不是让任务随机掉入缝隙中被遗忘。

《展示开源工作价值的战略性方法》(Dawn Foster)汇集了她一年来的相关文章和演讲,集中探讨了如何向管理层展示开源工作的价值。

The Guix Nix Abomination:在 Nix 中利用 Guix derivations(Farid Zakaria)将 Guix derivation 注册到 Nix 存储中并由 Nix 进行构建,这表明尽管这两个工具相互竞争,但在底层共享相同的 derivation 机制。

《Nix flakes vs Guix》深入探讨了为什么 Guix 中没有与 flake 完全对等的单一功能:flakes 将多个关注点打包进一个特性中,而 Guix 则通过独立且可组合的工具来覆盖相同的功能领域。

《不安全的代码补全是一种漏洞吗?》(Seth Larson)发现 PyCharm 的代码补全功能会建议使用 CERT_NONE 和抑制警告的样板代码,并指出对于系统性的不安全建议,CVE 是一种错误的应对机制,尽管供应商仍应从源头修复这些问题。

Helm v3 的生命周期终结(EOL)将 2026 年 9 月 9 日定为最终的特性发布日期(仅限于 Kubernetes 客户端库更新),并将 2027 年 2 月定为安全补丁的截止日期。现有的 Helm 3 发行版可由 Helm 4 管理,无需重写 chart。

《减少软件复用》(Simon Heath)主张将所有依赖项直接内置(vendoring)到你自己的代码库中,以此作为供应链的防火带。其基本原理在于,自动拉取步骤正是让投毒的发布版本以 CI 速度蔓延的罪魁祸首,而放弃传递性去重(transitive dedup)是为切断此风险而付出的值得的代价。

论文

《当 LLM 虚构 Rust Crates 时:幻觉模式与缓解措施的实证研究》(Zheng 等人,arXiv)是对 LLM 生成的 Rust 代码中 crate 幻觉现象的首次大规模研究,其数据集基于 Stack Overflow 和 GitHub 任务构建,而非早期包幻觉研究所评估的 Python 和 JavaScript 生态系统。

《Skilldex:一种具有基于分层作用域分发的智能体技能包管理器与注册表》(Saha 等人,arXiv)提出了一种包管理器与注册表的设计方案,旨在通过带有作用域的命名空间来分发智能体技能。

其他

《深入 PyPI:Maria Ashna 谈如何支持 Python 包索引》是一期《Behind the Commit》访谈,探讨了运营 PyPI 的日常工作。

《修复 Fedora 的打包流水线》是一期 Fedora Podcast 节目,邀请了 Copr 构建服务的 Jakub Kadlčík 探讨 RPM 打包工具。

《AI 对开源软件开发的影响》是由 Mike McQuaid 组织的一场讨论,他与五位开源从业者共同探讨了 AI 辅助工具为这些技术背后的社区和项目带来了哪些改变。

Sustain 播客第 289 期邀请了 Courtney Miller,探讨了软件废弃、维护者倦怠问题,以及 AI 工具对项目可持续性带来的改变。

两种版本控制方案:PaceVer 将面向用户的应用版本格式化为 MARKETING.NATIVE.OTA,根据发布渠道(是缓慢的商店审核二进制文件,还是快速的无线更新)来递增版本号。Kelvin 版本控制(Devine Lu Linvega)则使用开尔文温度向绝对零度倒数的方式来计算版本号,当达到绝对零度时,软件将被冻结,不再会有新的版本发布。

git-pkgs

我已为 proxy 打上 v0.5.0 标签。

下周的链接请发送至 @[email protected]。

需要完整排版与评论请前往来源站点阅读。