✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Package Relationship Metadata

Package Relationship Metadata defines dependencies between Linux packages, ensuring stable system operations through structured metadata.

Package Relationship Metadata defines the structured information contained within a software package that describes its dependencies, conflicts, provisions, and recommendations relative to other packages. This metadata enables package management systems to perform accurate installation, updating, and removal operations by understanding how packages interact with each other and ensuring system consistency.


Dependency Relationships

Dependency relationships specify which packages must be present for a given package to function correctly. These relationships ensure that all necessary components are available before or when a package is installed.

Requires

The Requires field lists packages that are mandatory dependencies. The package manager will refuse to install or upgrade the package unless all these required packages are already installed or will be installed simultaneously. This relationship ensures the package operates correctly by providing essential libraries, tools, or services.

Example:

Requires: libssl.so.1.1, libc6 >= 2.27

Depends

While often used interchangeably with Requires, some systems distinguish Depends as a stronger or more explicit form of dependency. It generally implies that the package cannot function at all without the specified packages. The package manager uses this to enforce strict installation order.

Pre-Depends

Used primarily in Debian-based systems, Pre-Depends is a stronger dependency that must be satisfied before the package itself is unpacked. This ensures critical dependencies are configured before the package installation proceeds, avoiding broken states during installation.


Conflict Relationships

Conflict metadata declares packages that cannot coexist with the current package. This prevents installation of incompatible or redundant software, which might cause file overwrites, service clashes, or inconsistent system states.

Conflicts

The Conflicts field lists packages that should not be installed simultaneously. If a conflict is detected, the package manager will refuse to install the package or remove the conflicting package first.

Example:

Conflicts: old-package, conflicting-tool < 2.0

Provision Relationships

Provision metadata allows a package to declare that it satisfies a virtual or generic package name or feature, enabling alternative packages to fulfill the same dependency.

Provides

The Provides field lists virtual packages or features the package offers. This feature enables multiple packages to act as interchangeable implementations of the same functionality, allowing flexibility in dependency resolution.

Example:

Provides: mail-transport-agent

Recommendation and Suggestion Relationships

These relationships provide softer guidance on package installation, indicating supplementary or optional packages that enhance functionality but are not strictly required.

Recommends

Recommends lists packages that are strongly suggested for installation alongside the package to improve usability or performance. Package managers often install these by default unless explicitly disabled.

Suggests

Suggests lists packages that offer optional features or enhancements but are less critical than recommended packages. These are typically not installed automatically.


Version and Architecture Constraints

Package relationship metadata often includes version and architecture qualifiers to specify precise compatibility requirements.

Version Constraints

Dependencies and conflicts can specify version ranges using operators such as =, >=, <=, <, > to ensure compatibility with specific package versions.

Example:

Depends: libfoo (>= 1.2), libbar (< 2.0)

Architecture Constraints

Some relationships apply only on specific hardware architectures or operating system variants, allowing packages to declare relationships conditionally.

Example:

Conflicts: libexample [amd64]

Role in Package Management Systems

Package relationship metadata is essential for:

  • Dependency Resolution: Automatically determining and installing all required packages.
  • Conflict Avoidance: Preventing incompatible packages from coexisting.
  • Upgrade Safety: Ensuring that updates do not break existing dependency chains.
  • Feature Flexibility: Allowing alternative packages to satisfy the same needs via provisions.
  • Optional Enhancements: Suggesting supplementary packages to improve user experience.

By encoding these relationships, package managers can maintain system integrity, minimize user intervention, and optimize software installation and maintenance workflows.


Examples in Common Package Formats

RPM (Red Hat Package Manager)

  • Requires: Defines required packages.
  • Conflicts: Defines conflicting packages.
  • Provides: Lists virtual capabilities.
  • Obsoletes: Specifies packages replaced by this one.
  • Recommends and Suggests: Less commonly used in RPM but supported in some variants.

DEB (Debian Packages)

  • Depends: Mandatory package dependencies.
  • Pre-Depends: Stronger dependency before unpacking.
  • Conflicts: Declared conflicting packages.
  • Provides: Virtual package names.
  • Recommends and Suggests: Recommended and optional packages.

Summary of Package Relationship Metadata Fields

Relationship TypePurposeEffect on Package Manager Behavior
Requires / DependsMandatory dependenciesMust be installed before or with the package
Pre-DependsCritical dependencies before unpackingEnsures dependencies configured first
ConflictsIncompatible packagesPrevent simultaneous installation
ProvidesVirtual package names or featuresAllows alternatives to fulfill dependencies
RecommendsStrongly suggested supplementary packagesInstalled by default unless overridden
SuggestsOptional enhancementsNot installed automatically, user discretion

This metadata forms the backbone of package dependency management, enabling reliable software ecosystems through explicit, machine-readable declarations of inter-package relationships.