When the "3.0" solver is selected, apt-get and libapt-pkg do not respect APT::Ignore-Hold=1 (equivalently for the command line tools, --ignore-hold). The "internal" solver does respect it. The following does NOT work as expected (held packages are still considered held): $ apt-get -s upgrade --solver 3.0 -o 'APT::Ignore-Hold=1' $ apt-get -s upgrade --solver 3.0 --ignore-hold $ apt-get -s upgrade -o 'APT::Ignore-Hold=1' $ apt-get -s upgrade --ignore-hold The following DOES work as expected (held packages are considered not held for the purpose of this invocation): $ apt-get -s upgrade --solver internal -o 'APT::Ignore-Hold=1' $ apt-get -s upgrade --solver internal --ignore-hold The same behaviour is observed if I use libapt-pkg via the python binding. Note: I do not want apt to just fall back to the "internal" solver when "APT::Ignore-Hold" is in effect because I want the sometimes-superior resolution produced by the "3.0" solver. I want the "3.0" resolution with the ability to temporarily ignore the "held" status of packages.