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 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.  
    
  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.
    
  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 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.
    
  Another large company-backed Linux distribution.
    
  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.
    
  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
    
  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 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
    
    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.
    
  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 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.
    
  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.
    
  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
    
  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.
    
  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.
    
  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.
    
  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
    
  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.
    
  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.
    
  The free revision control systems. Important things, not least because
the  roles they play for bazaar development on the net.
    
  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.