There are still quite a few 32-bit x86 Linux distributions

The options for 32-bit x86 distributions have been declining a little bit. Some distros have dropped 32-bit support, but quite a few still have it. What remains? And which CPUs do they actually support?

x86 Micro-architectures

“32-bit support” can mean a lot of different things to different people. There were a lot of instruction set additions over the span of development of the 32-bit x86 architecture.

i386 was where everything started, but the Linux kernel has not supported i386 for a over a decade. The kernel currently supports i486, but we may see that bump up to i586 soon. i586 starts with the first Pentiums (the “5” in “586”), and it’s the earliest architecture I’m going to consider in this post.

People usually agree on the meaning of i586, but i686 tends to have a bit more variance. Some people say i686 to mean the P6 architecture without SSE/MMX. Some people mean it to include SSE/MMX. Some projects throw SSE2 in there also, like rust’s i686 target.

And then you run into situations where people say i386 but mean i686 or some other combination of instructions. For example, Go’s i386 GOARCH is actually i686+MMX, because they use MMX for their atomics, so you can’t use Go without MMX.

The situation is a bit funky.


With that out of the way, I’ll talk about some linux options. I’m not going to go down the list of distrowatch and find everything that supports x86; you’re free to do that on your own. I’ll mention things that I know about to give a general feel for the landscape as I see it.

Alright then. In no particular order, some distributions:

Feel free to let me know about corrections/refinements for the micro-architecture support. I’m doing my best, but there’s only so deep I can research it.

After listing all those I got tired of researching distributions. If there are more than I have the energy to write about in one sitting, I think that’s pretty good.

Alpine

Alpine is know for being a pretty tiny distribution out of the box, but it’s got a fair number of packages too. You can use this as your desktop system if you want to, but it particularly shines for server use. Alpine can be installed in a traditional manner, or in a setup where the system is loaded fully into RAM, only committing changes back to disk when manually told to do so.

This second install method is nice on systems with slow IO, or systems that are prone to suddenly losing power (as you probably won’t get the filesystem in a weird state if you aren’t writing to it). And because alpine splits docs & dev headers out from the main package, you can do this without taking away too much memory from your system to use for other things.

Alpine supports x86. My favorite use of this support is in iSH, a 32-bit x86 emulator and linux kernel emulator which out of the box gives you access to an alpine userspace on your phone or iPad.

I’m not sure which x86 feature level it supports. If I had to guess, I’d guess i686, but please let me know if you happen to know. EDIT: thanks lucidiot for directing me to the Alpine requirements page, which has a very clear answer to this actually! You need i686, with CMOV and SSE.

Debian & derivatives.

As of bookworm the baseline is i686 without MMX or SSE. Though any Go programs will violate this I believe- and I’m not sure if they use rust’s i586 target or what.

In December of 2023, Debian announced they’re sunsetting it too. No timeframe yet, but at some point “in the near future”, you’ll stop being able to install i386 debian. My bet is that Bookworm will be the last official i386 debian release we see.

Debian is not immediately discontinuing the i386 package set, but we will probably see maintainers begin dropping i386 support for their packages.

The announcement mentions that they may see changes to the architecture baseline, meaning the instructions that packages are allowed to include in them. So debian’s i386 may expand to officially include SSE2 or higher.

3rd-party debian derivatives may continue running. A number of downstream distributions such as antiX linux/MX linux already build their own kernels and provide their own package sets in addition to the core debian packages. Maybe projects like those will continue building on debian, filling in maintainership gaps in the package set as necessary. Or maybe not, we will see.

openSUSE

I really don’t know much about openSUSE. I found some talk from December 2022 that openSUSE was looking for help to keep 32-bit x86 going. But, openSUSE tumbleweed still has i586 boot media available so I guess they’ve still got it!

Void

Void Linux is one of those distributions that starts you with a barebones setup and lets you build up from there. A bit like Arch or Alpine in that way.

Void linux supports “i686”. We can learn what this means from common/build-profiles/i686.sh in the void-packages repo.

XBPS_TARGET_CFLAGS="-mtune=i686"
XBPS_TARGET_CXXFLAGS="$XBPS_TARGET_CFLAGS"
XBPS_TARGET_FFLAGS="$XBPS_TARGET_CFLAGS"
XBPS_TRIPLET="i686-pc-linux-gnu"
XBPS_RUST_TARGET="i686-unknown-linux-gnu"
XBPS_ZIG_TARGET="i386-linux-gnu"
XBPS_ZIG_CPU="_i686+sse2"

So, generally i686, but SSE2 for zig, and I believe that rust target also includes SSE2. I think that by changing these environment variables, you could also roll your own void linux that targets other 32-bit x86 variants, though you would of course have to build all the packages yourself.

And void makes building your own packages pretty easy to do, even from a non-void system, which is nice. While working on this post I tried it out, and got void building i686 packages from my gentoo system, with custom CFLAGS to optimize for my atom chip.

Adélie

Adélie is an independent distro, notable for supporting 32-bit x86, and both 32 and 64-bit PowerPC, the latter of which I think is even more niche than 32-bit x86. Adélie uses the APK package manager, like alpine does. But they aren’t a downstream of alpine’s packages; they do their own packaging.

Per the documentation, they target chips with at least MMX.

I don’t know much about what using this distro is like in practice. They have both desktop and server flavors though, so if you want to get a desktop up and running easily it might be a good option.

Gentoo

Gentoo! Gentoo still has x86 support, and since it’s a source based distribution it’s up to you what CPU architecture you want to build software for. Gentoo has installation media that supports i486 and i686, so you really can run this anywhere the kernel will run.

But, you’ll also have to compile nearly everything yourself, one way or another. On a 32-bit desktop, if you’ve got patience, that might be ok. It’s a bit harder for laptops, unless you’re fine leaving it for maybe days at a time when you need to build a browser.

Gentoo does support building your own binary packages on another machine though, so if you’ve got a another box that can do your compiling, that can help.

Gentoo also has official binaries now, a fairly recent development. For 32-bit x86 it’s just the @system set, meaning everything included in a fresh installation. That’s not much, but it does get you gcc, so if you use the official binaries you won’t need to build your entire toolchain from source on updates.

This nice thing about gentoo is even if they drop official support for x86 on a package, it’s extremely easy to tell your system to try and install it anyway, with a one-line addition of the package name to your /etc/portage/package.accept_keywords. And a lot of times it’ll work! This is one of the nicest things about using gentoo on a niche architecture.

Slackware

One of the oldest distributions still kicking, and it’s still got 32-bit support. The Slackware 15 release notes includes a kernel intended for chips “older than a Pentium III”, so it’s probably built without SSE where possible, though I’m not sure exactly which micro-architecture they’re targeting.

Slackware includes a decent chunk of software, but a more minimal set than something like Debian or Void. So you won’t need to build everything from source on it, but you’ll need to build some things.

There are also a number of slackware derivatives, but I’m not familiar with the slackware world.