My choice of a free operating system

I'm a programmer. I live to program, to create software. It's what I wish I was doing every minute of my days that I don't spend with family or friends. About a year back, I wanted to create something, and looked around for the appropriate platforms and tools to use. I found no documents on the net that described what I wanted to know, thus my journey was a bit of trial and error, and lots of fact searching. This document is an attempt to put on file what I found so that perhaps someone else may avoid spending all the hours I spent. Disclaimer

Introduction

I'm a total geek. Computers and programming are important to me. This affected my decisions below. I'm also a fan of usability and attractiveness as most people know it from the common proprietary platforms. That also affected my decisions. So this document is not about picking the best operating system in any particular aspect - it's about finding one that you can mold into a supercomputer or use as a word processor.

What I wanted

I wanted an efficient operating system. This was my initial concern that led me away from the windowses. The bloat of a minimal Windows NT/Windows 2000 server is just beyond belief. I wanted a graphical desktop with good usability and attractive features. Command lines do not turn me on. I grew up with command lines and I'm very happy to live without them in many contexts. I realize they are useful and even attractive in some cases, but I refuse to use a workstation that forces me to use command lines for everything. For example, I believe desktop themes are good because they make it possible to love what you look at. I wanted good access to applications. I wanted choice. I wanted good word processors and other editors. I can compile a kernel and install an application from a source distribution. However that is not what I want to spend my time with. I want to use the applications, not fight to make them usable.

The Specific Problem - "C10K", Threads and Sockets

Unless you know a little about programming, skip this or die from boredom. If you know exactly what I'm talking about already, same thing.

A problem common to all unix platforms (and all related platforms) if the traditional inability to perform well in heavy threading applications. This isn't something that hits them compared to other platforms - for instance Microsoft Windows NT/Windows 2000 has problems in the situations we'll encounter here.
In the case of the unixes, it has a lot to with that they were designed in an era where thread were unheard of - the problem did not exist. On unix platforms, when you need to perform many tasks at once, you spawn a copy of the running program, let each copy decide which takes which part of the work, and carry on. Simple. The act of doing this is called a fork . On unixes, a process (a running program) is a cheap thing. It doesn't cost much work to keep it running. Other environments are not so lucky, so the concept of light-weight processes was born - these are threads. A thread is basically a way for the system to let a program execute in several independent places in the code of a single application. Now, adding threads to a system that was not designed with them in mind is difficult - there are lots of problems to deal with regarding security, scheduling and management. Different unixes dealt with it in different ways, but none of them are really good - you cannot just graft a thing like threads on top of a systems not designed for them. (Systems designed for threads, like Windows NT, BeOS, Mach, make a much better trade-off in this aspect).
In some cases, threads are a necessary thing. Web servers are such a thing. Web servers have to handle thousands of independent requests per second. The first unix web servers did this the same way they had always handled services like this - they forked. As the web matured, this was no longer an option. Threads were necessary. In these situations the thread handling of the unixes, including Linux and XxxBSD, are not quite enough. They can implement good web servers (some of the best), but there is a large amount of performance lost, performance that could be tapped to get an edge. This is one reason I was looking for a platform that was aggressively searching for improvements.
The second problem has to do with network connections and is parallel to the first. It has to do with how an operating system listens for inbound traffic from the network. This activity can waste very large amounts of the total performance of a server if one is unlucky (up to 30% of application time). A platform where active research was being done to change this seemed very attractive to me. On Linux for instance, there are projects that implement a web server inside the kernel. While this is a horrible idea for an operating system design in general and useless to my own projects, the idea is interesting and I could learn from it.
"C10K" is an expression used to mean this specific type of performance problem - a large number of clients.
That, basically, is how I ended up where I did. Why Microsoft platforms do not fit is a little different, but I will not go into details on that at this time. Perhaps in some other document.

What I got

Once I started looking with these criteria, I found a lot of good things. My first encounter with Linux was circa 1993 - I installed Linux (kernel version 0.99 something?) and X on my 486. It was great fun, but didn't really go anywhere from there. There was nothing for me to do with it back then. This time it was different. I found not one, but several able operating systems with good (though varying) access to applications.
I started with BeOS. While not free (then - today BeOS is available free of charge, although it is not open source), it was very attractive. In particular, it's beautifully architected and very bloat-free. In short, it's mean and lean and it rocks. (More on why I left BeOS later)
Then I went to FreeBSD, and finally to Debian/GNU Linux. I believe Debian is my final destination for the nearest future. (More on why later)

Alternatives

Here are short presentations of the platforms I looked at and why I chose or put them aside.

XxxBSDs

The BSD flavor of platform is quite old. The three main free distributions are,

FreeBSD

FreeBSD is the largest of the XxxBSDs. It has no particular feature focus (as NetBSD and OpenBSD do) but does a very good job on several points. Very good. The platform is very stable and secure. FreeBSD can run Linux applications using an emulation layer. I had some trouble with this and in the end used very few applications this way (only ones that are available only as Linux binaries and could not be replaced by native applications). A FreeBSD distribution fills about 4 CDs. It's a very impressive offering, and it's free.
+ In a reliability situation, this would be my choice.
+ The ports system is awesome. Really, really, really impressive. Hats off. Love it.
- The ports system, which I came to rely on, is the greatest beauty of FreeBSD, and also it's greatest weakness. The delay for applications to appear in the ports from being available as Linux RPMs is a bit too much for me. I wanted a little more aggressiveness in the porting.
- The stability of the kernel and systems comes from age and long use. Incorporating new features is not something that happens overnight in XxxBSD kernels. Alas, some features in this area were things I really wanted. (In particular, an aggressive and high performance multithreading kernel and a promise of new inventions for socket handling were priorities). With a heavy heart, I left FreeBSD. At the moment I still use it at work, and I love every moment of it. FreeBSD rocks.

NetBSD

The champion or cross-platform operating systems. NetBSD runs on anything that can push electrons left or right. It's also the home for various emulation projects which are very interesting.
+ Beautiful. Makes reusing odd hardware more than a dream. May hold promise for reuse in appliances.
- NetBSD should be chosen on merit of its specific features - because it's needed and nothing else will do the job. Unless cross-platform work or emulation is a priority, get FreeBSD.

OpenBSD

With no competition, the most secure free operating system. Most of the features available on FreeBSD and OpenBSD are also available on OpenBSD.
+ For setting up a secure server or appliance, this would be my choice.
- When you need OpenBSD, you will know it. If it's an OpenBSD job, OpenBSD cannot be matched without spending loads of cash.

Linuxes

Linux is a collection of source code that forms an operating system kernel similar to a commercial Unix system. On top of this set of source code are built a number of code/binary sets that are distributed as (in a loose sense) distributions. Linux distributions have been around for about a decade. Some are newer, some have faded away. They come in different flavors and with different focus, from complete operating kernels in single floppy disk format to network application server suites and workstation setups. There are Linux versions for many platforms and tasks, too many to go into here (and beyond my field of knowledge).
The way Linux systems work is similar to BSD systems (including the XxxBSDs mentioned above) but a little different from Mach-derived kernels (such as those in NeXT and MacOS X). Compared to the windowses and other (trad. MacOS etc) operating systems, they are all (Linuxes, BSDs, Machs) very similar. The differences are technical and will bore anyone outside the geek department. They are all Unixes - saying anything else is for lawyers and trademark people.

RedHat

RedHat is the wonder child of the free software industry. The company that backs the distribution made a lot of noise when it went public on NASDAQ. The way the RedHat distribution has gone is toward including everything. With very good tools and a large base (of both systems and users) their tools are widespread and RedHat is often the first platform to be supported by applications. Availability for applications is good.
+ Availability, as close to standard as a Linux gets.
+/- The distribution is controlled by a corporation. Some do not like this.
- RedHat suffers some bloating. I feel that a little too many features get accepted a little too easily in RedHat. It may not actually be true, but it's my impression. With this in mind, I ended up not choosing RedHat. Having bypassed RedHat also let me bypass several other Linux distributions.

Mandrake

Another large company-backed Linux distribution.

SuSe

Another large company-backed Linux disrtibution.

For both Mandrake and SuSe, I did not really investigate their features and weaknesses. Having found something that I felt more promising than RedHat, I felt no need to look further to the area of company-backed Linux distributions.

Debian/GNU Linux

With FreeBSD's stability behind me on the one hand, and the aggressiveness and tool availability of RedHat on the other, finding a middle way was a god-send for me. The answer was Debian GNU/Linux. Debian is unique in that it's the only remaining Linux distribution that is not backed/controlled by a company. It is driven by volunteers and closely allied to GNU. Debian has it's own software distribution scheme ("dpkg", a mainly binary distribution system that is similar to both FreeBSD's ports and RedHat's rpms) and a modest rate of feature introductions. Due to this slow rate of change, Debian holds promise as being the most stable of the main Linuxes. The dpkg system makes software availability slightly less abundant than on rpm oriented systems but faster and more diverse (more chaotic if you wish) than on FreeBSD.
- Software distributions. Searching for/waiting for .deb files can be frustrating at times, when the rpms are all that appear. More often than not however, applications appear in deb form at the same time as rpms, or only slightly later.
+ Openness. The community around Debian development is truly incredible. (The same should be said about FreeBSD). + Malleability, with moderation. That's my way of saying that for me, Debian is the perfect mix.
+ Feeling good. GNU is people who work to improve the world. Join the movement. The best thing about being good is you get to gloat about it.

Other Free/Open Source OSes

GNU/HURD

One of the future avenues of Debian is HURD. HURD is technically not Linux, but a separate kernel base. It is a Mach derivative (or clone or sibling - who cares, really), meaning it may be a thing to look for... but who knows. HURD is only a fringe thing at this time, but remember the name. It might become important.

BeOS

BeOS is a totally proprietary operating system, developed and owned by Be Inc. It's really really cool. It has media handling capabilities you won't find anywhere else. It's fast. It's a real joy to browse the programming documentation, the engineering is so clearly marked by love for excellence and technical beauty. The available applications are too few though. Add to that, Be may or may not have a future. They have shifted focus from the desktop to handheld and embedded devices (which is cool and fantastic and everything, but not as accessible to build upon for an average hobbyist/enthusiast such as myself). Boot up BeOS, select 15 or more video clips and hit return - watch them all play without a hitch on a machine where windows would choke to death and only manage bits of noise from one of them and still image shows from all of them. It's beautiful. I loved it for a while. The lack of support for building serious server applications on BeOS was what made me give it up.

Other OSes

Windowses

Windows 95/98/ME/XP are consumer offerings. They are good for surfing and playing games, maybe working with your office packages (unless you think viruses are a bad idea or security is important). While they may be necessary target platform, I have yet to meet a developer who would complain if he never sees them again.
Windows NT/Windows 2000 is a decent line of platforms. The biggest advantages and biggest drawbacks are that they have everything - and unlike a bloated Linux distribution, you can't remove anything from this kernel... The desktop environment Microsoft has built is the most powerful on the market. They have the best browser and the best application integration. They are also prone to security holes and feature a total lack of openness. (And if you think lack of openness means more secure, you're wrong - obfuscation is not security. Security is the result of testing, reviewing and careful consideration, not secrecy.) I have spent several years working on windows platforms and being amazed at the trinkets Microsoft throw out. In the end, I was bored and disgusted. I sometimes long for features I no longer have, but more often I find myself reflecting how great it is to be doing things I could not do before.

MacOS

Compared to windows pre-windows 95, MacOS was superior in terms of usability and perhaps in terms of robustness. There ends the attraction of MacOS. Compared to anything beyond Windows 95, MacOS is pretty useless. It remained the only major operating system lacking memory protection for so long it's scary.
MacOS X is a shift to a unix (Mach kernel actually) derivative operating system, with open source. Some speculate Apple may be approaching the open source movement. I doubt that - Apple is to openness what Stalin was to capitalism. Plus, making money on free software is hard. MacOS X may be attractive as a server platform on the same basis as any other unix server platform, but in that market Linux seems to be winning. As a desktop, Apple may score points with a good interface on a stable platform, but to make any money they'll have to do better than that. Time will tell.

Favorite applications

Some of the applications I have discovered on my journey. These are what I use when I'm working.

Desktopware

GNOME

GNOME is a desktop environment framework, and includes a huge bundle of applications for a user to choose among. Office suites, planners, database applications and different editors are only the tip of iceberg. GNOME is entirely free and open source, built mainly by volunteers. Way to go guys and gals - I love you all.

StarOffice

A German office suite bought out by Sun and made free. Exactly where it will end up remains to be seen. As for now, I use it as a stopgap. It's free and works on Linux.

X Window System

The X Window System is the graphical system that unixes share, including all XxxBSDs, Linuxes and MacOS x. It is a very basic and very powerful framework that separates the user from the machine, meaning that it is very easy to use applications on different machines and have graphical intefaces displayed on a local machine - very useful for cross platform work. Unfortunately, this means graphics under X will always remain slow compared to hotwired systems like windows or BeOS, where the local graphical environment is tied closely to the application. When running Linux or similar as a desktop user, there really is no choice but to accept and embrace X.

Window Managers

Window managers are applications that implement a shell using the X window system. There are dozens of them. The best ones offer lots of functionality. Some are more focused on simplicity and speed. My choice for window manager is sawfish. Good GNOME support is the main feature. Almost everything is customizable, far beyond what's possible in windows.

the GIMP

A graphical editor similar to Photoshop, the GIMP is also the brithplace for several building blocks that form the basis for much of the desktop application work done in GNOME. The GIMP toolkit (gtk) is very important to the free software desktops. While I don't normally use the GIMP per se, it is important as an example of a really advanced and rock tight application, built entirely by volunteers and free for all to use.

Others

gtksee, GQview - image viewers, catalogers
AbiWord - a free word processor Gnumerical - a free spreadsheet
Nautilus - a "explorer type" file manager
Mozilla - the continuation of Netscape navigator as an open source project. Not as fast or powerful as Microsoft's browser, but coming along pretty nicely. There are a number of alternative browsers out there (including Opera, Konqueror and others) but none that can really compete with Mozilla. The main problem at this time is speed (Mozilla is slow compared to IE, but this may be due to debug code) and compatibility (A lot of sites use Microsoft specific extensions and additions in their pages, and many do not care that viewers may not be running windows software).

Serverware

Apache

The ruler of the web. The best and most wide-spread web server. Runs like a dream. I'm not emotionally attached to Apache, but I like it. I've used it and I have no complaints.

Zope

A portal type of application, used to build web sites and web applications. Not really my field and I only recently started working with it, but it looks promising.

PHP

An open way to create serverside web applications. Again, not my field and at present I don't use it at all. However, it's a great thing to have and to know about.

PostgreSQL

A free database management system with robust design and solid performance. Built from the start with security and consistency in mind and as an open source/free software project (neither of which is true for the main competitor mySQL). Recent improvements show performance comparative or better than mySQL, and on par with commercial systems. PostgreSQL is wonderful.

Developware

emacs

The editor for programmers. There is no better general editor, anywhere. Inside some applications there may be better editors suited for that particular task, but for an editor to use in just about any context, emacs can't be beat.

gcc

The free cross-platform and portable compiler. It's been crucial to the development of a lot of the operating systems mentioned on this page, and I use it every day.

rcs/ cvs

The free revision control systems. Important things, not least because the roles they play for bazaar development on the net.

ddd

A free, visual debugger. Very nice. Not quite up to proprietary IDE tools, but getting there.

About GNU, the FSF, Free Software, Open Source and That Pesky Thing - Licenses

(Not here yet)

Links

(Not here yet)

Disclaimer

No project or company has asked me to write this, nor have they agreed or sponsored it. It is only my opinions. No guarantees or promises. It's free advice, based on what I believe.
Windows, Mac, Apple, Microsoft, Unix, Mach, Sun, StarOffice and lots of other names mentioned above, are trademarks, registered trademarks or otherwise connected to owners, products or companies. In no way are they connected to the author.