Building from source sucks
Now that isn’t to say distributing source is a bad idea, it isn’t. The GPL is one of the most revolutionary ideas in the copyright area there has been for a long time. And it is a great idea, if a developer drops a project, if it was GPL anyone can pick it up again. That is brilliant. And it certainly isn’t within anyone’s right to force developers to build binaries for every system – it isn’t feasible and it would impose more of a burden on developers, most of whom are volunteers, than is necessary.
But really, building from source sucks. Let me tell you why I think so:
1. It rarely works out of the box. Sometimes it does, but the larger the program the less likely it is to work. I spent an unconscionable amount of time trying to build a certain program. It was about 50 MB. I never did get it, eventually I found a pre-rolled deb from some unaffiliated site. Now sometimes building from source works beautifully, I built Hamachi in less than five minutes with no problems. But as always YMMV.
2. Dependency hell. Once I read the instructions on how to make the program, often I find that I needed quite a few libraries. One time, I started building the libraries themselves from source, but then I realized they were probably in the debian repositories. So I used apt-get for the rest of the libraries until I found that I already had an older version of one of the libraries that I needed, and I couldn’t upgrade that library without a major overhaul of the system. I tried getting an older version of the program, I tried to build the new library from source, I googled, I shook my fists, screamed and punched the wall – all to no avail.
3. Reading man pages, readmes, usenet posts, and other forms of research suck. Not to say they aren’t useful, they can be. But all the reading is often more work than the program is worth. I’ve spent hours deciphering readmes and config files and the make file itself. After all of this, I’ve gotten snubbed by the developers on usenet channels, which isn’t that uncommon though there are a lot of helpful people out there. I started checking everywhere for people with the same problem, others had the problem but no solutions had been posted (just vague advice).
4. Uninstalling. Once I get an app built from source, sometimes I don’t want it anymore. Not for disk space reasons alone, sometimes for compatibility reasons. Guess what – when you build from source, the make file vomits files all over your system. They’re in /usr/bin they’re in /home/user/.program, they’re all over the bloody place. You can hunt them down, or ignore them. Usually I ignore them. Contrast that with a deb or rpm you’ve installed. Go to kpackage, aptitude, synaptic, or any other good package manager, and it is just a few clicks to get that binary blob off of your system.
What is the solution to this? Obviously developers or contributors can create binaries. That works, but as I said before, it is a bit burdensome to require that of all developers. I understand the technical difficulties with getting source to compile everytime, on every system, easily. Instead, what I think would fix this, is is an easier way to convert source into a deb/rpm file.
To a great extent this involves getting the source to compile correctly on every machine. But what about the unification process in Oregon. Or the LSB (linux standard base). No one can (or should) force developers to submit to these processes, they may be too stringent or not supported widely enough, but we need something like this.
Imagine if source could easily be turned into a binary. As easily as say, converting an RPM to a DEB with Alien. Source would be easy enough everyone could just use source. Developers wouldn't have to offer two types of download - source and binary. This could save open source developers (nevermind sourceforge) a terrific amount of resources - bandwidth, storage space - and time - no more compiling each iteration of the program on each platform. If nothing else I think this could really make open source development easier, quicker and more attractive.