Hello. Several years ago it was agreed that awk would be essential (which is currently implemented by a "Depends: awk" in base-files).
I think this should be reflected in policy in some way, because a lot of people still use "Depends: awk" in their control fields. Or even worse "Depends: mawk | awk" due to a lintian warning against dependencies on virtual packages which, in this case, is completely misleading. I was going to propose a patch against the current policy document, but there is a little problem: 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. This paragraph was added to fix Bug#50832 but if we follow it strictly then all the awk packages are in violation, since they use the alternative mechanism to update the awk symlink in /usr/awk and therefore "do not provide their core functionality until they are configured". Consider the following example: * mawk is installed and awk in /usr/bin points to mawk. * gawk is unpacked, awk still points to mawk. * gawk is configured, awk symlink is unchanged since the priority of gawk (10) is lower than mawk (20). * mawk is to be removed, its prerm is executed first, this is when awk is changed to point to gawk, which was previously "configured". * mawk is removed. * awk was usable at all times. I think policy should allow this to happen. More to the point, I don't see why we should not be able to do the same with /bin/sh and bash/dash. As of today, is it still true that "dpkg will not prevent upgrading of other packages while an essential package is in an unconfigured state"? Why should dpkg unconfigure an essential package to begin with?

