The dpkg family of tools is used to install (.deb) packages and manage dependencies in Debian derived Linux distributions, such as Ubuntu and Mint.
Ranked in these QuestionsQuestion Ranking
Pro De facto package manager
One of the biggest pluses of APT is the vast majority of software applications available for it. It's often referred as the 'de facto package manager' because most websites that offer software automatically package them in Deb format.
Pro Supports searching for packages
If you are not sure about the name of the package you are looking to install, you can easily search for it using the search function provided by the apt tools:
apt-cache search $search_term
Pro Tab-completion of package names
By pressing <Tab> when writing a package name, for example
sudo apt-get install ge<Tab> it will be autocompleted by apt:
sudo apt-get install gedit.
Though it's worth noting that to activate this feature in Ubuntu you need to edit the
/etc/bash.bashrc file and remove the comments from these lines:
# enable bash completion in interactive shells #if ! shopt -oq posix; then # if [ -f /usr/share/bash-completion/bash_completion ]; then # . /usr/share/bash-completion/bash_completion # elif [ -f /etc/bash_completion ]; then # . /etc/bash_completion # fi #fi
Pro Synaptic finds all dependencies reliably
It's search is as simple or as detailed as you like, adding "Fixing" "Broken" "Upgradeable" the list goes on. Also manages PPA's on other software sources smartly.
Con Suboptimal dependency resolution
Apt has only a rather simple heuristic based resolver that can result in users getting package blockages when putting individual packages on hold.
Compared to many package managers, Apt is a very slow experience. From fetching packages, to caching them, to actually installing them, (and all the steps between).
Con Heavy for single-package repositories first install
Trusted source repositories are great (designed) for distributing large batches of interconnected software and updates. But, Trusted repositories are often used as the preferred way to distribute single 3rd party packages (and future updates), with the mandatory step of updating the entire software cache/dep-tree. These updates may be lengthy and therefore annoying for single package installation use. Notably, this annoyance can be avoided by the developer; One such example is the google-chrome deb package which updates you're trusted repertories as a post install step, though this is less transparent which can be it's own annoyance.
Con Counterintuitive CLI
For installing and removing you have "apt-get", for searching "apt-cache", for listing "dpkg". "dpkg" uses only switches whereas "apt-*" also commands, ... At least there is this "aptitude" frontend, but that's not a standard tool.
Con Very complicated and redundant packaging process
Filling out all requirements for .deb creation is such a pain that a lot of developers resort to packaging .deb files manually, because official packaging tools are too strict.
Con Lack of sanity checks.
One thing that apt appears to lack is transaction tests and post-install verification. Coupled with the aforementioned poor dependency resolver, this can lead to deep headaches.