Systems
NPM 中语义版本控制的大规模分析
Author
Venue
2023年采矿软件仓库(MSR)会议
Abstract
NPM 包仓库包含超过两百万个包,每周服务数十亿次下载。几乎每一个 JavaScript 应用程序都使用 NPM 包管理器从 NPM 仓库安装包。NPM 依赖于“语义化版本控制”(“semver”)方案来维护一个健康的生态系统,在此系统中,错误修复能够以最快速度可靠地传递给下游包,而破坏性变更则需要下游包维护者进行人工干预。 为了了解开发者如何使用语义化版本控制,我们构建了一个包含 NPM 上所有包所有版本的数据集,并分析了整个生态系统中的更新流向。我们为 NPM 构建了一个“时间旅行”依赖解析器,它使我们能够精确确定在不同时间点,每个依赖项会被解析为哪些版本。我们将分析进行分段,以便直接分析与安全相关的更新(即引入或修复漏洞的更新),并将其与生态系统的其余部分进行对比。 我们发现,当开发者正确使用 SemVer 时,在绝大多数情况下(90.09%),安全补丁等关键更新能够迅速流向下游依赖项;但由于开发者对 SemVer 版本约束和版本号递增规则的运用不够完善,这种情况并非总是发生。我们的研究结果对开发者和研究人员均具有重要意义。我们已将相关基础设施和数据集在开源许可下公开发布。
