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.