a) Marking that two unrelated packages are mutually incompatible at
runtime because they happen to collide, for example on a commonly named
b) Marking that two related implementations are mutually incompatible at
runtime because they both provide the same binary.
c) Marking that a file that used to be provided by one package is now
provided by another package that is either depending upon or depended
upon by the original package.
d) Marking that a package has been moved into another package.
Are there any other uses?
For future EAPIs, being able to tell the package manager that your
block is of one of the types above will help the package manager smooth
out the upgrade path for users. For example, for class d) blocks such
as the recent coreutils / mktemp mess, the package manager can suggest
to the user to install the new package and then uninstall the old
package, rather than forcing the user to uninstall the old package by
hand (possibly leaving their system without critical utilities) and then
install the new package.
I strongly suspect that in many (but not all) cases the package manager
could be making users' lives a lot easier than it currently is...