在布鲁塞尔举行的 FOSDEM 2026 上,开发者兼研究者 Vlad-Stefan Harbuz 抛出了一个对大多数工程团队都不太体面的事实:我们自以为知道自己依赖了什么,很多时候其实并不知道。那些被 Python、Node.js 或其他语言包装起来的预编译二进制库,往往没有出现在项目的依赖清单里,却真实地参与了运行、承载了漏洞风险,也消耗着维护者的时间。

这件事真正重要的地方,不在于“依赖管理又多了一个术语”,而在于它戳穿了今天软件供应链治理里的一个假设——只要 SBOM、锁文件和漏洞扫描做全了,企业就能看清风险。Harbuz 讨论的“phantom binary dependencies(幽灵二进制依赖)”说明,现实没这么整齐:源码依赖可见,二进制依赖常常隐身,而医院系统、交通平台、互联网服务跑的正是这种混合栈。

幽灵依赖不是边角料,它是供应链台账里的缺口

Harbuz 的定义很直接:项目依赖了别人的预编译二进制,但这种关系没有被清楚记录。典型场景是 Python 调用 C 库,或者一个语言生态把底层动态库打包进 wheel、插件或扩展模块里。源码依赖通常写进 pyproject.tomlpackage.json,二进制依赖却可能只存在于构建产物中,开发者直到出漏洞、编译失败或跨平台崩溃时才发现它的存在。

这不是理论问题。论文《Insight: Exploring Cross-Ecosystem Vulnerability Impacts》给出过一个扎眼的数据:24.0% 的 PyPI 项目会传递性调用存在漏洞的 C 库 API。这个比例说明,语言层“看起来安全”并不等于底层库也安全。我的判断是,今天不少企业采购的软件成分分析工具,能把源码世界画得很漂亮,但一旦跨到 C/C++、系统动态库、dlopen() 这类边界,视野就开始发虚。

安全只是其中一半,另一半是钱该付给谁

Harbuz 把问题拆成两部分:安全和可持续性。前者好理解,依赖关系看不见,漏洞预警就会漏报;后者更少被讨论。现在企业开始接受“开源不能只白嫖”,Open Source Pledge 截至文中写作时已向开源开发者支付 6,879,498 美元,思路是按依赖关系给关键维护者付钱。问题在于,如果底层真正撑起业务的二进制包根本没被识别出来,资金分配就会天然偏向“台面上的包”,而不是最辛苦、最关键的那层维护者。

这也是原文里最有现实感的一点:看不见的依赖,不只意味着看不见的漏洞,也意味着看不见的人。很多团队愿意为“关键基础设施”买单,但财务要做预算、法务要审对象、工程团队要给出可追踪清单。没有记录,这些动作都落不下去。开源维护者的倦怠问题,最后不是停在 GitHub issue 区,而是会沿着供应链传导到企业运维和公共服务。

从 Python 到 Linux 发行版,谁在补这个洞,谁还补不上

围绕这个问题,行业已经有一些零散工具和标准,但离“可用的全景图”还差得远。

方案/项目主要作用现在能解决什么现实限制
auditwheel分析 Python wheel 的动态库需求在 Python 生态里识别部分二进制依赖输出不够友好,研究和自动化接口仍有限
PEP 770把 SBOM 引入 Python 包让包作者带上更完整的软件成分信息依赖作者配合,历史包不会自动补齐
PEP 725pyproject.toml 记录外部二进制依赖给“依赖可见化”一个标准入口标准有了,不等于生态会立刻采用
PEP 804把二进制依赖名映射到非 Python 注册表帮助跨生态定位真实包身份映射维护成本高,命名不统一是老难题
Sony ESSTRA在二进制里嵌入元数据提高供应链透明度更像基础设施工程,不是装个插件就能上
Fromager尝试让 Python 包完全从源码构建减少对预编译黑盒的依赖成本高、兼容性复杂,短期难成主流

横向看,这个问题并不只属于 Python。Node.js 生态这些年也频繁遇到原生模块和预编译二进制分发的麻烦,Sentry 甚至专门写过《How to publish binaries on npm》解释为什么“能发”不等于“好管”。Linux 发行版一侧也在补课,例如 UAPI 规范已经尝试在 ELF 文件里写入包来源和 dlopen() 元数据。公开说法是“透明度可以提升”,行业现实却是:语言包管理器、系统包管理器、容器镜像和企业制品库之间没有统一账本,责任边界也没有统一答案。

对谁影响最大:安全团队先头疼,开发者接着改流程

如果你在企业里负责平台工程、应用安全或合规,这个议题最现实的变化不是“多学一个概念”,而是要重新审视现有扫描流程到底覆盖了多少真实依赖。很多团队今天的动作是扫源码仓库、扫容器镜像、出 SBOM、接 CVE 预警;接下来更麻烦的一步,是确认 wheel、so、dll、插件和 FFI 调用背后到底连到了哪些包。

几类受影响的人,压力点并不一样:

  • 开发者会遇到构建流程变长,CI 里多出二进制依赖检查。
  • 安全团队会发现现有漏洞台账需要跨语言、跨包管理器重做映射。
  • 企业采购和开源项目办公室会发现“该支持谁”比想象中更难量化。
  • 普通用户短期感受不强,但长期会体现在补丁延迟、服务中断和事故概率上。

原文提出的方向,我基本认同:先把识别和记录工具做出来,再谈更大规模的治理。因为今天的关键障碍不是“没人意识到风险”,而是缺少一套足够低摩擦的采集方式。真正不那么重要的地方,是把所有希望押在单一标准上。PEP、SBOM、元数据规范都必要,但谁来填、谁来验、谁来持续维护映射表,这些成本才决定它能不能活下来。