Essentialness of awk
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
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
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?