Before you start
Objectives: learn how the Linux system distributions are built and why is modularity important in the World of Linux.
Prerequisites: no prerequisites.
Key terms: linux, system, kernel, operating, gui, shell, windows, desktop, applications, manager
On top of the hardware there is the kernel of the operating system. The kernel is the core component of the operating system which coordinates communication between the hardware and other software components. The kernel is the only part that is actually Linux, but the kernel alone does not give us an operating system. All other components are add-ons that turn the system into a functional operating system. The kernel is constantly being updated. The current version can be found at www.kernel.org.
A shell is the interface between the user, applications, utilities and the kernel of the operating system. The shell accepts and interprets commands, and forwards them to the kernel. Commands can be entered either from a command prompt or a script. Without a shell we can’t interface with the rest of the operating system. A Linux shell is comparable to the DOS prompt in Windows. Examples of shells are bash and tcsh. bash (Bourne-Again Shell) is the default and most common Linux shell. It is an enhancement of the original Bourne shell (sh). tcsh is an enhanced version of the Berkeley UNIX C-shell (csh).
Applications and Utilities
To form an operating system we need tools and utilities. Utilities are used to manage the system and applications are programs like word processing, video players, etc. Examples of applications and utilities are Vi, Nano (command line text editors), Nautilius and Konqueror (file managers), GIMP, OpenOffice, KOffice, etc.
Besides applications, we have another types of programs that can run on a Linux system. Those are applications that run in the background and provide additional functionality to the system. We call them Deamons. In Windows OS we typically refer to this kind of programs as services. Examples of Deamons are SMB, LPR, Apache, BIND, Sendmail, ipchains, Squid, etc.
To extend the functionality of the Linux operating system, there is also a Graphical User Interface or GUI layer. The GUI is responsible for drawing graphics on the screen. The Linux GUI will work the same way regardless of the video hardware on the computer system. The most common GUI layer is XWindows which works in conjunction with an X Client to render the GUI. Xfree86 is the most common X Client. On top of the GUI we have some kind of desktop environment or window manager. Window manager modifies the GUI output that comes from X Windows. We can use a desktop environment with a window manager. A desktop environment provides software like Web browsers, file managers, and gives us access to common tasks. Example desktop environments are KDE (Kommon Desktop Environment), or Gnome (GNU Object Model Environment). KDE uses the K Window Manager (kwm), while the GNOME uses Metacity as a default window manager in the absence of a window manager. GNOME can use any window manager. GNOME requires the use of the GIMP Toolkit (GTK) to render the full GNOME desktop. Window managers are not as full-featured as desktop environments. Desktop environments also add their own set of libraries the people can write programs to. This way we can extend the capabilities of the GUI.
We can also run Windows applications on Linux OS. To do that we need Windows emulator which is an implementation of the Microsoft Windows API. Example Windows emulator is www.winehq.com
A boot loader loads the Linux kernel from the boot partition on the hard disk, and can be used to boot other operating systems present on the computer. Examples of Linux boot loaders are LILO (LInux LOader), and GRUB (GRand Unified Bootloader).
This whole system is not being developed by one entity, like Microsoft Windows is. With Windows, one group of developers is working on the whole system. In the Linux this is very modular, and we will see that concept in every part of Linux world. In Linux, parts are separated so they don’t rely as much on the other parts of the system. In Linux., different components are being developed by different people. For example, the kernel is developed by the Linux kernel team. The shell and core utilities are developed by the GNU project. The GUI comes from XFree86 or X.org. Demons are developed by Apache group, Samga, Bind, etc.
This whole concept is really the base of open source software movement. This is why we have distributions of Linux operating system. Different people or individuals work on different components, put them together into one package and then release it to the public as a distribution. Because of this modularity, we can create a very customized Linux operating distributions based on individual requirements.
Linux consists of different modules which are put together. Common Linux components are kernel, utilities, shell, demons, etc. Different components form a Linux distribution.