Linux Package Manager

Understanding application management in GNU/Linux for Windows users

Once you have a base Operating System and default applications installed, it is quite common to add new applications and modify/remove existing programs. Here Windows and GNU/Linux follow different paradigms.

If you are coming from a Windows background of downloading and running .exe files, the Linux approach may seem like a dramatic culture shift. Tell the Package Manager to install software and it will automatically download the appropriate package from its configured software repositories, install it, and set it up – all without you having to click through wizards or hunt down .exe files on websites. Think of it like a mobile phone app store and installation process (except that they were there long before mobile phones).

Terminology
Package Manager and Installer
Managing applications
Managing dependencies
Package Manager commands
Package Manager caveats
Conclusion

Terminology

Installation: Process of copying application related files to specified locations on disk and maybe set some configuration information.

Repository: Central storage server for software packages. It’s like a mobile phone’s app store.

Package: Software distribution in the form of an archive file. It contains binaries (executable, dynamic libraries) to be installed and meta data (additional information) such as name, description, version, vendor, checksum and dependencies.

Dependencies: Run-time libraries required by the application. It’s a bit technical but important to understand to grasp the concept. See Application Software for a discussion on dependencies.

Package Manager: On Linux, it’s the tool that handles the process of installation, upgrade and removal of programs

Installer: On Windows, it’s the tool that installs (and sometimes uninstalls) programs.

Package Manager and Installer

Though an Installer and Package Manager seem to mean and do that same, there are differences.

Package Manager Installer
Shipped with the operating system each application to be installed
Handles all applications only the bundled application
Developed by one vendor (distro) multiple vendors

Managing applications

The operations required to manage applications are handled differently on Linux and Windows.

Linux Windows
Get application Central repository (package on media/download is possible) Installer on media/download
Files Package Installer
Format Archive Self extracting executable or proprietary format
Tool Package Manager System Add/Remove Programs
Add Package Manager command Installer (strangely not done in System Add/Remove Programs)
Remove Package Manager command Uninstaller or System Add/Remove Programs
Modify No equivalent Re-invoke the installer or System Add/Remove Programs
Upgrade to new version Package Manager command New Installer (manual uninstall may be required)
List installed programs Package Manager command System Add/Remove Programs
Checks Consistent Adhoc
User Interface Typically command line (some GUIs exist) Installer GUI

Managing dependencies

The topic of dependencies comes up more often on Linux than Windows, and for a good reason.

Linux has a clear separation between the application and its dependencies (.so files). Some of the files installed on a distribution are libraries which may provide functions to multiple applications. This ensures that there is only one copy of the library files even though multiple applications may use it.

When an application requires a specific library, the package which contains that library is a dependency. To properly install a package, the Package Manager must first satisfy its dependencies. The dependency information for an application is stored within the package file.

The Package Manager uses this dependency data to ensure that all of requirements for an application are met during installation. It automatically installs the packages for any dependencies not already present on your system. If a new application has requirements that conflict with existing software, the Package Manager aborts without making any changes to your system.

Windows doesn’t have such a strict policy for dependency management. So applications tend to include the necessary dependencies (.dll files) in the installers. Though this may seem like a simple alternative, it leads to duplication of libraries and sometimes conflicts which are hard to resolve.

Package Manager commands

Here are some typical commands to get you started. Many of the commands require the exact package name for the application. If you are unsure of the exact name, use the search command.

Operation CentOS Ubuntu
List repositories yum repolist grep ^deb /etc/apt/sources.list /etc/apt/sources.list.d/*
Update repositories cache yum makecache apt update
Find applications yum search apt search
apt search --names-only
Install yum install apt install
Remove yum remove apt remove
apt purge
Remove unused dependencies yum autoremove apt autoremove
Upgrade to new version yum update install --only-upgrade
Upgrade all applications yum update apt upgrade
List installed applications yum list installed apt list --installed

Package Manager caveats

Though the Package Manager provides consistency, it’s not perfect on GNU/Linux either.

Additional repositories

The operating system installation would have set up the default/standard repositories which will typically be sufficient to install the common applications. However, there may be some non-standard application(s) of interest. For this, you may need to include additional repositories for the Package Manager to find and install the requested application. Setting up these additional repositories is not hard, but it is different for each distribution.

Different Package Managers

Each distribution has its own Package Manager (with strange names), though the concept is the same. Adding to the confusion, broadly speaking, package managers come in two flavors, with and without dependency resolution. Unlike a Windows installer, a package archive does not have all the dependencies. But it will get resolved because they are available in the repository. That is why, you want to always use the Package Manager with dependency resolution. If for some reason, you are installing from a local package, the dependencies have to be handled manually.

Debian Ubuntu Fedora RedHat CentOS
Package file .deb .rpm
Package Manager without dependency resolution dpkg rpm
Package Manager with dependency resolution apt yum, dnf

Exact package name

You have to know the exact name of the package to install. There are some search facilities (e.g. apt search, yum search) to list the available applications. Often it is obvious, but sometimes, this list can be long and you need to figure out the right one.

Update and Upgrade

These similar sounding words are used in the context of getting newer versions of repositories and/or applications. But they have different meanings depending on the distribution.

Conclusion

As you can see, managing applications on GNU/Linux is much more streamlined and handled in a consistent manner. But if you are used to the inconsistent approach of Windows, you may actually find managing application on GNU/Linux challenging… until you understand. You may also notice that the process on Linux is very similar to the mobile ecosystem of app store. Windows now has a similar concept in Microsoft Store but it still hasn’t become the standard.