Even Linux's advocates are unthrilled at one of its sticking points: binaries built for one breed of Linux don't always run on another. And since unifying Linux into a common distribution is about as likely as herding a circus ring full of cats into a clown car, people who want to distribute prebuilt binaries for Linux have few choices. Here's a new choice: FatELF, or universal binaries for Linux.
The idea's actually rather similar the universal binary concept as implemented on the Macintosh. There, a single file encapsulated executables for both the PowerPC and Intel versions of a given program -- a way to transition Apple's audiences gracefully from the old architecture to the new one.
The Linux issue is a bit different. Diversity of implementation is Linux's sine qua non: without it, Linux is that much less Linux. To that end, the vast majority of software for Linux is distributed in ways that take this in account:
- Open source code, compile by the end user.
- A package in the distribution's repository, typically also compiled from source by the distro maintainers.
- As binaries built for each specific release of Linux (e.g., the Opera browser).
The first option is for experts only, and even many pros don't want to be bothered with the hassle of compiling from source. (After suffering through it a few times myself, I don't blame them at all.) The second is Linux's standard approach, but whether or not an app is included in a repository is entirely up to the whim of the people maintaining it. Approach #3 puts a great deal of burden on both the end user, who has to select the right edition for his distribution and hope it doesn't blow up in his face; and the software creator, who has to not go cuckoo while trying to support multiple builds of multiple distributions.
Things could clearly be better.
FatElf has one possible incremental solution. It's an infrastructure for packing into a single file multiple copies of a binary as built for different Linux revisions, CPU architectures, and so on. It's a bit like an archive format, but built specifically to package binaries and allow the right one to be selected and used.
The one clear drawback to doing this is it causes the binary files themselves to become that much bigger. As the author indicates, the binaries themselves are often only a small part of the overall size of an application. (A demo VM of Ubuntu 9.04 has been built as a proof-of-concept for the idea, and it demonstrates this side effect most explicitly--it's much larger than your stock copy of Ubuntu.)
It's an interesting idea, but it underscores something about Linux that will most likely remain synonymous with it: Linux is designed with the tacit assumption that all (or nearly all) software run on it will be open source. The majority of software makers aren't likely to adopt open source as a significant part of their development and marketing strategies anytime soon (if ever), so it's in Linux's best interest to find some way to allow closed binaries to run gracefully. This might not be it, but it's worth a try.
NewScale shined in our test of four service catalog offerings: portfolios of services that an IT organization offers its end users. But the competitors--CA, PMG, and Service-now.com--also have compelling strengths. Download our report here (registration required).