I read a book several years ago called “Just for Fun”, by Linus Torvalds – the creator of the Linux kernel. It charts the history of the project, from it’s earliest beginnings in a back bedroom, through to it’s accidental entry onto the world stage. I thought it might be interesting to relate my own interactions with Linux, and to perhaps reflect a little on the other operating systems I have used too.
My relationship with Linux begins with the first laptop I owned – a Toshiba, in about 2000. After playing around with the pre-installed copy of Windows 98 it came with for a few weeks, I read a magazine article about the latest release of “Redhat Linux”, and ordered a shrink-wrapped copy that was delivered by the postman a few days later.
My laptop was never the same again.
A year or so later I became interested in web development, and decided to turn my long-suffering home computer into a web server – running Linux rather than Windows. I can’t imagine my other half can have been too pleased with me.
I read the now famous O’Reilly books from cover to cover, and proceeded to build one of the first blogging platforms. I released it as open source because one of my co-workers thought it would be a good idea, and quickly moved on to building what I had really intended to build all along – a content management system. In the meantime, the blogging script got downloaded somewhere in the region of a quarter of a million times.
Thankfully Matt Mullenweg and Mike Little then forked a much better blogging script, and renamed it “WordPress”. I wasn’t bitter – I never set out to manage a project after all – and I switched to WordPress almost overnight.
I suppose it’s important to note that I never used Linux “because it was Linux”. Linux wasn’t “the thing”. Linux was “the thing that got me to the thing” – a phrase that I believe lots of people have used over the years, and that fits my story well.
While it’s true that the various things I have done outside of work could have been done on any operating system, I chose to do them in Linux mostly because it was free, and it almost worked as a turn-key solution – providing a platform on which I could tinker with the things I was interested in. Linux came with a great webserver (Apache), a great database (MySQL), and a simple web scripting language (PHP).
That I have ended up using Linux as a desktop operating system at home has happened mostly by accident. I will happily use anything that “just works” – and by-and-large the more well known Linux distributions do just that – they “just work” – without endless updates, drivers, security patches, reboots, and so on.
Having messed around with Windows, OSX, and Linux over the last twenty five years, you would think I have formed some opinions about them. A few come to mind.
Windows is ubiquitous – there is almost no learning curve, because everybody is familiar with how the user interface works. Because of it’s ubiquity, Windows won the battle for hearts and minds of businesses decades ago. There are signs this might change soon, but don’t hold your breath. Because of its ubiquity, hardware device drivers are widely available for most recent versions of Windows. You can almost always get any piece of hardware to work with Windows.
Unfortunately the core security of Windows is, and has always been pretty awful – with the continual need to run firewalls and virus killers to protect every single Windows machine from outside influence. Perhaps more worryingly, due to poor design the performance of all computers running Windows reduces over time – registry bloat, DLL hell, and wreckage from past updates are a continual source of frustration for home users and system administrators.
MacOS benefits from Apple both creating hardware and software – meaning the performance of the user interface in relation to the hardware is very good. You might also claim however that Apple are more concerned with how things look, than how well they work. Unfortunately MacOS only runs (reliably) on Apple hardware – while you can build a “Hackintosh”, you will face numerous problems with device drivers and core operating system stability. The software is driven – by design – by the Apple hardware renewal cycle. It’s easy to forget that Apple are a hardware company – it’s in their interest to obsolete existing hardware over time in order to sell it to you again, and again – and to discourage you from trying to run their software on anybody else’s hardware.
At a lower level, it’s perhaps worth noting that MacOS/OSX was originally based on Mach – a micro-kernel – the polar opposite of Linux. Micro kernel operating systems work by reducing core operating system functionality to control of messaging between services that do all the real work – which makes each service simple, but makes management of messaging enormously complicated, and causes all manner of design, functionality, and stability trade-offs.
Linux differs from both Windows and MacOS in that it’s a constellation of software development projects built by a vast community, rather than a commercial product developed by one entity. Books have been written about this arrangement – perhaps the most famous being “The Cathedral and the Bazaar”. If Tim Berners Lee’s “World Wide Web” was “for everybody”, then the same is probably true of Linux. The source code of every part of the core operating system and it’s supporting applications is freely available to copy, re-use, extend, enhance, and adapt – leading to ports for just about every hardware platform imaginable.
Linux originally borrowed the design of Unix, which set out some simple but powerful underlying concepts around the treatment of all applications as processes – with standard input and output streams. It’s a game changing design that’s beyond the scope of this post, and not followed by either Windows or MacOS.
Linux famously has no central control over future direction – it has been, and always will be designed and developed by a disparate community. This can be seen as both a good, and a bad thing – good because the system is not forced in a direction by external actors, and bad because it causes fragmentation. The fragmentation also causes duplication of effort – with different teams building alternative versions of the same core functionality – everything from window managers, to text editors. This of course means more choice though, and a properly functioning ecosystem of sorts – with evolution, and natural selection in play.
I need to draw this to a close somehow.
I titled this post “Choosing Linux”, and have sat on the fence throughout the entire monologue so far – being annoyingly even handed. I suppose when it comes down to it, the main reason I choose to use Linux outside of work is because I have to use Windows at work. The anarchic voice that occasionally whispers in my ear and causes me to walk to my own beat tells me that Linux is a good idea. It’s really that simple, and that illogical.
Not only do I get to “choose Linux”, I get to choose the distribution of Linux I use – and that has changed over time. Last week I ran “Manjaro”, the week before that “Elementary OS”, and before that “Ubuntu”. I’m back using Ubuntu this week. I may change again next week – it’s a little like re-building your house again and again, with no appreciable loss or gain in core functionality. Of course, you get nothing done, but that’s not the point.