2025-07-25 –, Main Room 1 (Main stage)
This talk introduces Julia’s new SAT-based version resolver, which overcomes various issues with the old resolver while being faster, more scalable, more flexible, and guaranteeing optimal solutions. Since it constructs a SAT instance encoding all dependencies and conflicts between versions, it also provides a powerful tool for solving related resolution-like problems. We'll cover how this approach works and explore additional use cases beyond version resolution.
Resolving package versions is an NP-hard problem. Until recently, Julia used a heuristic solver based on belief propagation. This approach has worked pretty well over the years and we’re all indebted to it’s creator and maintainer, Carlo Baldassi. But it has some limitations. It isn’t guaranteed to find a solution if one exists, nor that solutions found are optimal. Additionally, it encodes assumptions about version numbers—major, minor, and patch—that limit its flexibility, and prevent it from correctly handling versions with build or prerelease tags. Finally, since it bakes in the preference ordering of versions, if we want to do something different, such as preferring the oldest versions, or preferring the current version, we can't straightforwardly do that. The new resolver addresses all of these issues and more.
Julia co-creator and JuliaHub co-founder.