3.8. Essential packages
Essential is defined as the minimal set of functionality that must be available and usable on the system at all times, even when packages are in the “Unpacked” state. Packages are tagged essential
for a system using the Essential
control field. The format of the Essential
control field is described in Essential.
Since these packages cannot be easily removed (one has to specify an extra force option to dpkg
to do so), this flag must not be used unless absolutely necessary. A shared library package must not be tagged essential
; dependencies will prevent its premature removal, and we need to be able to remove it when it has been superseded.
Since dpkg will not prevent upgrading of other packages while an essential
package is in an unconfigured state, all essential
packages must supply all of their core functionality even when unconfigured. If the package cannot satisfy this requirement it must not be tagged as essential, and any packages depending on this package must instead have explicit dependency fields as appropriate.
Maintainers should take great care in adding any programs, interfaces, or functionality to essential
packages. Packages may assume that functionality provided by essential
packages is always available without declaring explicit dependencies, which means that removing functionality from the Essential set is very difficult and is almost never done. Any capability added to an essential
package therefore creates an obligation to support that capability as part of the Essential set in perpetuity.
You must not tag any packages essential
before this has been discussed on the debian-devel
mailing list and a consensus about doing that has been reached.