Why doesn’t Slackware run on my old 386?

It might seem like a laughable question. After all, who uses a 386 anymore? Well, one reason might be for integrating legacy industrial hardware with newer technology. Or utilizing legacy PC hardware for which a modern equivalent does not exist.

In any case, it is common knowledge that the Slackware kernels up to and including version 8.1 were compiled as 386 kernels. But in Slackware 9.0 and later, the kernels are compiled as 486 kernels, with the exception of the lowmem.i kernel.

Trying to run a 486 kernel on a 386 will produce the following kernel panic due to a missing CPU bug workaround on the 386:

Checking if this processor honours the WP bit even in supervisor mode... No.
Kernel panic: This kernel doesn't support CPU's with a broken WP. Recompile it for a 386!
In idle task - not syncing 

Switching to the lowmem.i kernel, which is compiled for a 386, solves this problem for Slackware 9.0. But Slackware 9.1 or later still won’t run on a 386, hanging during the init process. Why?

Well, as it turns out, Slackware 9.1 packages are compiled for the i486 because a glibc change made it impossible to run even a i386-compiled glibc on a 386 anymore. The implication of the issue that led to this change is that C++ packages from Slackware 9.0 will not run correctly on a 386 either, giving only Illegal instruction when invoked.

So, Slackware 9.1 or later won’t run on a 386 at all, and Slackware 11.0 was the last release to support UMSDOS and therefore to provide a ZipSlack variant. Slackware releases later than 12.0 not only do not provide UMSDOS support anymore, but also eliminated the lowmem.i kernel, so that no available kernel supports a 386 processor anymore. So to use Slackware on a UMSDOS partition on a 386, Slackware 8.1 or older must be used.

Also, if you are getting problems about /sbin/agetty and respawning too fast like in this post, there are several solutions, but the most important: use a Windows 9x boot disk! Trying to unzip a ZipSlack archive under plain DOS 6.22, whether using PKUNZIP, Info-ZIP, or anything else, will fail and give you the above errors! (To speed up the unzipping process, run SMARTDRV C+ to cache writes to the hard disk. In order to use Info-Zip’s unzip32 program, you will also need a DPMI server like HDPMI.)

The only Linux distribution I know of that still professes support for the 386 architecture is DeLi Linux. It claims to provide a GUI for any machine down to a 386 with a minimum of 32MB RAM. (32MB happens to be the maximum amount of RAM most 386 motherboards will take.) A console-only installation will use less RAM. How does DeLi Linux work around the glibc change that caused Slackware to give up on the 386? They use uClibc as the system C library instead.

Since most 386 systems cannot boot an El Torito bootable CD-ROM like the ones provided by DeLi Linux, you must use geteltorito from the genisoimage package to extract the 1.44MB floppy boot image that is embedded on the CDROM. Then use rawrite or dd to copy the image to a floppy disk and boot off the floppy with the DeLi Linux CDROM inserted.

Update 2012/12/12:  Support for the 386 processor has been removed from the mainline Linux kernel:  http://linux.slashdot.org/story/12/12/12/1414238/linux-nukes-386-support

Leave a Reply