Why do some packages conflict with themselves?

After an upgrade to Oneiric I have had some troubles with the package manager (it wanted to remove half of my system, including libc6, zlib1g packages etc). During the fight with aptitude I've noticed that some packages have meta-information which states that they conflict with themselves. Examples:

% aptitude show libc-bin
Package: libc-bin                        
Essential: yes
New: yes
State: installed
Automatically installed: no
Version: 2.13-20ubuntu5
Priority: required
Section: libs
Maintainer: Ubuntu Developers <[email protected]>
Uncompressed Size: 3,420 k
Conflicts: libc-bin
Breaks: libc0.1 (< 2.10), libc0.1 (< 2.10), libc0.3 (< 2.10), libc0.3 (< 2.10), libc6 (< 2.10), libc6 (< 2.10), libc6.1 (< 2.10), libc6.1 (< 2.10)
Replaces: libc0.1, libc0.1, libc0.3, libc0.3, libc6, libc6, libc6.1, libc6.1
Provides: libc-bin
Provided by: libc-bin
Description: Embedded GNU C Library: Binaries

See the Conflicts: libc-bin line? One more:

% aptitude show qdbus   
Package: qdbus                           
New: yes
State: installed
Automatically installed: no
Version: 4:4.7.4-0ubuntu8.1
Priority: optional
Section: libs
Maintainer: Kubuntu Developers <[email protected]>
Uncompressed Size: 213 k
Depends: libc6 (>= 2.3.4), libgcc1 (>= 1:4.1.1), libqt4-dbus (= 4:4.7.4-0ubuntu8.1), libqt4-xml (= 4:4.7.4-0ubuntu8.1), libqtcore4 (= 4:4.7.4-0ubuntu8.1), libstdc++6 (>= 4.1.1)
Conflicts: qdbus
Breaks: libqt4-dbus (< 4:4.7.3-4ubuntu5), libqt4-dbus (< 4:4.7.3-4ubuntu5), qt4-dev-tools (< 4:4.7.3-4ubuntu6), qt4-dev-tools (< 4:4.7.3-4ubuntu6)
Replaces: libqt4-dbus (< 4:4.7.3-4ubuntu5), libqt4-dbus (< 4:4.7.3-4ubuntu5), qt4-dev-tools (< 4:4.7.3-4ubuntu6), qt4-dev-tools (< 4:4.7.3-4ubuntu6)
Provides: qdbus
Provided by: qdbus
Description: Qt 4 Dbus Tool

The same "conflicts with itself" feature.

I've resolved my troubles with the package manager now, but the question still bothers me: what does it mean when a package conflicts on itself? What is this used for?


Solution 1:

Oneiric supports Multi-Arch, that is, allowing you to install packages of different architectures simultaneously (currently i386 and amd64 a.k.a. 32-bit and 64-bit). Some packages cannot be installed simultaneously (like libc6:i386 and libc6:amd64). aptitude cannot handle these cases and therefore thinks that it may be a good idea to remove those packages. It's recommended to use apt-get now.

If you use apt-cache show libc-bin, you can see the line mentioning this conflict:

Multi-Arch: foreign

A description of this field can be found at http://wiki.debian.org/Multiarch/Implementation#Multi-Arch:_foreign_support_packages

Solution 2:

Aptitude isn't showing you the whole story.

$ apt-cache depends libc-bin | grep Conflicts
  Conflicts: libc-bin:i386

I'm on a 64bit install so it's actually only conflicting with its 32bit counterpart.

Solution 3:

You've run into bug 831768.

aptitude doesn't understand multiarch yet, I'm afraid. It's best to avoid aptitude until this is resolved. One can survive with apt-get.