Reducing the Essential set
The Essential:yes set poses problems in scenarios where size is limited (such as minimal containers or chroots), or when bootstrapping a distribution. It also makes some problems related to dependencies harder as these are implicit and cannot change semantics.
Packages can either be moved out of the pseudo-essential set or they can be marked as Protected:yes (see Teams/Dpkg/Spec/ProtectedField)
- bash (~1 MiB)
We have dash, see Proposals/RemoveBashFromEssential.
- Used at least by dpkg conffile prompt. Make the diff item optional, demote to lower priority?
- tar (~2.8 MiB)
- Used at least by dpkg, once that is switched to an internal implementation it could be dropped?
- perl-base (~4.7 MiB)
- Once no perl scripts in pseudo-essential, this would also make the interpreter problem more tractable.
- findutils (~1.5 MiB)
- Used at least by dpkg-maintscript-helper (but that script should eventually go away), used by many maintscripts probably.
- bsdutils (~150 KiB)
logger is used by many packages in the archive which would need to grow add a dependency.
- sensible-utils (~150 KiB)
- Out of pseudo-essential through debianutils depends.
- If everything using init-d-script just adds a dependency, making it non-essential might be possible. (Alternatively, sysvinit grows a dependency on sysvinit-utils and then everything shipping an init-d-script based init script *must* ship a masking systemd unit file.)
- awk (~200 KiB)
- Pseudo-essential through base-files.
Some of the packages involved in the boot sequence could or have been switched from Essential:yes to Protected:yes, which has the same effect for dpkg, apt and frontends.
e2fsprogs (once fsck out, findfs replaced by blkid lsblk, ~2.1 MiB) removal
Executables statically linked against glibc (/sbin/ldconfig in the essential set) can be built against musl or so, for >900KB savings a pop.
Trimming changelogs, stripping extra documentation to separate packages, etc, can also be good.
For a historical tracking of packages that got removed from the pseudo-essential set, see BusterPriorityRequalification.