1

I have more than 1400 APT packages installed which specify their architecture as amd64. Around 180 are i386. At least some of the i386 packages have their amd64 counterpart installed as well.

I assumed only amd64 packages would be installed on a 64bit machine. Why do I have some i386 packages installed?

And, for bonus points, how does APT handle dealing with the same package in two architectures? Does it have some way of knowing those exact instances where it must install both?

FYI, I learned all this about the state of installed packages from my APT status file.

1

All packages on an amd64 Ubuntu installed system are amd64 unless explicitly specified otherwise.

Packages that are listed as *-i386 are compatibility packages for the amd64 architecture which are usually needed as a dependency for an installed package.

This way, you can install a package that is available for the amd64 architecture (the amd64 version of an i386 package) which is written for i386 without having to "add" this "foreign-architecture".

However, if a package is listed as *:i386, it is an i386 package.


Certain packages are only available as an i386 version. This seems to be more common with proprietary packages and so wine is often an issue here as we all know how windows won't run a lot of stuff without the x86 (32 bit) directory.


With that said, I believe the i386 foreign architecture is enabled by default on newer versions of Ubuntu.

You can remove the i386 versions of all the packages on your system, although, you should do so with caution as this can cause compatibility issues with applications such as Wine.

Rest assured, however, that Ubuntu and apt will always default to and install the amd64 version of a package over the i386 version (except for Wine). Typically, you must specify the i386 version and if no arch is specified, the system will almost always install and use the amd64 version if one is available and or installed.

  • thanks for the answer! Where are the packages referred to using the *[i386]:(amd64|i386) format? I've only seen the i386 and amd64 designations in APT index and status files. – Michael Crenshaw Jun 3 '17 at 1:47
  • @mac9416 One example: wine1.6-i386 which is actually wine1.6-i386:amd64. Because this is the default architecture, the :amd64 will usually be omitted. So, any package that is listed as packagename-i386 is actually packagename-i386:amd64 unless it is packagename-i386:i386. You probably do have some i386 stuff installed like libraries and other compatibility stuff like that. Most of the time, you cannot have two architectures of the same application installed as both packages will provide the same file such as /usr/bin/something creating a conflict that would need to be resolved during install. – mchid Jun 3 '17 at 16:21
  • @mac9416 Libraries, unlike executables, usually have a unique path depending on the architecture and so there is no conflict when installing both architecture library packages. – mchid Jun 3 '17 at 16:24
  • @mac9416 For applications such as wine, you can specify the architecture when creating your wine prefix and you can have more than one wine prefix for each architecture. – mchid Jun 3 '17 at 16:27
  • @mac9416 They are referred to when using the dpkg -l | grep i386 command. – mchid Jun 3 '17 at 16:33
2

The i386 packages are installed on your amd64 system because i386 programs cannot use amd64 libraries.

This is how amd64 computers are able to run i386 programs & amd64 programs. If a amd64 program requests for libxml2, the amd64 version of libxml2 will be called. If an i386 program requests for libxml2, and it receives the amd64 version, they are not compatible - instead, it receives the i386 version of libxml2.

So the reason why both i386 and amd64 packages are installed, is for i386 program support on amd64 systems.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.