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.