\myheading{Circular dependencies} As a by-product, my toy package manager can support circular dependencies. Open this example (deps.json) in the \href{\RepoURL/\CURPATH/files/test_circ}{test\_circ} folder: \begin{lstlisting} { "0": { "2016" : [[2,2005,2015]] }, "1": { "2018" : [[0,2001,2016]] }, "2": { "2015" : [[1,2006,2018]] } } \end{lstlisting} \begin{lstlisting} % python3 v1.py test_circ 0 get_first_solution initial_pkgs: [0] going to run solver SAT first solution: 0:2016; 1:2018; 2:2015; \end{lstlisting} Indeed, there are 3 implications: $0 \implies 1$; $1 \implies 2$; $2 \implies 0$. By the rules of boolean logic, that means, all 3 boolean variables would be simultaneously false or true. I'm not sure if they are handled in a real package manager like Ubuntu's 'apt'. But this feature is possible.