Thursday, April 19, 2007

What is GNU/Linux?

This is a question I have been getting quite a bit lately and wanted to try and answer it here.

GNU/Linux is a free operating system. The most popular operating systems are Microsoft Windows and Apple's OSX, both with the major difference that they cost money. (Windows Vista will cost ~$190 - ~$400) GNU/Linux is just totally free.

The Name
GNU/Linux is really two different projects; GNU and Linux.

GNU stands for GNU is Not Unix. (Pretty useless huh?) Long story short, GNU is a project to make software totally free for everyone. This is done by computer programmers simply volunteering their time and energy into whatever part of this (gigantic) project that they want. Every single one of them is doing it because they have some itch they want to scratch.

In theory it seems peachy, but in real life there's mean people who don't really care about the collective good of programmers and this is where the GNU GPL comes in. The GNU General Public License is a license that most of the software in the GNU project are licensed under which requires that they distribute the source code with their software, which then allows the user of the program to change it any way they want. The GPL also grants the end user the right to take their modified program and distribute it to others, with the requirement that it is also licensed under the GPL and that credit is given where it's due. Thus, viral freedom.

Example: I go to the GNU website [1] and find a really cool program that draws squares on the screen. Let us call it "SquareD." So I play with this program for awhile and think it's pretty fun, but would be that much cooler if it could draw circles too! So I go back to the GNU website and download the source code for SquareD and after spending my entire spring break working on it, get it to draw circles. So now that it works, I take all this source code (which is still licensed under the GPL) and post it on my blog and say "Hey guys, check out this awesome edit I did to SquareD!"
So now my friends and anyone else who wants to can come download my program (based on SquareD), which I decided to call ShapeD, and play around with it, and even add more features as they like, etc etc. This is where it gets cool. Mr. Dude-who-wrote-SquareD-in-the-first-place sees my blog post about ShapeD and is also very impressed with it's ability to draw circles. So he promptly downloads my source code, figured out what I changed from SquareD, and reapply it to SquareD. Now, SquareD can draw circles! I was able to add the needed feature I needed for my personal use, and once I made it, others were able to take it and apply it somewhere else where it was needed.

So in short GNU is a project to make an entire operating system out of software that is all free and open to change from anyone who wants to make the changes.

The GNU project is great and making tons of progress all the time, but it's missing one critical part: a kernel. The kernel of an operating system is the engine of a car. It handles all the parts of the computer and gives the users software somewhere to run. The kernel for the GNU project was a little overambitious and is still in it's infancy, even after many years of development.

Que the entrance of Linus Torvalds [2], a 21 year old Finnish programmer, who just for the fun of it, wrote his own operating system. Unfortunately all the software you need for an operating system is a lot of work, so eventually he decided to license it under the GNU GPL so he could then draw on all of that software for his operating system. The first version of Linux was around 10,000 lines of code, and others were impressed with it. And since it was licensed under the GPL, others could also work on it and give back improvements to Linus. Thus through 15 years of work by thousands of programmers, the Linux kernel has grown to several million lines of code and a usable substitute for the unfinished GNU kernel.

So now what?
So now that we have a free operating system, where do we get it, and how do we use it?
This is where Distributions come into play. A Linux distribution, or distro for short, is the Linux kernel, a lot of GNU software, and anything else they want to add, all compiled into one system that we as users can download and install on our computers.

Each distro is different, be it in how it handles software or what it's designed to do. A distro can focus on being fast and efficient or on having absolutely amazing graphics, or just being a good general purpose computer.

Where to Start
So now comes the dilemma. There is literally hundreds upon hundreds of distros out there. Some maintained better than others, if even at all. Some cost money while most are free. Some don't even have a graphical interface and everything is run through the command prompt.

Personally, I have been using Ubuntu [3] for almost a year now, and as far as desktop distros are concerned, it really is one of the best. One of the problems about Linux that it fixes is that Linux doesn't hid anything from the user. If something goes wrong, it will give you a 1,000 line long error message telling you exactly what went wrong. Which would be great, but none of us stand a chance of understanding what that means... Ubuntu hides a lot of this and really has made giant strides toward making Linux a very friendly operating system to use.

In Conclusion
So I've been using Linux as my secondary system for around a year, and really started doing some serious work on it around two months ago. Fortunately you don't need to sacrifice your current operating system to just try it out once. Ubuntu offers an ability where you put the CD in your computer, reboot, it boots off the CD, and you can interact with the operating system exactly as it will be if you install it, without it touching your hard drive at all. The whole process of downloading a CD and burning it get a little complicated, so if anyone would like to try it out, just let me know and I'll be able to hook you up with a CD to try out on your computer.