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.

Further reading and video