The Linux operating system consists of a kernel and tools. Figure 1-1 shows the structure of the operating system with the kernel shaded. The diagram is not to scale. The kernel is significantly smaller than the tools and application portions.
Figure 1-1. The Linux structure
A kernel is the program that controls the allocation of the machine's resources to the other programs that are running. Though a kernel is an essential part of an operating system, it is useless on its own. It can serve a useful purpose only as part of a complete operating system. Linux is a UNIX-like system and, as such, it contains most UNIX features such as multitasking, virtual memory, memory management, and TCP/IP networking.
GNU Compiler Collection (GCC)
GCC is a versatile and sophisticated compiler that can compile programs written in several different languages to run on many different hardware platforms. Languages supported include C, C++, Objective-C, Ada, Fortran, and Java. GCC is usually supplied with a Linux distribution, but is also available for download on the Internet.
GNU Binary Utilities
These are a set of utilities supplied as part of a Linux distribution. For example, the utility ar can be used to extract files from the archive file. Also included in the package are the linker ld and the assembler as. If you have acquired Linux as part of a distribution, binutils would have been included with the distribution. If you need to upgrade to the latest release of binutils, go to http://www.gnu.org/directory/index.html.
If you ever need to upgrade your kernel, GCC, glibc, or binutils, you must ensure that the new version is compatible with the rest of your operating system and that you follow the guidelines for compiling the new version. You may also need to recompile some of your programs, making sure you specify the correct libraries.
A distribution normally bundles various applications (such as word processors, spread sheets, Internet browsers, Web servers, fax programs, and graphics programs). Additionally, sophisticated applications are available from many suppliers.
A device driver is a file or program that enables communication between a computer and a specific peripheral device such as a printer. For Linux to be able to use a device, the associated device driver must be available to the Linux kernel. This can be accomplished either by compiling the device driver with the kernel or by making the driver available as a module. Details of the available mainframe device drivers and comprehensive information about their use are documented in Device Drivers and Installation Commands.
To run an application that has already been compiled, you need various support programs and files. A runtime environment provides these items. A runtime environment can simply be a directory that contains the necessary files, such as glibc or libgcj (created by compiler GCJ for Java) or the libg2c library (created by G77 Fortran compiler, part of GCC). Whereas a Java applet can rely on a Web browser to run a Java application, a user needs a Java virtual machine and various support programs and files. This collection of software constitutes a Java runtime environment. Various suppliers provide Java runtime environments for download. See, for example, IBM Developer Kit and Runtime Environment for Linux: http://www.ibm.com/developerworks/java/jdk/118/linux/jre-info.html, or Java 2 Platform, Standard Edition (J2SETM): http://java.sun.com/j2se/1.3/runtime.html.