This article needs additional citations for verification .(December 2022) |
A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. [1]
A package manager deals with packages, distributions of software and data in archive files. Packages contain metadata, such as the software's name, description of its purpose, version number, vendor, checksum (preferably a cryptographic hash function), and a list of dependencies necessary for the software to run properly. Upon installation, metadata is stored in a local package database. Package managers typically maintain a database of software dependencies and version information to prevent software mismatches and missing prerequisites. They work closely with software repositories, binary repository managers, and app stores.
Package managers are designed to eliminate the need for manual installs and updates. This can be particularly useful for large enterprises whose operating systems typically consist of hundreds or even tens of thousands of distinct software packages. [2]
An early package manager was SMIT (and its backend installp) from IBM AIX. SMIT was introduced with AIX 3.0 in 1989.[ citation needed ]
Early package managers, from around 1994, had no automatic dependency resolution [3] but could already drastically simplify the process of adding and removing software from a running system. [4]
By around 1995, beginning with CPAN, package managers began doing the work of downloading packages from a repository, automatically resolving its dependencies and installing them as needed, making it much easier to install, uninstall and update software from a system. [5]
A software package is an archive file containing a computer program as well as necessary metadata for its deployment. The computer program can be in source code that has to be compiled and built first. [6] Package metadata include package description, package version, and dependencies (other packages that need to be installed beforehand).
Package managers are charged with the task of finding, installing, maintaining or uninstalling software packages upon the user's command. Typical functions of a package management system include:
Computer systems that rely on dynamic library linking, instead of static library linking, share executable libraries of machine instructions across packages and applications. In these systems, conflicting relationships between different packages requiring different versions of libraries results in a challenge colloquially known as "dependency hell". On Microsoft Windows systems, this is also called "DLL hell" when working with dynamically linked libraries. [7]
Modern package managers have mostly solved these problems, by allowing parallel installation of multiple versions of a library (e.g. OPENSTEP's Framework system), a dependency of any kind (e.g. slots in Gentoo Portage), and even of packages compiled with different compiler versions (e.g. dynamic libraries built by the Glasgow Haskell Compiler, where a stable ABI does not exist), in order to enable other packages to specify which version they were linked or even installed against.
System administrators may install and maintain software using tools other than package management software. For example, a local administrator may download unpackaged source code, compile it, and install it. This may cause the state of the local system to fall out of synchronization with the state of the package manager's database. The local administrator will be required to take additional measures, such as manually managing some dependencies or integrating the changes into the package manager.
There are tools available to ensure that locally compiled packages are integrated with the package management. For distributions based on .deb and .rpm files as well as Slackware Linux, there is CheckInstall, and for recipe-based systems such as Gentoo Linux and hybrid systems such as Arch Linux, it is possible to write a recipe first, which then ensures that the package fits into the local package database.[ citation needed ]
Particularly troublesome with software upgrades are upgrades of configuration files. Since package managers, at least on Unix systems, originated as extensions of file archiving utilities, they can usually only either overwrite or retain configuration files, rather than applying rules to them. There are exceptions to this that usually apply to kernel configuration (which, if broken, will render the computer unusable after a restart). Problems can be caused if the format of configuration files changes; for instance, if the old configuration file does not explicitly disable new options that should be disabled. Some package managers, such as Debian's dpkg, allow configuration during installation. In other situations, it is desirable to install packages with the default configuration and then overwrite this configuration, for instance, in headless installations to a large number of computers. This kind of pre-configured installation is also supported by dpkg.
To give users more control over the kinds of software that they are allowing to be installed on their system (and sometimes due to legal or convenience reasons on the distributors' side), software is often downloaded from a number of software repositories. [8]
When a user interacts with the package management software to bring about an upgrade, it is customary to present the user with the list of actions to be executed (usually the list of packages to be upgraded, and possibly giving the old and new version numbers), and allow the user to either accept the upgrade in bulk, or select individual packages for upgrades. Many package managers can be configured to never upgrade certain packages, or to upgrade them only when critical vulnerabilities or instabilities are found in the previous version, as defined by the packager of the software. This process is sometimes called version pinning.
For instance:
Some of the more advanced package management features offer "cascading package removal", [10] in which all packages that depend on the target package and all packages that only the target package depends on, are also removed.
Although the commands are specific for every particular package manager, they are to a large extent translatable, as most package managers offer similar functions.
Action | Homebrew | apt | pacman | dnf (yum) | portage | zypper [13] | Nix | xbps [14] | swupd [15] | WinGet |
---|---|---|---|---|---|---|---|---|---|---|
Install package | brewinstall${PKG} | aptinstall${PKG} | pacman-S${PKG} | dnfinstall${PKG} | emerge${PKG} | zypperin${PKG} | nix-env-i${PKG} | xbps-install${PKG<nowiki>}</nowiki> | swupdbundle-add${PKG} | winget install %PKG% |
Remove package | brewuninstall${PKG} | aptremove${PKG} | pacman-R${PKG} | dnfremove--nodeps${PKG} | emerge-C${PKG} or emerge--unmerge${PKG} | zypperrm-RU${PKG} | nix-env-e${PKG} | xbps-remove${PKG<nowiki>}</nowiki> | swupdbundle-remove${PKG} | winget uninstall %PKG% |
Update all | brewupgrade | aptupgrade | pacman-Syu | dnfupdate | emerge-u-D--with-bdeps<nowiki>=</nowiki>y@world | zypperup | nix-env-u&&nix-collect-garbage | xbps-install-Su | swupdupdate | winget upgrade --all |
Update software database | brewupdate | aptupdate | pacman-Sy | dnfcheck-update | emerge--sync | zypperref | nix-channel--upgrade | xbps-install-S | swupdupdate--download or swupdupdate--update-search-file-index | winget list > NUL |
Show updatable packages | brewoutdated | aptlist--upgradable | pacman-Qu | dnfcheck-update | emerge-avtuDN--with-bdeps<nowiki>=</nowiki>y@world or emerge-u--pretend@world ( -D is shorthand for --deep and-u is shorthand for --update .) | zypperlu | nix-channel--upgrade&&\ nix-env-u&&\ nix-collect-garbage | ./xbps-srcupdate-check${PKG<nowiki>}</nowiki> (requires void-packages repository) | swupdupdate-s or swupdcheck-update | winget upgrade |
Delete orphans and config | brewautoremove&&brewcleanup | aptautoremove | pacman-Rsn$(pacman-Qdtq) | dnferase${PKG} | emerge--depclean | zypperrm-u | nix-collect-garbage-d | xbps-remove-of | swupdbundle-remove--orphans&&\ swupdclean--all | — |
Show orphans | brewautoremove--dry-run | — | pacman-Qdt | package-cleanup-q--leaves--exclude-bin ( -q is shorthand for --quiet .) | emerge-caD or emerge--depclean--pretend | zypperpa--orphaned--unneeded | — | xbps-remove-o | swupdbundle-list--orphans | — |
Remove package (and orphans) | brewuninstall${PKG}&&brewautoremove | aptautoremove${PKG} | pacman-Rs${PKG} | dnfremove${PKG} | emerge-c${PKG} or emerge--depclean${PKG} | zypperrm-u--force-resolution${PKG} | nix-env-e${PKG}&&nix-env-u | xbps-remove-R${PKG<nowiki>}</nowiki> | swupdbundle-remove${PKG}&&\ swupdbundle-remove--orphans | winget uninstall %PKG% |
The Arch Linux Pacman/Rosetta wiki offers an extensive overview. [16]
Package managers like dpkg have existed as early as 1994. [17]
Linux distributions oriented to binary packages rely heavily on package management systems as their primary means of managing and maintaining software. Mobile operating systems such as Android (Linux-based), iOS (Unix-based), and Windows Phone rely almost exclusively on their respective vendors' app stores and thus use their own dedicated package management systems.
A package manager is often called an "install manager", which can lead to a confusion between package managers and installers. The differences include:
Criterion | Package manager | Installer |
---|---|---|
Shipped with | Usually, the operating system | Each computer program |
Location of installation information | One central installation database | It is entirely at the discretion of the installer. It could be a file within the app's folder, or among the operating system's files and folders. At best, they may register themselves with an uninstallers list without exposing installation information. |
Scope of maintenance | Potentially all packages on the system | Only the product with which it was bundled |
Developed by | One package manager vendor | Multiple installer vendors |
Package format | A handful of well-known formats | There could be as many formats as the number of apps |
Package format compatibility | Can be consumed as long as the package manager supports it. Either newer versions of the package manager keep supporting it or the user does not upgrade the package manager. | The installer is always compatible with its archive format, if it uses any. However, installers, like all computer programs, may be affected by software rot. |
Most software configuration management systems treat building software and deploying software as separate, independent steps. A build automation utility typically takes human-readable source code files already on a computer, and automates the process of converting them into a binary executable package on the same or remote computer. Later a package manager typically running on some other computer downloads those pre-built binary executable packages over the internet and installs them.
However, both kinds of tools have many commonalities:
make install
.A few tools, such as Maak and A-A-P, are designed to handle both building and deployment, and can be used as either a build automation utility or as a package manager or both. [18]
App stores can also be considered application-level package managers (without the ability to install all levels of programs [19] [20] ). Unlike traditional package managers, app stores are designed to enable payment for the software itself (instead of for software development), and may only offer monolithic packages with no dependencies or dependency resolution. [21] [20] They are usually extremely limited in their management functionality, due to a strong focus on simplification over power or emergence, and common in commercial operating systems and locked-down “smart” devices.
Package managers also often have only human-reviewed code. Many app stores, such and Google Play and Apple's App Store, screen apps mostly using automated tools only; malware with defeat devices can pass these tests, by detecting when the software is being automatically tested and delaying malicious activity. [22] [23] [24] There are, however, exceptions; the npm package database, for instance, relies entirely on post-publication review of its code, [25] [26] while the Debian package database has an extensive human review process before any package goes into the main stable database. The XZ Utils backdoor used years of trust-building to insert a backdoor, which was nonetheless caught while in the testing database.
Also known as binary repository manager, it is a software tool designed to optimize the download and storage of binary files, artifacts and packages used and produced in the software development process. [27] These package managers aim to standardize the way enterprises treat all package types. They give users the ability to apply security and compliance metrics across all artifact types. Universal package managers have been referred to as being at the center of a DevOps toolchain. [28]
Each package manager relies on the format and metadata of the packages it can manage. That is, package managers need groups of files to be bundled for the specific package manager along with appropriate metadata, such as dependencies. Often, a core set of utilities manages the basic installation from these packages and multiple package managers use these utilities to provide additional functionality.
For example, yum relies on rpm as a backend. Yum extends the functionality of the backend by adding features such as simple configuration for maintaining a network of systems. As another example, the Synaptic Package Manager provides a graphical user interface by using the Advanced Packaging Tool (apt) library, which, in turn, relies on dpkg for core functionality.
Alien is a program that converts between different Linux package formats, supporting conversion between Linux Standard Base (LSB) compliant .rpm packages, .deb, Stampede (.slp), Solaris (.pkg) and Slackware (.tgz, .txz, .tbz, .tlz) packages.
In mobile operating systems, Google Play consumes Android application package (APK) package format while Microsoft Store uses APPX and XAP formats. (Both Google Play and Microsoft Store have eponymous package managers.)
By the nature of free and open source software, packages under similar and compatible licenses are available for use on a number of operating systems. These packages can be combined and distributed using configurable and internally complex packaging systems to handle many permutations of software and manage version-specific dependencies and conflicts. Some packaging systems of free and open source software are also themselves released as free and open source software. One typical difference between package management in proprietary operating systems, such as Mac OS X and Windows, and those in free and open source software, such as Linux, is that free and open source software systems permit third-party packages to also be installed and upgraded through the same mechanism, whereas the package managers of Mac OS X and Windows will only upgrade software provided by Apple and Microsoft, respectively (with the exception of some third party drivers in Windows). The ability to continuously upgrade third-party software is typically added by adding the URL of the corresponding repository to the package management's configuration file.
Beside the system-level application managers, there are some add-on package managers for operating systems with limited capabilities and for programming languages in which developers need the latest libraries.
Unlike system-level package managers, application-level package managers focus on a small part of the software system. They typically reside within a directory tree that is not maintained by the system-level package manager, such as c:\cygwin or /opt/sw. [29] However, this might not be the case for the package managers that deal with programming libraries, leading to a possible conflict as both package managers may claim to "own" a file and might break upgrades.
In 2016, Edgard Marx, a computer scientist from Leipzig University, coined the term Data Dependency Management [30] to refer to the systems that deal with the management of data. Data Dependency Management systems are designed to facilitate the deployment and management of data on the cloud, personal computers, or smart devices (edge). Data Dependency Management frameworks can be used to describe how the data was conceived, licensing as well as its dependencies. The concept of data dependency management comes from software package dependency management tools such as npm for JavaScript, gem for Ruby, and NuGet for .NET. Their rationale is to allow users to manage the software dependency on data, such as machine learning models for data-driven applications. They are useful to publish, locate, and install data packages. A typical example of a data dependency management frameworks are Hugging Face, KBox, [31] among others.
Ian Murdock had commented that package management is "the single biggest advancement Linux has brought to the industry", that it blurs the boundaries between operating system and applications, and that it makes it "easier to push new innovations [...] into the marketplace and [...] evolve the OS". [32]
There is also a conference for package manager developers known as PackagingCon. It was established in 2021 with the aim to understand different approaches to package management. [33]
A Linux distribution is an operating system that includes the Linux kernel for its kernel functionality. Although the name does not imply product distribution per se, a distro, if distributed on its own, is often obtained via a website intended specifically for the purpose. Distros have been designed for a wide variety of systems ranging from personal computers to servers and from embedded devices to supercomputers.
Slackware is a Linux distribution created by Patrick Volkerding in 1993. Originally based on Softlanding Linux System (SLS), Slackware has been the basis for many other Linux distributions, most notably the first versions of SUSE Linux distributions, and is the oldest distribution that is still maintained.
Advanced package tool, or APT, is a free-software user interface that works with core libraries to handle the installation and removal of software on Debian and Debian-based Linux distributions. APT simplifies the process of managing software on Unix-like computer systems by automating the retrieval, configuration and installation of software packages, either from precompiled files or by compiling source code.
dpkg is the software at the base of the package management system in the free operating system Debian and its numerous derivatives. dpkg
is used to install, remove, and provide information about .deb packages.
The Yellowdog Updater Modified (YUM) is a free and open-source command-line package-management utility for computers running the Linux operating system using the RPM Package Manager. Though YUM has a command-line interface, several other tools provide graphical user interfaces to YUM functionality.
Portage is a package management system originally created for and used by Gentoo Linux and also by ChromeOS, Calculate, and Funtoo Linux among others. Portage is based on the concept of ports collections. Gentoo is sometimes referred to as a meta-distribution due to the extreme flexibility of Portage, which makes it operating-system-independent. The Gentoo/Alt project was concerned with using Portage to manage other operating systems, such as BSDs, macOS and Solaris. The most notable of these implementations is the Gentoo/FreeBSD project.
deb is the format, as well as filename extension of the software package format for the Debian Linux distribution and its derivatives.
Arch Linux is an independently developed Linux distribution designed with a rolling-release model. The default Arch Linux installation is intentionally minimal, and is configured by the user during installation so they may add only what they require. Arch is the basis for a multitude of other distributions, such as Manjaro, EndeavourOS, and Parabola.
Dependency hell is a colloquial term for the frustration of some software users who have installed software packages which have dependencies on specific versions of other software packages.
Puppy Linux is a family of light-weight Linux distributions that focus on ease of use and minimal memory footprint. The entire system can be run from random-access memory (RAM) with current versions generally taking up about 600 MB (64-bit), 300 MB (32-bit), allowing the boot medium to be removed after the operating system has started. Applications such as AbiWord, Gnumeric and MPlayer are included, along with a choice of lightweight web browsers and a utility for downloading other packages. The distribution was originally developed by Barry Kauler and other members of the community, until Kauler retired in 2013. The tool Woof can build a Puppy Linux distribution from the binary packages of other Linux distributions.
VectorLinux, abbreviated VL, was a Linux distribution for the x86 platform based on the Slackware Linux distribution, originally developed by Canadian developers Robert S. Lange and Darell Stavem. Since version 7 the Standard Edition is also available for the x86-64 platform, known as VLocity64 7.
OpenEmbedded (OE) is a build automation framework and cross-compile environment used to create Linux distributions for embedded devices. The framework is developed by the OpenEmbedded community, which was formally established in 2003. OpenEmbedded is the recommended build system of the Yocto Project, which is a Linux Foundation workgroup that assists commercial companies in the development of Linux-based systems for embedded products.
CNR, or One-Click & Run, was a free one-click software delivery service that was created to make finding and installing Linux software easier. It assisted the user in finding and installing software on their computer, and sat dormant in the system tray when not in use.
A software repository, or repo for short, is a storage location for software packages. Often a table of contents is also stored, along with metadata. A software repository is typically managed by source or version control, or repository managers. Package managers allow automatically installing and updating repositories, sometimes called "packages".
The Debian build toolchain is a collection of software utilities used to create Debian source packages (.dsc
) and Debian binary packages from upstream source tarballs.
Nix is a cross-platform package manager for Unix-like systems, and a tool to instantiate and manage those systems, invented in 2003 by Eelco Dolstra.
RPM Package Manager (RPM) is a free and open-source package management system. The name RPM refers to the .rpm
file format and the package manager program itself. RPM was intended primarily for Linux distributions; the file format is the baseline package format of the Linux Standard Base.
Salix OS is a multi-purpose Linux distribution based on Slackware.
A delta update is a software update that requires the user to download only those parts of the software's code that are new, or have been changed from their previous state, in contrast to having to download the entire program. The use of delta updates can save significant amounts of time and computing bandwidth. The name "delta" derives from the mathematical science use of the Greek letter delta, Δ or δ to denote change.
{{cite web}}
: CS1 maint: unfit URL (link)