Chris Baus

Linux isn't simple

I love simple. Simple is good. Complexity results in errors and bugs and, well, more complexity. Complexity is bad. I love Linux. Linux is cheap, reliable, malleable, and comfortable for those of us who have been weened on *nix. But Linux isn't and has never been simple.

While I won't argue that the development model for the kernel hasn't produced amazing results (it has), it is anything but simple. In fact it is so complicated, that no open source management system could handle the complexity of dealing with multiple distributed trees with change lists coming from tens of thousands of developers around the world, and after much ado, Linus wrote his own. The Linux kernel is a project so complex that it has its own custom source management system.

When a Linux box is booted it enters the baroque (to barrow a usage from JWZ) SysV startup sequence. It requires hundreds of clear text files in different formats which must be symbolically linked in just the right way to work in unison to start the necessary services and bring up a login prompt. I don't want to think about the number of times this has gone awry, and I've gone off into the abyss of the /etc (or worse /etc/init.d) directory to fix a problem.

Then there is X. Love it or hate it, X is on par with the most complex systems ever developed. It wasn't enough to draw fancy images on a graphics display like the Mac did. The *nix world was too good for that. X had to work across distributed networks. It was a vital requirement to be able to execute a mail client on the other side of the world. Although for the first 15 years of its existence xterm running vi was the only X app anybody ever used (ok ok there was xbiff and cutting edge oclock which required its own X extension to draw circular windows). This decision crippled X from the get go, and I'm willing to claim it is the reason that *nix has yet to be a success on mainstream desktops. Hack upon hack had to be added to the system to get it perform reasonably well (Google xshm). I love Backpack. It is a model of simplicity. But Backpack isn't an X application running on 37Signals servers, and that's for good reason.

This complexity hasn't gone away.

        SubSection "Display"
                Viewport   0 0
                Depth     24
#               Modes   "1600x1200" "640x480"
                Modes   "1680x1050" "640x480"
#               Modes   "1920x1200" "1680x1050" "640x480"
#               Modes   "640x480"
        EndSubSection

That's a snippet of my current xorg.conf file that I manually edit every time I hook up a different one of my ultra mainstream external Dell LCDs to my ultra mainstream Dell laptop running a variation of the most recent version of the most widly supported and used Linux distro.

Then there are the server applications. Yes Apache is powerful. Yes Apache is stable. Yes Apache is the server I use. Yes Apache is complicated. Let's consider one small piece of the whole application, and minuscule part of Linux: mod_rewrite the Swiss Army Knife of URL manipulation.

ServerName feeds.baus.net
ProxyRequests On

RewriteEngine On
RewriteRule ^/$ http://feeds.feedburner.com/baus [P,L]
RewriteRule ^/favicon.ico$ http://www.baus.net/images/favicon.ico [PT]

I added those lines manually to my Apache configuration file to redirect feeds.baus.net to feedburner. Powerful? Yes. Simple? Well it certainly is powerful. Looking at those lines now I honestly can't remember the difference between [P,L] and [PT], but I do know that it is vital to the whole thing working. It was easier to modify my proxy server to handle virtual hosts then to get that syntax just right.

There are some examples of simple OSes out there (symbian? qnx?), but as a 10 year Linux user, I can say historically that hasn't been true for Linux.

...But if I'm wrong and Linux really is simple, may I please retire with frou frou drink in hand before I have to work with a complex piece of software.