We scan executables and libraries for the libraries they require, identifying the packages that provide these libraries, and ensuring that the correct versions are installed. When multiple packages can satisfy the same dependency, it also manages alternative dependencies by building a list of acceptable packages.
At its core, the approach relies on extracting symbol and version information from the shared libraries and packages, comparing them with the needs of executables, and resolving all possible package alternatives.
The process begins with identifying the shared libraries an executable needs. Executables in Linux are often dynamically linked to shared libraries, meaning they don't include the entire code of the libraries they use; instead, they rely on these external files to be present when the program runs.