Linux is a popular term that is generally used to describe a family of open source based operating systems. However, describing Linux as an operating system is actually a misnomer. As demonstrated within my article about Open Source, GNU and Linux Kernel (URL provided below); Linux is actually only a small (but crucial) part of an open source operating system.
An operating system (OS) is the software platform that manages the allocation of hardware resources and controls how tasks, applications and other software are handled by the device (ie. a desktop computer, laptop and mobile devices, such as tablets and cell phones).
When a software developer produces an application, the developer usually has to write and compile the code for a specific operating system. This is because each individual operating system communicates with the hardware in slightly differently and may have it’s own specific application program interface (API). Whilst many applications may be compiled for various different operating systems (and therefore are considered as cross-platform), quite a few applications are built for a specific set of APIs and may only work with a particular operating system. Therefore, when choosing an operating system, the user must either choose an operating system that will run their preferred application or choose a similar application that will run with their chosen operating system.
The operating system is made up of various components. Each of these components have their own specific task and when run together, allow the user to interact with the device. These components include:
Boot Loader
A boot loader is the first component to be executed within the running of a device. It is a small piece of software that allows for the main part of the operating system to be started. When a device is powered-up or restarted, the device internal system (IBM PC compatible computers usually refer to this system as the Basic Input / Output System or the BIOS, which is stored on a non-volatile silicone chip within the motherboard of the device. This system is also known as the devices firmware) will perform some initial tests (such as checking if there are any storage devices / hard disk drives attached, checks to see if there is a keyboard attached, also initiates basic power saving routines and checks if the internal real-time clock is configured).
In some cases, a boot loader can be configured to allow the user to choose from multiple operating systems. This multi-boot option can ask the user if they would like to choose from a selection of different operating systems (such as either booting into a Linux based environment or a Microsoft Windows environment).
The boot loader is usually stored within the master boot record (MBR) of the first storage device that the device communicates with (which is usually the first couple of sectors of the hard disk drive).
Kernel
The kernel is the foundational layer of an operating system and generally controls the communication between the hardware and the operating system, as well as managing the various internal resources. The kernel performs checks of the device, recognises and fundamentally manages the various hardware components, such as the central processing unit (CPU), memory (RAM) and graphic processing unit (GPU).
Due to the fact that the kernel handles many fundamental processes, the kernel must be loaded straight after the boot loader and is kept running throughout the time that a device is powered. Even after the operating system has fully loaded, the kernel continues to run within the background and continues to manage the various resources.
There are several types of kernels that are available but most users will generally only come across two of these types. These being either monolithic kernels and micro-kernels. A monolithic kernel is a single codebase (a block of code), that provides all the necessary services that is offered by the operating system.
Where as a micro-kernel have the same functions as a monolithic kernel but are designed to be kept as small as possible. Instead of using a single codebase to manage all the available resources, a micro-kernel provides only for the most basic functions of a device and uses various modules to manage everything else.
Linux is actually the monolithic kernel that is used within most open source operating systems (there are other open source based kernels that are available, including BSD, GNU Hurd, Longene and XNU).
Whilst Microsoft’s kernel (which is based on the Windows NT kernel) is not open source, it is a hybrid of the above two types and Longene is an open source, reinterpretation of Microsoft’s kernel (which was written from scratched to emulate Windows NT functionality). Longene is used as the basis for the ReactOS project.
Where as XNU (which is actually based on the BSD kernel) is an open source, reinterpretation of Apple’s Darwin kernel (Darwin is only partly open source, which is also partly based on the BSD kernel. Darwin is used within both Apple’s desktop MacOS and their mobile iOS operating systems. Due to the inclusion of some proprietary device drivers and other source code, Apple’s operating systems can not be considered as wholly open source).
Command-Line Interface
The command-line interface (CLI) or console shell is generally the next thing to load after the initial interaction of the kernel. The CLI generally allows for the execution of various non kernel based system tools. As an example, an Internet site hosting environment may request the Web server and database services to be loaded at this point.
This component may also initialise various other elements, including advance power management tools and other network services.
The CLI may also initiate the window manager and will also give the user (or the administrator) provisions to input commands within a CLI environment.
Since the introduction of Microsoft Windows XP, the CLI has been part of the overall Microsoft Windows interface (before XP, the CLI was a separate element from the overall operating system, ie. Microsoft DOS was required before the windows manager could be loaded).
Window Manager
After the CLI and the various services are activated, the window manager is generally loaded into memory. This component (sometimes known as X or X.org server within an BSD and Linux based environment) is the display service that allows for a minimum implementation of the graphical user interface (GUI) / window interface, which in turn will be used to allow the user to interact with the login manager and the desktop environment.
In some cases, the user or administrator may not want to start the windows manager and may want to use the available resources (ie. RAM, CPU and storage space) for other tasks. As an example, within an Internet site hosting environment, the administrator may want to discard the window manager in favour of freeing up resources for better database hosting performance.
In this case, the user / administrator will be greeted with a CLI based login prompt rather then a fully fledge login manager or desktop environment.
Login Manager
A login manager (otherwise known as a display manager) allows for users to provide their authentication information (ie. username and password) before accessing their desktop environment. Within a single user interface, the login manager can usually be configured to automatically gain access to the users session.
The login manager is extremely useful for a multi-user environment and can sometimes be configured to be provided access via a third party authentication server or database (such as being authenticated via a Microsoft Active Directory or LDAP server).
Desktop Environment
Once the user is authenticated (either manually or via an automated process) through the use of a login manager, they gain access to the desktop environment (DE). The desktop environment provides a GUI for the user to execute any other applications or utilities.
In a Linux based operating system, there are a number of different desktop environments to choose from (such as KDE, Gnome, XFCE and LXDE), some of these desktop environments may have had other user interfaces (otherwise known as shells) included (in the case of Gnome, there is the option for Mate, Cinnamon or Unity which can be used as the user interface).
These desktop environments may have provide different customisation tools that can be used to provide different themes and abilities, as well as using differing levels of resources that may impact on the speed and ability of the users experience. As an example, XFCE and LXDE are considered to be fairly lightweight and may perform better on older hardware (ie. 486 and Pentium based computers), where as Gnome and KDE may be significantly better suited for newer devices.
Many desktop environments give an option to install their own login managers (which maybe themed with a similar look as the overall desktop environment). It is also possible to install multiple desktop environments on a single device so that the user could choose which environment they may feel more comfortable using (on a multi-user device, it is possible for each user to have a different environment to suite their own needs, ie. user A may want to be presented with KDE, where as user B may prefer to have a XFCE based environment).
Application Software
Once all the above is loaded and the user has logged into their chosen desktop environment, they are ready to use the available applications. The amount of applications are dependent on what is installed and have been allowed by the administrator for the user to use. These applications can include games, office productivity suites, web browsers and a number of other types of software.
In some cases, the user may have access to various system related tools (such as virus checking software, disk partitioning utilities and software management tools).
As demonstrated above, an operating system is made up of various constituent components and Linux only specifically relates to the kernel of an open source operating system.
When someone states that they are using a Linux based operating system, it is generally a good idea to ask them about the variant of the operating system and which desktop environment they may be using.
References & Other Resources:
* Open Source, GNU, Linux Kernel and the Free Software Foundation
* Wikipedia: Operating System
* Wikipedia: Linux Startup Process
* Wikipedia: Kernel
* Wikipedia: Comparison of Operating System Kernels
* Wikipedia: Command-Line Interface
* Wikipedia: Window Manager
* Wikipedia: Login Manager (Display Manager)
* Wikipedia: Desktop Environment
* Wikipedia: Application Software
* Technology and Open Source Blog