So I've been asked in a post about Windows vs. Linux.

I've actually been asked numerous times about this – being the only Linux advocate that I know, and having converted a couple people, I've had to think about this a lot. So I'll just dedicate this post to that topic. There's nothing else really going on anyway; just studying my ass off for finals.

There are quite a few key differences between Windows and Linux that need to be brought to light. I realize that I'm jumping around between pros and cons, so you have to read it all. However, I don't believe that a simple pro-con list proves very much.

Linux is open source, and Windows is proprietary. This is one of the primary draws of Linux – it's free. You can grab any Linux distribution for free, install it, and run it, for no cost. (Well… maybe the cost of a blank CD or two) Most of the software on Linux also follows this philosophy – you can download, install, and run the software at no cost. I haven't bought a single application since I started running Linux.
A lot of people, however, claim that because Linux is open source, no one manages it. There is no support – a very important factor for businesses, especially large ones. But there are quite a few vendors that sell "Enterprise versions" or some equivalent. In this case, you're not paying for the software; you're paying for the support that you get from that company. So businesses can buy Red Hat Enterprise Linux, and call up Red Hat's support anytime there's a problem.
And best of all… even if you pay for enterprise Linux w/ support, it's still cheaper than if you had gone with windows.

Windows owns over 90% of the market share. There's really no way around this. The percentage of people in the world that run Linux is… well… in the single digits. This means that all the companies developing really good applications, games, whatever, are going to do it for Windows – they want to sell it to as many people as possible. A lot of applications have clones/equivalents: For Winamp, there's XMMS. For MS Office, there's OpenOffice.org. For Excel, there's Gnumeric. Etc. In fact, there's a decent table of Linux equivalents here: http://linuxshop.ru/linuxbegin/win-lin-soft-en/table.shtml . However, there are those certain exceptional programs that really don't have an equal – there's no way to replace Adobe Photoshop. The Gimp is a decent equivalent, but it's not nearly as powerful as Photoshop. Propellerhead software's Reason virtual audio rack / tracking system? No equivalent. There aren't exactly 3D modeling programs that can measure up to 3D studio max. And, of course, it's not like you can really trivially write a clone of a game like Halo or something.
Fortunately, there are a couple game companies that are pro-Linux. John Carmack of Id Software is very pro-Linux – in fact, I think he codes his game engines in Linux and then cross-compiles or ports it over to Windows. And so, quite often, Id will post Linux binaries of their game on the ftp or something, which you can use with a copy of the game to play. Since the code is written on Linux originally, a lot of times, I've seen Id games running better on Linux than they do on Windows. And they've released the source code to a bunch of their old games – doom, etc. And Unreal Tournament and it's sequels have Linux binaries.
But these are exceptions – most games will not make it onto Linux. Not only that, but a lot of times, companies don't like to support Linux drivers as much, since they don't see a point. Nvidia is one of the few companies that develops/releases Linux drivers in parallel with their windows drivers. ATI, on the other hand, has crappy Linux drivers.
If you're a person who plays games or has need for a certain program with certain capabilities, you might want to stick with Windows, or at least run a dual-boot system with Linux and windows. Hell, even I still have a windows partition that I use for games.
But in most cases, there are Linux equivalents that are as good as, if not better than the windows programs. I mean, it's not just a farce that over half of the web servers in the world run the Apache web server, which runs on Unix/Linux.

Linux is more secure than windows. I mean, come on. Unless you've been living under a rock for the past 5 years, you know about windows' virus and worm history. Not only that, but Microsoft is really negligent in providing patches / fixes. Look at the number of security holes that are _still_ open in windows. All that invasive spyware and adware. And I think Microsoft decided to release patches once a month, so lazy system administrators don't have to update all the time.
Linux, on the other hand, has not had nearly as many issues. Plus, the security fixes are quite fast, once the person(s) running the project are aware of the hole. I remember one time when a security hole was found in KDE, and the issue was fixed in less than half an hour.

Decentralization. Linux is not run by any one company. It is fueled by volunteer programmers all around the world. There are a couple advantages to this:

Freedom of choice. People are writing different programs that do the same thing in Linux – and so, you have different projects to choose from. Need a GUI/window manager? You don't have to use one GUI created by a company. (And in my opinion, the windows interface is bloated and ugly). You've got a choice – you can choose from Gnome, KDE, fvwm, fluxbox, icewm, ion, ratpoison, aewm, afterstep, amiwm, blackbox, enlightenment, ctwm, evilwm, gnustep, metacity, openbox, pekwm, sawfish, waimea, windowmaker, xfce, xpde, etc – the list goes on. And each one has its own features, drawbacks, properties, etc – you can choose which one suits you the best. This applies to many other aspects, too. For example, filesystems. In Windows, you can choose between FAT32, which has no journaling at all, and NTFS, which only has very basic metadata journaling. Your File Allocation Table will be correct, but there's no guarantee on the integrity of the data. Compare this to the choice of filesystems on Linux. Reiserfs, which is extremely fast, especially dealing with small files (Good for the system install). Ext3, which is quite stable, backwards compatible with Linux's original ext2 filesystem, and has various journaling options for data stability/integrity – metadata journaling, ordered journaling, and full data journaling. XFS, a mature filesystem from SGI designed to handle extremely large files. JFS, a filesystem from IBM that I can't say much about, since I've never used it. Reiser4, a new (in testing, soon to be released), extremely fast filesystem with advanced features like fully atomic writes (meaning no corrupt files… the write either happens, or it doesn't), using files as directories, etc.

Quality. Windows is written by paid programmers, while Linux is run by (mostly) unpaid volunteer programmers. The motivation is different. Paid programmers usually just want to get their job done and get their money. Volunteers, on the other hand, write their code for free because they genuinely have an interest in what they're writing/contributing to, and want to make it better. I'm not saying that Microsoft's programmers are poor – quite the opposite, in fact. You don't just pull an OS like Windows out of your ass. That definitely took some skill to make. (And, if you've seen the leaked windows source code, you can attest that it's not just a bunch of crap. Err… not that I have, or anything… *looks around suspiciously*) However, Linux programmers do it… err… 'for the love of the code,' I guess. There is more dedication to the code they're writing.

Innovation. In a given group of people, only certain ideas are going to form. The Microsoft programmers are only going to come up certain ideas. Some things just won't occur to them – whether it's way of thinking, experience, whatever. (Not that Microsoft innovates – they steal all their ideas, anyway) Linux, however, has a group of people all over the world that contribute to it. Not only that, but anyone can contribute at any time. Some Linux developer, in some random place in the world, has an idea, writes the code, and contributes it. Linux is able to grow with new features and additions all the time. Linus Torvalds, the man who wrote Linux, once likened it to a system in nature. To paraphrase: in Linux, new code is being added all the time. It's much like adding variety into a family tree, by introduction of genes from someone not related. New features, development, etc. Microsoft's code, on the other hand, is constantly evolving within itself, without adding outside elements. That's inbreeding.

There are a couple other points that don't really fall under any specific category:

Programming. One time, on a message board, someone posted that Linux was not good for programming at all, and that its users are just playing at being computer scientists. I replied and tore his argument apart.

Any Linux distribution that's worth a rat's ass comes with gcc, the gnu compiler collection. It has compilers and handler libraries for C, C++, Objective-C, Fortran, Java, and Ada, and can be extended to handle a bunch of other languages. Almost every text editor beyond the most basic have syntax highlighting. There are also several powerful IDEs you can install. Once again, this is all for free – how much would you have to pay for CodeWarrior?

Learning curve. Granted, Linux has a learning curve. No one said it was easy. Windows is geared towards the average Joe user who knows shit about computers.
There are a few user interfaces that make things easy for the user (Gnome and KDE). However, at the heart of Linux, it's a command line. This can be very awkward for a person who's never used anything other than windows or mac. (My first computers were DOS, so I was right at home) However, once you learn the command line, you will find that it's extremely powerful – much more powerful than a GUI. And the commands you're executing can be tuned a lot to match your liking. For example, take a look at this line:

for i in /storage/flac/*.flac;do filename="`echo ${i/flac/ogg} | sed -e 's/_/\ /g' | sed -e 's/\.ogg/\ -\ converted-from-flac\.ogg/'`";oggenc -q 8.5 -o "$filename" "$i";mv "$filename" /storage/ogg/;rm "$i";done

Look confusing? It is, if you don't have any experience with the command line. But what it will do is for all the FLAC files in /storage/flac, generate a target filename with the .flac extension replaced by .ogg and all underscores converted to spaces and with -converted-from-flac appended to the name (so Artist – Song – converted-from-flac.ogg), convert the flac to ogg vorbis at quality 8.5 with the output being the new filename; move the new ogg to /storage/ogg, and remove the original flac.

Piece of cake. Just one line. How much more work would that be in windows?

I've also received complaints from the other side; that there's too much coding, and it's causing a headache. No worries. Some of the user interfaces are designed with ease-of-use in mind. For example, GNOME and KDE both have a start-menu-like menu in the lower left corner. Konqueror, the browser that comes with KDE, operates both as a web browser and a filesystem browser, just like internet explorer. You can very well have a system set up where you don't ever have to see a command line at all.

There are a couple compatibility issues. If you write a program with a Linux-specific graphical toolkit (toolkit for the buttons, windows, text boxes, etc), you won't be able to use it on windows. However, one solution is wxWindows – it's a toolkit that works cross-platform. If you compile and run the program on a windows box, it will use the windows native graphical widgets. If you compile and run it on a Linux box, it will use the GTK+2.0 toolkit.
And the other compatibility concern is that if you're designing a web page, you'll be testing it in mozilla (netscape) or opera or something. While you can make it work under these browsers, you can't test it with IE, which over 90% of the world uses, since there's no IE on Linux. However, IE breaks standards all the time, so if it works in mozilla, it probably works in IE.

If you like programming and fucking with source code, then Linux is suited for you since all the software's released as source code.

I could go on forever about Linux. However, I'll stop now and make changes/additions later on. Hope that answers questions.