The following is an account of a long time Microsoft Windows user's first in depth exploration of Linux. In it I describe why I chose to give Linux a try and what I found. The results were surprising. Of course, I had a lot of assumptions about Linux and what I would find. Some of these turned out to be true, but some were wrong for reasons I didn't expect. The experience has changed me as a user in what I can do with software, what I can expect out of software, and what I see possible with software.
First, a little about myself and where I'm coming from. I'm a programmer. I work for a major technology company. Since I write software, I have pretty high expectations of the software I use. Let me say that I'm not an OS zealot and I'm also not a cynic. Sure, back in college I got my fair share of amusement out of the comp.os.*.advocacy newsgroups. However, I'm not religious about these things. This is an article about Windows and Linux, not Microsoft and Linux. I'm not going to debate what is good and evil about Microsoft. I'm just a hard core power user who wants the most out of my system.
I've used Windows for over 6 years. My first real computer came with Windows 3.0. I remember when Windows didn't have built in networking and file sharing. I used Windows when Terminal was the only decent communications software around and you were thankful for it. Hell, when I started using Windows, they didn't even have After Dark flying toaster screen savers.
At work, I develop all of my software on Windows NT. Why the desire to give Linux a try? I told myself I wanted to try something different. Forcing yourself to be exposed to new things generally has a beneficial effect on your perspective. But the real reason was that I had reached limits with Windows. As I've become more skilled technically, I've exploited more and more of Windows. It was happening with increasing frequency that I wanted some aspect of Windows to work a certain way and it couldn't. I wanted more power at the command line. I wanted more control over positioning of windows on my desktop. I wanted to be able to do certain functions with the keyboard, not the mouse. I had heard that users who want the ultimate in power and flexibility use Linux.
All this prompted a trip to the local bookstore where I returned home with a copy of Red Hat Linux 5.0. I had heard that Red Hat was a fairly popular distribution of Linux. I picked up a couple of books as well (Dr. Linux and Running Linux). I'm quite familiar with setting up partitions and configuring devices, as I've installed Windows on numerous computers over the years. This helped this install process go smoothly. The install program made me a little nervous as there was no "Back" button (I've heard they've since added this in Red Hat 5.1). About 30 minutes later I was greeted with a login prompt. Getting Linux up and running as about what I expected--lots of editing config files. Getting my window manager up and running turned out to be pretty easy. Poking around on the Internet beforehand I had read horror stories about the dreaded "XF86Config file." It's even worse if you have a laptop which I do. The documentation talks all about how you can melt your monitor if you specify the wrong settings and scary stuff like that. I looked at the sample XF86Config file: Modelines, Option "nonlinear," DACSpeed--yuk. If I never have to edit that file again it'll be too soon. I felt like I was moving along at 2 miles an hour because of all the baby steps I had to take. To get my PPP connection going I had to get my modem working. To get my modem working I had to get my PCMCIA controller working. To get my PCMCIA controller working I had to edit a config file. To edit the config file I had to learn vi. You get the point. On Linux I had to manually configure my SoundBlaster sound card for crying out loud. I want power and flexibility out of my OS, but recognizing and configuring devices is not something I want to waste my time on.
To be fair, I was surprised at the breadth of devices that Linux supports. I figured a free OS would have poor driver support. I've never heard of OEMs writing drivers for Linux. The list of hardware that Linux runs on is incredible given no one company owns Linux. It has drivers for the latest 3D accelerator cards and Iomega Zip drives. It runs on a large number of hardware architectures. I read recently that someone had ported it to the Palm Pilot--amazing! The broad driver support is a testament to the cooperative and technical nature of its user base. The broad ranges of hardware architectures supported is a testament to the solid technical design behind Linux. Another article I read talked about how a group hooked up a bunch of computers running Linux and made it into a super cheap super computer. Linux runs on range of systems from the little Palm Pilot to a super computer. This is stuff you just can't do with Windows.
Once I got it up and running, I tried to use it everyday. I informally measured my progress with it by how often I got frustrated and switched back to Windows to get something done. Some time later I realized that I hadn't booted Windows in weeks. Now, I use Linux all the time. Web sites like www.slashdot.org, www.freshmeat.net, and www.osnews.com keep me up to date with what's going on in the Linux world. I can't believe some of the things I've seen. Mirabilis, makers of the popular Internet paging and messaging program ICQ, didn't do a good enough job of supporting the Linux platform. What did the Linux users do? They reverse engineered the ICQ protocol and wrote their own ICQ clones! This "the rules be damned, we'll do it our own way" mindset seems to be the spirit of the Linux community. If it's no good, change it. If it doesn't exist, invent it. If you want it to work a certain way, then code it up yourself. May the source be with you.
I've come a long way in just a short time with Linux. Now, I'm downloading my own window managers (WindowMaker currently), tweaking their makefiles, and installing them myself. I'm writing shell scripts in vi and loving it. I'm not sure how I lived without virtual desktops. This is not to say Linux is perfect. As a power user I love it, but there are still some things I like about Windows better. Now, I'm going to compare the two environments. I'm not going to touch on all aspects (and couldn't if I wanted to anyway). I'll talk about what I like and dislike about both Linux and Windows.
A typical Linux environment (with GNU tools or their non-GNU counterparts) consists of many very focused tools. Because of the way the shell and these tools are designed, they can be made to work together to accomplish a wide variety of complex tasks. Each tool (grep, sed, awk, etc.) is very rich in function. Linux is largely text based (configuration, scripts, documentation) and so these tools, which operate on text input and produce text output, work very well together. In contrast, Windows uses a lot of binary files to store information which you need unique tools to manipulate. These unique tools (e.g. the registry editor) are invariably lacking in features (like regular expression searching). Windows still doesn't come with a graphical utility to manipulate simple zip files. People from a Windows background have a hard time understanding why you would want to use the command line. This is because the command line in Windows is so poor. NT's command line does have some nice features like tab filename completion (turned off by default) and it understands UNC path names. But a bash or korn shell running on Linux has all of this and more. When you get to things like shell scripts, aliases, job control, and command line editing, there's really no comparison. Actually, using Linux makes me more productive on NT. Since using Linux, I've downloaded the Cygnus Win32 ports of the GNU tools and run zshell on NT.
Contrary to what I've heard the documentation in Linux is actually very good (albeit somewhat obtuse at times). Man pages, info pages, and HOWTOs are great sources of information. The documentation that comes with Windows is horrible. There is better documentation, but you have to buy it (e.g. NT Resource Kit). I wish the books I bought about Windows had half of the quality that goes into a typical O'Reilly UNIX book.
Anything in Linux is customizable. Though I'm sure that this statement is not always true, I haven't disproven it yet. You can customize your shell, your desktop, and your commonly used programs. You can change your window manager. It's been said that you can customize Windows. Apparently the word customize is taken pretty lightly in the Windows world. In Linux, you can customize your kernel, and users do, thinking nothing of it. Wow.
Linux understands what it means to run in a network. I've help set up a bunch of Windows PCs for a company before. Installing programs, customizing Windows, and configuring hardware on the machine, really does mean a lot of walking around with floppy disks or CDs in your hand, going from machine to machine. Of course there are tools to help automate installation of software, backup of users data, etc., but you have to buy these tools. Between NFS, telnet, rlogin, rsh, exporting the display of X, I'd be surprised if I ever had to leave the office as a Linux sysadmin.
On the other hand, Windows is easy to install and set up on a PC. Of course there are exceptions, but I've found no OS easier to install than Windows (I've never used a Mac so I can't comment about it). Plug and Play (PnP), which I never believed would work like they said it would, actually works very well. I don't really care what IRQ or DMA my peripherals are using. One nice thing about Windows is that it handles all the hardware configuration for you. The first time you boot up Windows it figures out the devices you have installed on your computer and installs the drivers for them. A reboot later, you're ready to go. My laptop and printer have an infrared port. One day for kicks I pointed my laptop at my printer. Windows detected the printer through the infrared port and installed the driver for it automatically. Five seconds later I had a printed test page. Now that's how an OS should handle hardware. Since Windows is so popular it has great hardware support. Drivers are plentiful and current. Windows has support for the latest and greatest in technologies (e.g. USB, AGP). Managing these devices in Windows is easy too. Right click on My Computer in Windows and you can bring up Device Manager. This is a hierarchical view of all the devices on your system--one place to go to view information on your video card, hard drive, processor, modem, network card, etc.
Windows has great application support. In commercial software today the Windows Application Programming Interface, Win32 API, rules the world. Because it makes business sense, a lot of independent software vendors (ISVs) write their software first on Windows and then port it to other platforms. Windows gets the latest and greatest first. Applications like Microsoft Word, Excel, and PowerPoint are best of breed. I don't understand why someone would think troff or LaTex is better than a Microsoft Word or WordPerfect for document formatting unless you like to fill your head with oodles of mind numbing formatting codes. The GUI development environments are nice (Visual C++ and Symantec Cafe). The have automatic makefile management, source level debugging, project management, and integrated API help all tied together in one customizable GUI. If you're debugging your program you can hover the mouse over a variable in your source code and a tool tip pops up with its value. You can achieve some of the same functionality on Linux by using a text editor, a debugger, and a makefile, but you have to hook up a lot of things manually. I've seen nothing better than Visio for creating flowcharts and diagrams. The browser with the best native Java support is Internet Explorer 4 for Windows. For graphics manipulation, there is PhotoShop and CorelDRAW. The list goes on and on. I think most people who have used a Visual C++, Visual Basic, or Visual Cafe must laugh when they find out vi stands for "VIsual editor."
The Windows Explorer is a great piece of software. Compared to any graphical file manager on Linux, Explorer has it beat. Some try to copy its look, but Explorer goes beyond just a nice looking file manager. Right click on a file and you have a customized set of actions that you can do on it. If you have just written your super spiffy ftp client program and want to show the ftp sites in explorer, you can do that. Your whole computer from its local drives, to its networked drives, to web sites are all integrated into one view. Each file type has a customized icon. A .xyz file from one company can have a different icon than a .xyz file from another company, even though they have the same extension. I like how Explorer is integrated into Windows. It's not just an application that you start up. It is the interface to Windows. The benefits this provide trickles down to all sorts of areas like file open dialogs, the desktop, and the taskbar. If you're saving a file in your favorite Windows application, you can create directories, rename other files, and access machines across the network in the save file dialog. This is because Windows file open and save dialogs use Explorer. Microsoft has spent millions of dollars on combining the best of usability and functionality. They have done a great job with Explorer. Now, they have integrated web browsing into Explorer (merging Explorer and Internet Explorer). Antitrust issues aside, this is one great piece of functional software.
Linux has some great software too. Emacs is a great text editor (some, I've heard, consider it their operating environment). The quality and richness that the compilers, X servers, and window managers offer is amazing considering that they are free. I've found that while the software on Linux is not as easy to use as Windows, it is often times more functional and more stable. But, the most important thing to realize about the software on Linux is how it was developed. This development model is really the key to Linux and it's most important asset. This is something that Microsoft can't out-innovate or build into Windows. Most software you use in Linux is free. I'm not talking about free in the sense that you don't have to pay money for it. It is free with regard to liberty. You can do what you want with the software. You are free to change it in any way and redistribute your changes, so long as you don't hinder another's ability to do the same. Since the user community is largely technical in nature, what you end up with is system where the producer and the consumer are the same person. Free source is the key to the success of this model. A developer doesn't have to start from scratch when writing a piece of software. He can take something that's already out there and improve it. If he redistributes it, other users are free to do the same. The most baffling aspect about this cooperative, distributed, uncontrolled process is that it really works, and it works well. Most companies in the Windows world would never release their source. Since each company must shoulder the burden of software development alone, you end up with a lot of competition, but little improvement.
There are, of course, many areas left to compare, but it would take a book to do that topic justice. I like what I've seen in Linux so far. I'm not really comfortable yet with all of the manual things you have to do (compile your programs, tweak makefiles, update system libraries, and configure everything in a some .config file). This is because I'm not used to doing them and, in time, I'll think nothing of it. I've learned that you can't really appreciate working in a Windows or a Linux environment without embracing some of the philosophy that went into its design. Windows tries to hide you from some of the underlying technical details of what is going on. That's why hooking up devices, configuring your ppp connection, and browsing and using a network are so easy. Rather than provide you with every possible option, Windows simplifies and only exposes so much. Windows has turned out to be a great, easy to use, general purpose operating system for the masses--something Linux has never tried to be. Linux, on the other hand, wants to give you the ability to anything and everything. "No limits" might well be Linux's mantra. The open source development model bereft of ego and pocketbook driven copyrighting and patenting works to achieve a higher goal. That is, better software for everyone.
John Lambert can be reached at firstname.lastname@example.org.