Linux from Scratch: I’ve had it up to here!
As you may be able to tell from my recent, snooze-worthy technical posts about compilers and makefiles and other assorted garbage, my experience with Linux from Scratch has been equally educational and enraging. Like Dave, I’ve had the pleasure of trying to compile various desktop environments and software packages from scratch, into some god-awful contraption that will let me check my damn email and look at the Twitters.
To be clear, when anyone says I have nobody to blame but myself, that’s complete hokum. From the beginning, this entire process was flawed. The last official LFS LiveCD has a kernel that’s enough revisions behind to cause grief during the setup process. But I really can’t blame the guys behind LFS for all my woes; their documentation is really well-written and explains why you have to pass fifty --do-not-compile-this-obscure-component-or-your-cat-will-crap-on-the-rug arguments.
Patch Your Cares Away
No, the real problem comes in when, like I’ve mentioned before, the gracious developers behind whatever package you’re trying to install haven’t tried to build it on more than their crapbox with every outdated library and script that worked once years ago. More times than not, their configuration script works properly, and make only bombs out when you’re at 99% of the way through getting your anime comic strip viewer up and running.
Then it’s up to you to hunt down the library online somewhere, find the stupid .tar.xz on some German guy’s website – because even though libfuckingawesome.so.9999 is used everywhere, nobody realized that the original developer died back in dickety-six, and wrote the thing in obfuscated C interspersed with assembly because it sped up long division with imaginary numbers by 0.35%.
Thankfully, the German person who thoughtfully put this online has excellent, highly descriptive nouns in their language, so you can probably be a true Free Software zealot and avoid using Evil That Is Google Translate. Regretfully, while the library is probably 150KB at most, you will spend four hours downloading it from a server in Bratislava whose connection method could generously be described as a string and tin cans.
Repeat this five times, and then each of those libraries has some dependency, probably on the previous version of the package you’d just installed and compiled. So guess what – you get to go back and try again! No word of a lie, I went through three glibc versions for different stupid packages that demanded their own special snowflake of a dependency.
Even SuSE Is Better Than This
The thing that really sets modern Linux distributions apart these days is their package management system. LFS has “suggestions” for how to keep track of what’s installed, but more likely than not you’ll end up with a /sources directory filled with tar files and half-compiled packages. The only reason I know that I’m running XFCE 4.8 or KDE 4.7.3 is that I’ve seen the version numbers scroll past about eleventy billion times while waiting on them to compile – and hopefully not thrash my existing files.
Even YAST does this better, despite the fact that it regularly trashes my carefully set up routing and firewall configurations. Truthfully it’s not as much of a package manager as it is a malevolent harpy, waiting for you to install an RPM that it doesn’t recognize and BAM! Kicked in the groin. It is still better at dependency resolution than whatever system you’ve come up with in LFS.
For those who say “oh, compiling from source is better, I can check the code myself and make sure it matches the executable”, or “oh, I can compile and optimize it and unroll loops for better performance”, OH PLEASE. You’re not going to do that. You should have better things to do, and chances are if there’s something malicious going on you wouldn’t notice it in the source.
Not A Lickable Distribution
There are so many things with LFS that come up are typical Linux annoyances, where Ubuntu and other lickable distributions have sandblasted the rough edges down. In the Ubuntu case, they’ve gone fully the other way to user-experience douchebaggery, like commissioning a custom font and replacing a workable desktop environment with something that has to be defended in every online discussion as “studies show us this is easier!” But at least with fonts, Ubuntu seems to have figured something out. Even installing the Microsoft “core fonts” on LFS involves compiling a utility to extract CAB files, then running a shell script that needed some edits before it behaved.
Cursors are terrible too. The default X ones suck, but I also don’t want the flavour of the week from KDE-Look or the leftovers of whatever theme some 13-year-old cranked out in GIMP. I’m also still missing some icons that I presumed would be default, like the “Keyboard” icon in XFCE’s Settings Manager, despite having installed both Tango and Oxygen icon packages.
For Linux on my personal machines, I’m going back to Debian or Mint when I’m able to. Sure, Debian has that whole “Communist manifesto” thing going on that a co-worker cursed out after a few beers. But it has a reasonable package management system, isn’t driven by the highly-suspect answers given out at the Ubuntu forums, and if I choose to compile a package I have the option – not the imbued responsibility to chase down twelve dependencies every time.
More so, I think LFS has its place and purpose, but defining exactly what that purpose is becomes very difficult. In a corporate server environment, it’s not feasible unless there is a very well-defined process about which packages to install, which versions and where they come from. There’s also no commercial support for something that you roll yourself. For a personal system, it’s really challenging to sit down and try to complete a task and then it takes an hour or two to resolve all the intricate dependencies.
Perhaps a LFS system would best be used for a web-browsing kiosk or a special-purpose appliance, like a file server or something running the latest bleeding-edge XBMC. But for me, when I can deploy a Debian or Ubuntu VM in about 20 minutes with reasonable support for nearly any Linux software package under the sun, something like Linux from Scratch just stops making much sense.