Package Managers 脿 la Carte: A Formal Model of Dependency Resolution
Package managers are legion. Every programming language and operating system
has its own solution, each with subtly different semantics for dependency
resolution. This fragmentation prevents multilingual projects from expressing
precise dependencies across language ecosystems; it leaves external system and
hardware dependencies implicit and unversioned; it obscures security
vulnerabilities that lie in the full dependency graph.
We present the Package Calculus, a formalism for dependency resolution that
unifies the core semantics of diverse package managers. Through a series of
formal reductions, we show how this core is expressive enough to model the
diversity that real-world package managers employ in their dependency
expression languages. By using the Package Calculus as the intermediate
representation of dependencies, we enable translation between distinct package
managers and resolution across ecosystems.