End of an era, Linux to Deprecate a.out support

From the post on kernel.org:

Linux supports ELF binaries for ~25 years now. a.out coredumping has bitrotten quite significantly and would need some fixing to get it into shape again but considering how even the toolchains cannot create a.out executables in its default configuration, let’s deprecate a.out support and remove it a couple of releases later, instead.

I can’t say I’m all that surprised, maintaining backwards compatibility has not really been a Linux thing, as most people are incapable of doing any troubleshooting in the myriad of hundreds to thousands of independent packages, and instead find it far easier to switch to a different distro entirely.

At the same time, the vast majority of Linux packages are available in source code, so re-building things as ELF most likely has happened in the last 25 years.

During the great ELF migration, it was a gigantic PITA having basically 2 copies of all the libraries as things were converted over, and a.out stuff quickly evaporated. For me, the beauty of a.out was for later kernels to be able to mount and run older stuff. But as we are in the era of both ‘cheap’ user mode kernels along with virtualization will the old executable format truly be missed?

Linux has survived the removal of native support for the 80386, and even the detection logic for the NexGen processors (yes they were real, and yes they did ship), so no doubt this further amputation won’t matter to the vast majority.

I have to wonder how long until the i386 32bit target is removed? Distros like Debian have long since removed support for 80486/80586 classed processors to bring the minimum up to requiring SSE-2 based instructions, and I can’t imagine anyone who is running a 32bit OS for their main OS in this day and era.

diff --git a/arch/x86/um/Kconfig b/arch/x86/um/Kconfig index f518b47..494eeb5 100644 --- a/arch/x86/um/Kconfig +++ b/arch/x86/um/Kconfig @@ -16,7 +16,6 @@ config 64BIT config X86_32 def_bool !64BIT - select HAVE_AOUT select ARCH_WANT_IPC_PARSE_VERSION select MODULES_USE_ELF_REL select CLONE_BACKWARDS

Farewell a.out

Update: from further along in the changelog

And Alan Cox points out that the a.out binary loader _could_ be done in user space if somebody wants to, but we might keep just the loader in the kernel if somebody really wants it, since the loader isn’t that big and has no really odd special cases like the core dumping does.

5 thoughts on “End of an era, Linux to Deprecate a.out support

  1. I was actually slightly surprised by this since Linux takes such a strong stance on kernel changes not breaking userspace and in Linux its common to update kernels independently of the rest of the system (something we don’t really do in the BSDs). From what I understand the ABI of a distro is largely based on the the libc the distro uses, picked by the distro and ‘any kernel should work’ whereas in the BSDs or Illumos the kernel and libc have tighter coupling and libc is expected to have the stable interface. I think macOS takes this to the extreme and the kernel interfaces are explicitly unstable between even minor versions.

    All that said, a.out is old enough probably almost nobody will be truly too inconvenienced and you can keep using LTS kernels for quite a while too for that matter.

    I personally expect that i686 will live on in mainline Linux long after most distros give up support. Similarly NetBSD will probably keep i686 for at least another 10 years probably longer. (NetBSD still supports VAX after all).

    • I need to update the article, but apparently they are going to just cut the a.out coredumps which apparently don’t work anyways. It looks like the a.out loader will remain. For now.

    • “I personally expect that i686 will live on in mainline Linux long after most distros give up support. Similarly NetBSD will probably keep i686 for at least another 10 years probably longer”

      Hope so. I’ve got a Pentium Pro 200 system running NetBSD that I use from time to time. Makes a good bridge between modern systems, and the truly old ones.

  2. Yegor Yegorowitch Informatitcsh has 3 enemies:
    1. backward compatibility
    2. backward incompatibility
    3. Spring
    4. Winter
    8. maths, ordering, numbering
    6. Aoutumn
    6. grammar
    8. Summer, Akkad

    C:\TEMP\WINDOWS\FIREFOX32.EXE aout:blank

Leave a Reply