The Design Space of Lockfiles Across Package Managers
arXiv:2505.04834 · doi:10.1007/s10664-025-10789-w
Abstract
Software developers reuse third-party packages that are hosted in package registries. At build time, a package manager resolves and fetches the direct and indirect dependencies of a project. Most package managers also generate a lockfile, which records the exact set of resolved dependency versions. Lockfiles are used to reduce build times; to verify the integrity of resolved packages; and to support build reproducibility across environments and time. Despite these beneficial features, developers often struggle with their maintenance, usage, and interpretation. In this study, we unveil the major challenges related to lockfiles, such that future researchers and engineers can address them. We perform the first comprehensive study of lockfiles across 7 popular package managers, npm, pnpm, Cargo, Poetry, Pipenv, Gradle, and Go. First, we highlight the wide variety of design decisions that package managers make, regarding the generation process as well as the content of lockfiles. Next, we conduct a qualitative analysis based on semi-structured interviews with 15 developers. We capture first-hand insights about the benefits that developers perceive in lockfiles, as well as the challenges they face to manage these files. Following these observations, we make 5 recommendations to further improve lockfiles, for a better developer experience.
References in corpus (9)
- Reproducible Builds: Increasing the Integrity of Software Supply Chains
- Dependency Solving Is Still Hard, but We Are Getting Better at It
- Evolving Collaboration, Dependencies, and Use in the Rust Open Source Software Ecosystem
- I depended on you and you broke me: An empirical study of manifesting breaking changes in client packages
- An Empirical Study of Yanked Releases in the Rust Package Registry
- Build Optimization: A Systematic Literature Review
- BUMP: A Benchmark of Reproducible Breaking Dependency Updates
- Pinning Is Futile: You Need More Than Local Dependency Versioning to Defend against Supply Chain Attacks
- Breaking-Good: Explaining Breaking Dependency Updates with Build Analysis