Frequently Asked Question
What is a dependency, and how does the package manager resolve them?
A dependency is another package that must be installed for the one you want to actually
work. Almost nothing on a Linux system stands alone: nginx needs libc, openssl,
pcre, and a handful of other shared libraries; a Python application needs the right
Python interpreter and its modules. Each package's metadata declares its dependencies
with version constraints, for example "needs libssl3 (>= 3.0.0)", and the package
manager has to find a combination of versions that satisfies every constraint
simultaneously.
Modern resolvers (libsolv in dnf/zypper, apt's internal solver, pacman's resolver)
treat this as a Boolean satisfiability problem, very similar to a SAT solver. They
consider every available version of every candidate package, the conflicts between
them, and the user's "keep these as they are" hints, then find a solution or report
that none exists. When they fail, the error message usually names the conflict
directly, which is the starting point for unpicking the situation.