Libsolv is a package dependency solver library that uses satisfiability algorithms to resolve complex package relationships across multiple Linux distributions and package management systems.
The tool addresses the core problem of determining which package versions can coexist in a system without violating dependency constraints. It employs a two-part approach: a dictionary-based storage system that efficiently indexes package and dependency metadata, and a satisfiability solver that applies well-researched algorithmic techniques to find valid package combinations. The solver records its decision tree to allow introspection into how it reached conclusions, and when dependencies cannot be satisfied, it generates suggestions to help users understand and resolve the conflict.
Libsolv is designed for package managers and distribution maintainers who need robust dependency resolution. It supports a broad range of package formats including rpm, deb, Arch Linux packages, Haiku, and apk, along with corresponding repository formats from each ecosystem. This multi-format support makes it suitable for projects that must work across different Linux distributions or package management systems. The library prioritizes finding the newest available packages and minimizes memory consumption by leveraging repository storage structures directly rather than loading everything into memory.
The project maintains steady development activity with regular commits addressing bug fixes and feature improvements. Work spans across core solver logic, support for additional package and repository formats, and enhancements to the decision-making process. The codebase receives ongoing maintenance to handle edge cases in dependency resolution and to optimize performance for large repository datasets.