\myheading{Ubuntu Linux} Many Ubuntu Linux users see this often: \begin{lstlisting} % sudo apt install katomic Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: a2jmidid libsamplerate0:i386 pulseaudio-module-jack python3-cffi python3-jack-client python3-ply python3-pycparser qasmixer qastools-common zita-ajbridge Use 'sudo apt autoremove' to remove them. The following additional packages will be installed: kdoctools5 khelpcenter libgrantlee-templates5 libkf5kdegames-data libkf5kdegames7 libkf5newstuff-data libkf5newstuff5 libkf5newstuffcore5 qml-module-org-kde-newstuff The following NEW packages will be installed: katomic kdoctools5 khelpcenter libgrantlee-templates5 libkf5kdegames-data libkf5kdegames7 libkf5newstuff-data libkf5newstuff5 libkf5newstuffcore5 qml-module-org-kde-newstuff 0 upgraded, 10 newly installed, 0 to remove and 20 not upgraded. Need to get 7,175 kB of archives. After this operation, 28.3 MB of additional disk space will be used. Do you want to continue? [Y/n] \end{lstlisting} During installation of a package, other packages are to be installed - libraries, optional packages, etc. Also, 'apt' utility tries to find the most fresh packages. How an Ubuntu package is defined? \begin{lstlisting} Format: 3.0 (quilt) Source: katomic Binary: katomic Architecture: any Version: 4:20.08.0-1 ... Build-Depends: cmake (>= 3.5~), debhelper-compat (= 13), extra-cmake-modules (>= 5.30.0~), gettext, libkf5config-dev (>= 5.30.0~), libkf5coreaddons-dev (>= 5.30.0~), libkf5crash-dev (>= 5.30.0~), libkf5dbusaddons-dev (>= 5.30.0~), libkf5doctools-dev (>= 5.30.0~), libkf5i18n-dev (>= 5.30.0~), libkf5kdegames-dev (>= 4.9.0~), libkf5newstuff-dev (>= 5.30.0~), libkf5widgetsaddons-dev (>= 5.30.0~), libkf5xmlgui-dev (>= 5.30.0~), pkg-kde-tools (>> 0.15.15), qtbase5-dev (>= 5.7.0~) Package-List: katomic deb games optional arch=any ... \end{lstlisting} ( \href{http://mirrors.edge.kernel.org/ubuntu/pool/universe/k/katomic/katomic_20.08.0-1.dsc}{src} ) Here you see that the 'katomic' package requires the 'debhelper-compat' package of exact version 13, 'pkg-kde-tools' newer than version 0.15.15, 'gettext' package of unspecific version, etc... More on .dsc files file format: \href{https://www.debian.org/doc/debian-policy/ch-relationships.html}{1}, \href{https://www.debian.org/doc/debian-policy/ch-controlfields}{2}, \href{https://www.debian.org/doc/manuals/debmake-doc/ch05.en.html}{3}, \href{https://www.debian.org/doc/manuals/maint-guide/dreq}{4}. Almost all Linux distributions has some kind of this system. Haskell has 'Cabal' system \href{https://github.com/elben/sat/blob/master/sat.cabal}{example package}. This task is a good specimen of \ac{CSP}, which is NP-problem, of course.