ELF Released for Linux

Michael K. Johnson

Issue #16, August 1995

What does that mean to the average Linux user? What is ELF, anyway?

The ELF tools for Linux have just been publicly released, after months of testing. What does that mean to the average Linux user? What is ELF, anyway?

ELF is a advanced new binary file format for executables, libraries, and object files (which are used to create libraries and executables). It is the native binary file format of Unix System V Release 4, and is far more powerful and flexible than the original binary file format used on Linux, which is often called “a.out”.

Why do I care?

The people who really care about this are the programmers who make it possible for you to run a Linux system. They care because ELF makes several things much easier for them to do, and even makes some things that were previously practically impossible easy. This will allow them to develop better and more interesting software—which every Linux user gets to use.

Also, the ELF shared libraries are much more flexible than the old a.out DLL shared libraries which have been the Linux standard for a few years now. Backwards compatibility will be much easier to maintain with the ELF libraries, which will give all Linux users a more stable platform. “Wizardry” should no longer be required to upgrade libraries or compilers, once you are using ELF.

Do I want to upgrade?

Probably not yet. If you use Linux because it is an adventure, or to learn, then you probably do want to upgrade. However, if you just want to get work done, then you probably do not want to upgrade quite yet.

There are two ways to upgrade. One is to simply install the ELF libraries, and if you compile your own kernels, make sure that your kernel has been compiled with ELF binary support. This will allow ELF binaries to run on your system with no further work on your part. The first problem with this is that using both the older a.out shared libraries and the ELF shared libraries at the same time will use more memory than using all binaries of one type or the other, and therefore will almost certainly slow your system down. Therefore, this is only recommended it you want to be able to run occasional ELF binaries. The second problem with this is that you are required to rearrange some files in order to install the ELF libraries.

The other way is to wait until your favorite distribution of Linux is available in an all-ELF form, and re-install your system. As drastic as this sounds, it will lead to higher performance, especially if you want to run ELF binaries regularily. Hopefully, most distributions will make this easier than it sounds, perhaps by having an option to only install binaries. Distributions with package maintenance options should give you the option to uninstall your old packages and install new ELF-based ones without a fully reinstalling your system.

You will probably want to wait to reinstall your system until your favorite distribution has provided a (relatively) easy way to upgrade. If you want to use a new program available only in ELF (i.e., play with a new toy), your time will probably be better spent simply installing the new libraries. Unfortunately for normal users, it is not as easy as making a directory and dropping a few files in it. It requires installing a new ld.so and moving libraries. There has been some talk of a script to automate the process, and it will probably have been written by the time you read this, but I can't tell you where to get it because as I write this it doesn't yet exist.

This isn't wizardry?

The unfortunate fact is that to get to the state where it is so much easier to upgrade will require harder work initially. If you are patient, someone else may do the work for you; either someone who writes a generic upgrade script (this is only really possible thanks to the Linux File System Standard, which was explained in the July issue of LJ) or the maintainer of your favorite distribution. But there is no free lunch; either you have to do the work, or someone else does. The difference with ELF is that once that difficult work has been done once, the next time you need to upgrade your shared libraries, it will be easier than it ever has been—for whoever does the work.

Update on Linux/Alpha

For those following the Linux/Alpha port, Jim Paradis of DEC recently announced that the networking code in the Alpha port is starting to work, a few weeks after work on networking commenced. This rapid progress, which has been characteristic of the Alpha port, suggests that DEC is likely to meet their projected fall release of the full system.