In this section, we’ll introduce you to many of the software applications available for Linux and talk about a number of common computing tasks. After all, the most important part of the system is the wide range of software available for it. What’s even more impressive on Linux is that most of this software is freely distributable.
Virtually every utility you would expect to find on standard implementations of Unix has been ported to Linux. This includes basic commands such as ls, awk, tr, sed, bc, more, and so on. There are Linux ports of many popular software packages including Perl, Python, the Java Development Kit, and more. You name it, Linux has it. Therefore, you can expect your familiar working environment on other Unix systems to be duplicated on Linux. All the standard commands and utilities are there.
Many text editors are available, including vi (as well as “modern” versions, such as vim), ex, pico, and jove, as well as GNU Emacs and variants, such as XEmacs (which incorporates extensions for use under the X Window System) and joe. Whatever text editor you’re accustomed to using has more than likely been ported to Linux.
The choice of a text editor is an interesting one. Many Unix users still use “simple” editors such as vi (in fact, the first edition of this book was written using vi under Linux). However, vi has many limitations due to its age, and more modern (and complex) editors, such as Emacs, are gaining popularity. Emacs supports a complete LISP-based macro language and interpreter, a powerful command syntax, and other fun-filled extensions. Emacs macro packages exist to allow you to read electronic mail and news, edit the contents of directories, and even engage in an artificially intelligent psychotherapy session (indispensable for stressed-out Linux hackers). In Chapter 9, we include a complete vi tutorial and describe Emacs in detail.
One interesting note is that most of the basic Linux utilities are GNU software. These GNU utilities support advanced features not found in the standard versions from BSD or AT&T. For example, GNU’s version of the vi editor, elvis, includes a structured macro language. However, the GNU utilities strive to remain compatible with their BSD and System V counterparts. Many people consider the GNU versions of these programs superior to the originals. Examples of this are the GNU gzip and bzip2 file-compression utilities, which compress data much more efficiently than the original Unix compress utility. (Of course, if you want to be “old school,” you can still use programs like ex and compress. This is a good way to impress your friends who are probably used to using a cushy point-and-click GUI for everything.)
The most important utility to many users is the shell. The shell is a program that reads and executes commands from the user. In addition, many shells provide features such as job control (allowing the user to manage several running processes at once — not as Orwellian as it sounds), input and output redirection, and a command language for writing shell scripts. A shell script is a file containing a program in the shell command language, analogous to a “batch file” under MS-DOS.
Many types of shells are available for Linux. The most important difference between shells is the command language. For example, the C shell (csh) uses a command language somewhat like the C programming language. The classic Bourne shell uses a different command language. One’s choice of a shell is often based on the command language it provides. The shell that you use defines, to some extent, your working environment under Linux.
No matter what Unix shell you’re accustomed to, some version of it has probably been ported to Linux. The most popular shell is the GNU Bourne Again Shell (bash), a Bourne shell variant. bash includes many advanced features, such as job control, command history, command and filename completion, an Emacs-like (or optionally, a vi-like) interface for editing the command line, and powerful extensions to the standard Bourne shell language. Another popular shell is tcsh , a version of the C shell with advanced functionality similar to that found in bash. Other shells include the Korn shell (ksh), BSD’s ash, zsh, a small Bourne-like shell, and rc, the Plan 9 shell.
What’s so important about these basic utilities? Linux gives you the unique opportunity to tailor a custom system to your needs. For example, if you’re the only person who uses your system, and you prefer to use the vi editor and the bash shell exclusively, there’s no reason to install other editors or shells. The “do it yourself” attitude is prevalent among Linux hackers and users.
Almost every computer user has a need for some kind of document preparation system. (In fact, one of the authors has almost entirely forgotten how to write with pen and paper.) In the PC world, word processing is the norm: it involves editing and manipulating text (often in a “What-You-See-Is-What-You-Get” [WYSIWYG] environment) and producing printed copies of the text, complete with figures, tables, and other garnishes.
In the Unix world, text processing is much more common, which is quite different from the concept of word processing. With a text processing system, the author enters text using a “typesetting language” that describes how the text should be formatted. Instead of entering the text within a special word processing environment, the author may modify the source with any text editor, such as vi or Emacs. Once the source text (in the typesetting language) is complete, the user formats the text with a separate program, which converts the source to a format suitable for printing. This is somewhat analogous to programming in a language such as C, and “compiling” the document into a printable form.
Many text-processing systems are available for Linux. One is groff, the GNU version of the classic troff text formatter originally developed by Bell Labs and still used on many Unix systems worldwide. Another modern text processing system is TEX, developed by Donald Knuth of computer science fame. Dialects of TEX, such as LATEX, are also available, as are numerous extensions and packages. One example is PDF&LATEX, a package that Adobe generates PDF files directly from LATEX documents.
Text processors such as TEX and groff differ mostly in the syntax of their formatting languages. The choice of one formatting system over another is also based upon what utilities are available to satisfy your needs, as well as personal taste.
For example, some people consider the groff formatting language to be a bit obscure, so they use TEX, which is more readable by humans. However, groff is capable of producing plain ASCII output, viewable on a terminal, while TEX is intended primarily for output to a printing device. Still, various programs exist to produce plain ASCII from TEX-formatted documents or to convert TEX to groff, for example.
Another text processing system is Texinfo, an extension to TEX used for software documentation by the Free Software Foundation. Texinfo is capable of producing a printed document, or an online-browsable hypertext “Info” document from a single source file. Info files are the main format of documentation used by GNU software, such as Emacs.
Text processors are used widely in the computing community for producing papers, theses, magazine articles, and books. (In fact, this book was originally written in the LATEX format, filtered into a home-grown SGML system, and printed from groff by the publisher.) The ability to process the source language as a plain-text file opens the door to many extensions to the text processor itself. Because source documents are not stored in an obscure format, readable only by a particular word processor, programmers are able to write parsers and translators for the formatting language, thus extending the system. This approach closely follows the Unix philosophy of building up applications as a set of smaller tools that work together, rather than as large, monolithic “black box” systems.
What does such a formatting language look like? In general, the formatting language source consists mostly of the text itself, along with “control codes” to produce a particular effect, such as changing fonts, setting margins, creating lists, and so on.
The most famous text formatting language is HTML, the markup language used by virtually every page on the World Wide Web. Another popular text processing language is Docbook, a kind of industry-standard set of tags for marking up technical documentation, which is also used by the Linux Documentation Project (to be discussed later in this chapter). Here is what one of the earlier paragraphs looks like written in Docbook:
<sect2><title>Basic Commands and Utilities</title> <para> Virtually every utility you would expect to find on standard implementations of Unix has been ported to Linux. This includes basic commands such as <command>ls</command>, <command>awk</command>, <command>tr</command>, <command>sed</command>, <command>bc</command>, <command>more</command>, and so on. There are Linux ports of many popular software packages including Perl, Python, the Java Development Kit, and more. You name it, Linux has it. Therefore, you can expect your familiar working environment on other Unix systems to be duplicated on Linux. All the standard commands and utilities are there. </para>
At first glance, the typesetting language may appear to be obscure, but it’s actually quite easy to learn. Using a processing system enforces typographical standards when writing. For example, all enumerated lists within a document will look the same, unless the author modifies the definition of the enumerated list “environment.”
The primary goal of typesetting languages is to allow the author to
concentrate on writing the actual text, instead of worrying about
typesetting conventions. When the example just shown is printed, the
<command> tags will be printed
using whatever font, color, or other convention the publisher has
chosen, and a command index can easily be generated too. Furthermore,
the correct chapter number and title are plugged in where the
<xref> tag was written, so
they are correct even if the authors reorder the chapters after
writing the paragraph.
While there are WYSIWYG editors for HTML, getting used to entering tags by hand, like those in the previous example, actually takes only a little practice. The more advanced text editors, such as Emacs and vim, have special macros and environments for editing HTML, LATEX, and other documents, and include nice features such as special fonts and colors to represent different kinds of tags. Tools can then generate output in a standard format, such as PostScript or PDF, and display it on the author’s screen or send it to a printer.
WYSIWYG word processors are attractive for many reasons; they provide a powerful, and sometimes complex, visual interface for editing the document. However, this interface is inherently limited to those aspects of text layout that are accessible to the user. For example, many word processors provide a special “format language” for producing complicated expressions such as mathematical formulae. This format language is identical to text processing, albeit on a much smaller scale.
The subtle benefit of text processing is that the system allows you to specify exactly what you mean. Also, text processing systems allow you to edit the source text with any text editor, and the source is easily converted to other formats. The tradeoff for this flexibility and power is the lack of a WYSIWYG interface. Many users of word processors are used to seeing the formatted text as they edit it. On the other hand, when writing with a text processor, one generally doesn’t worry about how the text will appear once it’s formatted. The writer learns to expect how the text should look from the formatting commands used in the source.
There are programs that allow you to view the formatted document on a graphics display before printing. One example is the xdvi program, which displays a “device-independent” file generated by the system under the X Window System. Other software applications, such as xfig, provide a WYSIWYG graphics interface for drawing figures and diagrams, which are subsequently converted to the text processing language for inclusion in your document.
Many other text processing utilities are available. The powerful METAFONT system, used to design fonts for TEX, is included with the Linux port of TEX. Other programs include ispell, an interactive spell checker; makeindex, an index generator for LATEX documents; and many groff and TEX-based macro packages for formatting various types of documents and mathematical texts. Conversion programs are available to translate between TEX or groff source and many other formats.
There has been a groundswell of support by commercial application developers for Linux. These products include office productivity suites, word processors, scientific applications, network administration utilities, and large-scale database engines. Linux has become a major force in the commercial software market, so you may be surprised to find how many popular commercial applications are available for Linux. We can’t possibly discuss all of them here, so we’ll only touch on the most popular applications and briefly mention some of the others.
StarOffice is a complete office productivity suite for Linux, released by Sun Microsystems (originally developed by a smaller company called Star Division, which was bought by Sun). This suite, which is also available for Windows and Solaris, is more or less a clone of Microsoft Office, including a word processor, spreadsheet, HTML editor, presentation manager, and other tools. It is capable of reading file formats from a wide range of similar applications (including Microsoft Office) and is available for free download for noncommercial use.
Corel has released WordPerfect Office 2000 for Linux, another office suite which includes a word processor, spreadsheet, presentation software, personal information manager, and other applications. It is free for personal use and commercial licenses are also available. Corel has also released the CorelDRAW professional graphics suite for Linux.
Oracle, IBM, Informix, Sybase, and Interbase have released commercial database engines for Linux. Many of the Linux database products have demonstrated better performance than their counterparts running on Windows 2000 systems.
One very popular database for Linux is MySQL, a free and easy-to-use database engine available from http://www.mysql.com. Because MySQL is easy to install, configure, and use, it has rapidly become the database engine of choice for many applications that can forego the complexity of the various proprietary engines. Furthermore, even though it’s free software, MySQL is supported professionally by the company that developed it, MySQL AB. We describe the basic use of MySQL in Chapter 18.
MySQL does not include some of the more advanced features of the proprietary databases, however. Some database users prefer the open source database PostgresSQL, and Red Hat features it in some of its products.
A wide range of enterprise applications are available for Linux in addition to databases. Linux is one of the most popular platforms for Internet service hosting, so it is appropriate that high-end platforms for scalable web sites, including BEA WebLogic and IBM WebSphere, have been released for Linux. Commercial, high-performance Java Virtual Machines and other software are available from Sun, IBM, and other vendors. IBM has released the popular Lotus Domino messaging and web application server, as well as the WebSphere MQ (formerly MQSeries) messaging platform.
Scientists, engineers, and mathematicians will find that a range of popular commercial products are available for Linux, such as Maple, Mathematica, MATLAB, and Simulink. Other commercial applications for Linux include high-end CAD systems, network management tools, firewalls, and software development environments.
Linux provides a complete Unix programming environment, including all the standard libraries, programming tools, compilers, and debuggers that you would expect to find on other Unix systems. The most commonly used compiler on Linux is the GNU’s Compiler Collection, or gcc . gcc is capable of compiling C, C++, Objective C (another object-oriented dialect of C), Chill (a programming language mainly used for telecommunications), FORTRAN, and Java. Within the Unix software development world, applications and systems programming is usually done in C or C++, and gcc is one of the best C/C++ compilers around, supporting many advanced features and optimizations.
Java, a relative newcomer on the programming-language scene, is fully supported under Linux. Several vendors and independent projects have released ports of the Java Development Kit for Linux, including Sun, IBM, and the Blackdown Project (which did one of the first ports of Java for Linux). Java is an object-oriented programming language and runtime environment that supports a diverse range of applications like web page applets, Internet-based distributed systems, database connectivity, and more. Programs written for Java can be run on any system (regardless of CPU architecture or operating system) that supports the Java Virtual Machine. A number of Java “just-in-time” (or JIT) compilers are available, and the IBM and Sun Java Development Kits (JDKs) for Linux come bundled with high-performance JIT compilers that perform as well as those found on Windows or other Unix systems. IBM has released VisualAge for Java, a complete Java integrated development environment. gcc is also capable of compiling Java programs directly to executables, and includes limited support for the standard JDK libraries.
Besides C, C++, and Java, many other compiled and interpreted programming languages have been ported to Linux, such as Smalltalk, FORTRAN, Pascal, LISP, Scheme, and Ada. In addition, various assemblers for writing machine code are available. A network of open source developers is developing a project called Mono with the goal of duplicating the building blocks of Microsoft’s .NET project on Unix and Linux systems. Perhaps the most important class of programming languages for Linux are the many scripting languages, including Perl (the script language to end all script languages), Python (the first scripting language to be designed as object-oriented from the ground up), and Tcl/Tk (a shell-like command-processing system that includes support for developing simple X Window System applications).
Linux systems make use of the advanced gdb debugger, which allows you to step through a program to find bugs or examine the cause for a crash using a core dump. gprof, a profiling utility, will give you performance statistics for your program, letting you know where your program is spending most of its time. The Emacs and vim text editors provide interactive editing and compilation environments for various programming languages. Other tools that are available for Linux include the GNU make build utility, used to manage compilation of large applications, as well as source-code control systems such as CVS and Revision Control System.
Linux is an ideal system for developing Unix applications. It provides a modern programming environment with all the bells and whistles, and many professional Unix programmers claim that Linux is their favorite operating system for development and debugging. Computer science students can use Linux to learn Unix programming and to explore other aspects of the system, such as kernel architecture. With Linux, not only do you have access to the complete set of libraries and programming utilities, but you also have the complete kernel and library source code at your fingertips. Chapter 13, and Chapter 14 are devoted to the programming languages and tools available for Linux.
The X Window System is the standard GUI for Unix systems. It was originally developed at MIT in the 1980s with the goal of allowing applications to run across a range of Unix workstations from different vendors. X is a powerful graphical environment supporting many applications. Many X-specific applications have been written, such as games, graphics utilities, programming and documentation tools, and so on.
Unlike Microsoft Windows, the X Window System has built-in support for networked applications: for example, you can run an X application on a server machine and have its windows display on your desktop, over the network. Also, X is extremely customizable: you can easily tailor just about any aspect of the system to your liking. You can adjust the fonts, colors, window decorations, and icons for your personal taste. You can go so far as to configure keyboard macros to run new applications at a keystroke. It’s even possible for X to emulate the Windows and Macintosh desktop environments, if you want to keep a familiar interface.
The X Window System is freely distributable. However, many commercial vendors have distributed proprietary enhancements to the original X software. The version of X available for Linux is known as XFree86, which is a port of X11R6 (X Window System Version 11, Release 6) made freely distributable for PC-based Unix systems, such as Linux. XFree86 supports a wide range of video hardware, including standard VGA and many accelerated video adapters. XFree86 is a complete distribution of the X software, containing the X server itself, many applications and utilities, programming libraries, and documentation. It comes bundled with nearly every Linux distribution.
Standard X applications include xterm (a terminal emulator used for most text-based applications within an X window), xdm (the X Session Manager, which handles logins), xclock (a simple clock display), xman (an X-based manual page reader), and more. The many X applications available for Linux are too numerous to mention here, but the base XFree86 distribution includes the “standard” applications found in the original MIT release. Many others are available separately, and theoretically any application written for X should compile cleanly under Linux.
The look and feel of the X interface are controlled to a large extent by the window manager . This friendly program is in charge of the placement of windows, the user interface for resizing, iconifying, and moving windows, the appearance of window frames, and so on. The standard XFree86 distribution includes several window managers, including the popular fvwm2. fvwm2 provides a number of advanced features, including a virtual desktop: if the user moves the mouse to the edge of the screen, the entire desktop is shifted as if the display were much larger than it actually is. fvwm2 is greatly customizable and allows all functions to be accessed from the keyboard as well as from the mouse.
The XFree86 distribution contains programming libraries and includes files for those wily programmers who wish to develop X applications. Various widget sets, such as Athena, Open Look, and Xaw3D, are supported. All the standard fonts, bitmaps, manual pages, and documentation are included. PEX (a programming interface for 3D graphics) is also supported, as is Mesa, a free implementation of the OpenGL 3D graphics primitives.
While the X Window System provides a flexible windowing system, many users want a complete desktop environment, with a customizable look and feel for all windows and widgets (such as buttons and scrollbars), a simplified user interface, and advanced features such as the ability to “drag and drop” data from one application to another. The KDE and GNOME projects are separate efforts that are striving to provide such an advanced desktop environment for Linux. By building up a powerful suite of development tools, libraries, and applications that are integrated into the desktop environment, KDE and GNOME aim to usher in the next era of Linux desktop computing. Both systems provide a rich GUI, window manager, utilities, and applications that rival or exceed the features of systems such as the Windows 2000 desktop.
With KDE and GNOME, even casual users and beginners will feel right at home with Linux. Most distributions automatically configure one of these desktop environments during installation, making it unnecessary to ever touch the text-only console interface.
While both KDE and GNOME aim to make the Unix environment more user-friendly, they have different emphases. KDE’s main goals are ease of use, stability, and user-interface compatibility with other computing environments (such as Windows 2000). GNOME, on the other hand, aims more at good looks and maximum configurability. We discuss both of these systems in Chapter 11.
Linux boasts one of the most powerful and robust networking systems in the world — more and more people are finding that Linux makes an excellent choice as a network server. Linux supports the TCP/IP networking protocol suite that drives the entire Internet, as well as many other protocols, including IPv6 (a new version of the IP protocol for the next-generation Internet), and UUCP (used for communication between Unix machines over serial lines). With Linux, you can communicate with any computer on the Internet, using Ethernet (including Fast and Gigabit Ethernet), Token Ring, dial-up connection, wireless network, packet radio, serial line, ISDN, ATM, IRDA, AppleTalk, IPX (Novell NetWare), and many other network technologies. The full range of Internet-based applications is available, including World Wide Web browsers, web servers, FTP, email, chat, news, ssh, telnet, and more.
Most Linux users use a dial-up connection through an ISP to connect to the Internet from home. Linux supports the popular PPP and SLIP protocols, used by most ISPs for dial-in access. If you have a broadband connection, such as a T1 line, cable modem, DSL, or other service, Linux supports those technologies as well. You can even configure a Linux machine to act as a router and firewall for an entire network of computers, all connecting to the Internet through a single dial-up or broadband connection.
Linux supports a wide range of web browsers, including Netscape Navigator, Mozilla (the open source spin-off of the Netscape browser), Konquerer (another open source browser packaged with KDE), and the text-based Lynx browser. The Emacs text editor even includes a small text-based web browser.
Linux also hosts a range of web servers, such as the popular and free Apache web server. In fact, it’s estimated that Apache running on Linux systems drives more web sites than any other platform in the world. Apache is easy to set up and use; we’ll show you how in Chapter 16.
A full range of mail and news readers are available for Linux, such as MH, Elm, Pine, trn, as well as the mail/news readers included with the Netscape and Mozilla web browsers. Many of these are compatible with standard mail and news protocols such as IMAP and POP. Whatever your preference, you can configure your Linux system to send and receive electronic mail and news from all over the world.
A variety of other network services are available for Linux. Samba is a package that allows Linux machines to act as a Windows file and print server. NFS allows your system to share files seamlessly with other machines on the network. With NFS, remote files look to you as if they were located on your own system’s drives. FTP allows you to transfer files to and from other machines on the network. Other networking features include NNTP-based electronic news systems such as C News and INN; the sendmail, exim, and smail mail transfer agents; ssh, telnet, and rsh, which allow you to log in and execute commands on other machines on the network; and finger, which allows you to get information on other Internet users. There are tons of TCP/IP-based applications and protocols out there.
If you have experience with TCP/IP applications on other Unix systems, Linux will be familiar to you. The system provides a standard socket programming interface, so virtually any program that uses TCP/IP can be ported to Linux. The Linux X server also supports TCP/IP, allowing you to display applications running on other systems on your Linux display. Administration of Linux networking will be familiar to those coming from other Unix systems, as the configuration and monitoring tools are similar to their BSD counterparts.
In Chapter 15, we’ll discuss the configuration and setup of TCP/IP, including PPP, for Linux. We’ll also discuss configuration of web browsers, web servers, and mail software.
Linux includes a number of laptop-specific features, such as PCMCIA (or “PC Card”) support and APM. The PCMCIA Tools package for Linux includes drivers for many PCMCIA devices, including modems, Ethernet cards, and SCSI adapters. APM allows the kernel to keep track of the laptop’s battery power and perform certain actions (such as an automated shutdown) when power is low; it also allows the CPU to go into “low-power” mode when not in use. This is easy to configure as a kernel option. Various tools interact with APM, such as apm (which displays information on battery status) and apmd (which logs battery status and can be used to trigger power events). These should be included with most Linux distributions.
Various utilities exist to interface with the world of Windows and MS-DOS. The most well-known application is a project known as Wine — a Microsoft Windows emulator for the X Window System under Linux. The intent of this project, which is still under development, is to allow Microsoft Windows applications to run directly under Linux and other Intel-based operating systems. This is similar to the proprietary WABI Windows emulator from Sun Microsystems. Wine is in a process of continual development, and now runs a wide variety of Windows software, including many desktop applications and games. See http://www.winehq.com for details of the project’s progress.
Linux provides a seamless interface for transferring files between Linux and Windows systems. You can mount a Windows partition or floppy under Linux, and directly access Windows files as you would any others. In addition, there is the mtools package, which allows direct access to MS-DOS-formatted floppies, as well as htools , which does the same for Macintosh floppy disks.
Another application is the Linux MS-DOS Emulator, or DOSEMU , which allows you to run many MS-DOS applications directly from Linux. While MS-DOS-based applications are rapidly becoming a thing of the past, there are still a number of interesting MS-DOS tools and games that you might want to run under Linux. It’s even possible to run the old Microsoft Windows 3.1 under DOSEMU.
Although Linux does not have complete support for emulating Windows and MS-DOS environments, you can easily run these other operating systems on the same machine with Linux, and choose which operating system to run when you boot the machine. We’ll show you how to set up the LILO bootloader, which allows you to select between Linux, Windows, and other operating systems at boot time.
Another popular option is to run a system-level “virtual machine,” which literally allows you to run Linux and Windows at the same time. A virtual machine is a software application that emulates many of the hardware features of your system, tricking the operating system into believing that it is running on a physical computer. Using a virtual machine, you can boot Linux and then run Windows at the same time — with both Linux and Windows applications on your desktop at once. Alternately, you can boot Windows and run Linux under the virtual machine. While there is some performance loss when using virtual machines, many people are very happy employing them for casual use, such as running a Windows-based word processor within a Linux desktop. The most popular virtual machines are VMWare (http://www.vmware.com/), which is a commercial product, and Plex86 (http://savannah.nongny.org/projects/plex86), which is an open source project.
A host of miscellaneous applications are available for Linux, as one would expect from an operating system with such a diverse set of users. Linux’s primary focus is currently for personal Unix computing, but this is rapidly changing. Business and scientific software are expanding, and commercial software vendors have contributed a growing pool of applications.
The scientific community has wholly embraced Linux as the platform of choice for inexpensive numerical computing. A large number of scientific applications have been developed for Linux, including the popular technical tools MATLAB and Mathematica. A wide range of free packages are also available, including FELT (a finite-element analysis tool), Spice (a circuit design and analysis tool), and Khoros (an image/digital signal processing and visualization system). Many popular numerical computing libraries have been ported to Linux, including the LAPACK linear algebra library. There is also a Linux-optimized version of the BLAS code upon which LAPACK depends.
Linux is one of the most popular platforms for parallel computing using clusters, which are collections of inexpensive machines usually connected with a fast (gigabit-per-second or faster) network. The NASA Beowulf project first popularized the idea of tying a large number of Linux-based PCs into a massive supercomputer for scientific and numerical computing. Today, Linux-based clusters are the rule, rather than the exception, for many scientific applications. In fact, Linux clusters are finding their way into increasingly diverse applications — for example, the Google search engine uses a cluster of 4,000 Linux machines!
As with any operating system, Linux has its share of games. A number of popular commercial games have been released for Linux, including Quake, Quake II, Quake III Arena, Doom, SimCity 3000, Descent, and more. Most of the popular games support play over the Internet or a local network, and clones of other commercial games are popping up for Linux. There are also classic text-based dungeon games such as Nethack and Moria; MUDs (multiuser dungeons, which allow many users to interact in a text-based adventure) such as DikuMUD and TinyMUD; and a slew of free graphical games, such as xtetris, netrek, and Xboard (the X11 frontend to gnuchess).
For audiophiles, Linux has support for a wide range of sound hardware and related software, such as CDplayer (a program that can control a CD-ROM drive as a conventional CD player, surprisingly enough), MIDI sequencers and editors (allowing you to compose music for playback through a synthesizer or other MIDI-controlled instrument), and sound editors for digitized sounds.
Can’t find the application you’re looking for? A number of web sites provide comprehensive directories of Linux applications. A few of the most popular Linux software directories are Freshmeat (http://www.freshmeat.net), Icewalkers (http://www.icewalkers.com), and Linux on Dave Central (http://linux.davecentral.com/). While these directories are far from complete, they contain a great deal of software, all categorized and rated by users. Take a look at these sites just to see the enormous amount of code that has been developed for Linux.
If you absolutely can’t find what you need, you can always attempt to port the application from another platform to Linux. Or, if all else fails, you can write the application yourself. That’s the spirit of Free Software — if you want something to be done right, do it yourself! While it’s sometimes daunting to start a major software project on your own, many people find that if they can release an early version of the software to the public, many helpers pop up in the free software community to carry on the project.