• Status: brain-dump

  • Last-Updated: 2024-10-19

Summary

During a package lifecycle, they become dead, deprecated or obsoleted. When a package is dead (too buggy, no upstream, security issues, etc), these tend to get removed from an archive. But for deprecated or obsoleted packages these imply a shorter or longer transition into something else.

Currently we use a combination of heuristics to mark these packages, where various tools use them but not always in the same way. These heuristics are:

Some of tools that make use of these heuristics are:

There are two main categories of these packages:

Proposal

Ideally we'd have a declarative way to denote these states. These could be a matter of stopping to rely on the Section and Description heuristics, leave the Section field as is, and then add a couple of new fields for the declarative purposes, such as an Superseded-by and Obsolete pair of fields.

The following is an example of how they could be used:

Package: liboldthing-dev
Section: libdevel
Priority: optional
Superseded-by: libnewthing-dev
Depends: liboldthing1
Description: library doing something (deprecated)
 This is a deprecated library that should no longer be used by new
 packages, it has been superseded by libnewthing, please switch to
 use that.

Package: oldthing
Section: admin
Priority: optional
Obsolete: yes
Depends: newthing-a | newthing-b, newthing-plugin
Description: empty transitional package obsoleted by something else
 This package can be safely removed once no other package depends
  on it.