你的依赖树多深?对 10 个包生态系统中依赖放大现象的实证研究
摘要
现代软件开发依赖包生态系统,其中单个声明依赖可以拉入许多额外的传递依赖。这种依赖放大现象(定义为传递依赖数与直接依赖数之比),对软件供应链安全具有重大影响,但跨生态系统的依赖放大模式尚未进行大规模比较。我们对 10 个主要生态系统中的 500 个项目进行实证研究,包括面向 Java 的 Maven Central、面向 JavaScript 的 npm Registry、面向 Rust 的 crates io、面向 Python 的 PyPI、面向 .NET 的 NuGet Gallery、面向 Ruby 的 RubyGems、面向 Go 的 Go Modules、面向 PHP 的 Packagist、面向 Swift 和 Objective C 的 CocoaPods 以及面向 Dart 的 Pub。我们的分析显示,Maven 的平均放大倍数为 24.70 倍,相比之下 Go Modules 为 4.48 倍,npm 为 4.32 倍,CocoaPods 为 0.32 倍。我们发现 45 项成对比较中有 22 项显示出显著差异(具有大效应),挑战了 npm 因其大量小型专用包而被假设为最高放大率的观念。我们观察到 28% 的 Maven 项目超过 10 倍放大,这表明这是一种系统性模式而非孤立的异常,相比之下 RubyGems 为 14%,npm 为 12%,而 Cargo、PyPI、Packagist、CocoaPods 和 Pub 的比例为零。我们将这些差异归因于生态系统设计选择,例如依赖解析行为、标准库完整性以及平台限制。我们的发现表明应采用特定生态系统的安全策略,包括针对 Maven 环境的系统性审计、针对 npm 和 RubyGems 的针对性异常检测,以及继续维持当前针对控制型放大生态系统的实践。我们提供了包含数据和分析脚本的完整复现包。
引用
@article{arxiv.2512.14739,
title = {How Deep Does Your Dependency Tree Go? An Empirical Study of Dependency Amplification Across 10 Package Ecosystems},
author = {Jahidul Arafat},
journal= {arXiv preprint arXiv:2512.14739},
year = {2025}
}