In the previous tutorial – Introduction to Linux, Linux was introduced as popular open source operating system with vast scope in desktop, server and mobile computing environments. Linux being open source and immensely popular among OSS developers and advocates, there are hundreds of Linux Distributions available at present. Any Linux distribution or package is a complete operating system software having Linux Kernel, GNU utilities, Shell, desktop environment and some default applications bundled together. So, any Linux (operating) system, irrespective of the hardware platform it may be running, essentially has the following software components –
1) Linux Kernel
2) GNU Utilities
4) Desktop Environment
5) Add-on Application Softwares
Fig. 1: Ubuntu Linux System
Linux Kernel –
Linux Kernel is the core of the Linux System. It is responsible for managing hardware as well as software on the computer system. The Kernel basically implements four main functions – System Memory Management, Program Management, Hardware Management and File System Management.
Linux was intended to be a copy of Unix Operating System. The Unix was developed to improve sharing of time of the processor by different processes running on the computer. So, obviously, Linux essentially evolved to improve allocation of hardware resources to the processes including memory. Linux is developed to not only utilize physical memory (RAM), it also expands available memory by creating virtual memory on secondary storage (Hard Disk). This virtual memory on hard disk is called swap space. The memory on RAM as well as Swap Space is organized into blocks called pages. The Kernel locates pages on physical memory as well as swap space and create tables of the memory pages that are currently in physical memory and that have to be transferred from swap space to the physical memory next. It swaps out the pages that are currently not in use to swap space and swaps in the pages required at present by an application process. This swapping in and out of memory pages continues till the Linux keeps running.
Another important function managed by the Kernel is management of processes. The processes may be running on foreground where they may be displaying some output on the screen or they may be running in background where they are invisible to the logged in user. When the Linux boots up, the Kernel starts the first process – init which starts all other processes. The init process loads in virtual memory and allocates all other processes started by it, some space in the virtual memory for data and programs. In some Linux distributions, a table of processes that must start after boot up is located in /etc/inittabs folder while in some distributions, scripts for the processes that have to be started at boot up are located in etc/init.d folder and they are started through entries in etc/rcX.d folder.
The Init must be defined a run level to determine which processes must be started. The processes are associated with a run level by defining it to each in the etc/inittabs file or the /etc/rcX.d folder. The run levels are used to direct init to decide which processes must be run for specific modes of the Linux System.
There are 7 run levels numbered from 0 to 6. The run level 0 indicates halt mode and processes having run level 0 must run when the system shuts down. The run level 1 indicates single user mode which stops Linux to configure network interfaces, start daemons or allow non-root login. The run level 2 indicates multi-user mode which stops Linux to configure network interfaces and start daemons. The run level 3 indicates multi-user mode with networking which makes Linux to run normally. The run level 4 is undefined and can be user-definable. The run level 5 indicates X11 which makes Linux run normally as in Run Level 3 adding display manager (X) to the system. The run level 6 indicates Reboot and it reboots the system.
The run level 3 and 5 are most used. The Linux can control the overall functionality by controlling run level. By changing run level from 3 to 5, the system can change from console based to graphical system.
Linux being operating system must be able to manage hardware resources. The Kernel communicates with the hardware components through their device drivers. The device drivers can be compiled with the Kernel or inserted to a running Kernel. The method of compiling device driver along with the Kernel is inefficient as it requires recompiling the Linux Kernel whenever a new device is inserted to the computer system like connecting a USB Pen Drive or connecting speakers. So, the method of inserting device driver modules in the running Kernel without recompiling it was introduced and is commonly used.
The hardware devices are identified in Linux by special files called device files while all communication with them is handled by another kind of special files called node files. There are three types of device files – Character (for devices that communicate with Kernel one character at a time like modems and terminals), Block (for devices that communicate through large blocks of data like hard drives) and Network (for devices that communicate through data packets sent or received over a communication network or internet). The device drivers dictate how data must be communicated between Linux Kernel and the hardware device. The device file defines the nature of this communication and node files define how all this data communication must be performed. The device nodes are identified by unique number pairs having a major number (used to group similar devices) and minor number (used to identify individual device in the system).
The secondary storage are vital component of most computing systems. Linux must be able to read and write files from variety of file systems for hard drives. That so, Linux Kernel is given support for multiple file systems like FAT32, NTFS, XFS, ext, ext2, ext3, ext4, iso9660, hpfs, jfs, msdos, minix, nfs, proc, ufs, umsdos, sysv, smb, ncp, ReiserFS etc. The Linux uses Virtual File System (VFS) to interface with any file system.
This enables Linux to read and write data from any type of file system.
GNU Utilities –
System utilities are vital to any operating system and Linux is no stranger to this. The Linux utilized GNU system utilities which were developed as Open Source Software under the GNU project. These system utilities form a bridge between the Linux Kernel and the application softwares. They are responsible for file handling, process management and text manipulation. The GNU utilities have so critical role in the Linux system, that Linux is often termed as GNU/Linux system by many purists.
The Shell is an interactive utility used for entering commands and executing them on the Linux Kernel. For entering commands, Shell has a command prompt. The shell includes a set of internal commands for handling files and file system, managing processes and interacting with programs. User can start, stop or change program execution through the shell. The shell commands can be grouped into files called shell scripts to execute a program.
There are many shells that are available for Linux. Some of these shells are more easy to create shell scripts while some are more easy to execute shell scripts. The default shell in Linux Kernel is Bash Shell. It was developed by GNU project to replace Bourne Shell (Default Unix Shell named after its creators). The name Bash Shell itself coined from ‘Bourne Again Shell’.
Other popular shells available for Linux include Tcsh/Csh shell, Ash Shell, Zsh Shell, Korn Shell and Fish Shell. Tcsh/Csh is enhanced C Shell that uses C syntax for shell commands. Its key features include C like programming, command line editor, spelling correction, filename completion and job control. Ash is a bash compatible shell designed to run on constraint memory. Korn Shell or Ksh is a Bourne compatible shell with high level programming language features and interactive command language. Zsh is an advanced shell in which features from korn shell, bash and Tchs are included along with many unique features like start up files, variable index, function index, concept index, filename generation, key index, closing comments etc. Friendly Interactive Shell or Fish is a fully interactive shell with several developer friendly features including autosuggestions, web based configuration, term256 terminal support etc.
Desktop Environments –
Initially, Linux had Command Line Interface. With the popularity of Windows operating system, demand for graphical user interface in Linux started gaining momentum. So, OSS developers wasted no time and many Graphical Desktop Environments were developed by different OSS developers and their teams. Some of the popular Desktop Environments include X Window System, KDE Desktop, GNOME Desktop, Unity Desktop, Fluxbox, JWM, Xfce, Fvwm, fvwm95, Mate, Cinnamon, LXQt, LXDE, Luminia, Enlightenment, Sugar, EDE, Project Looking Glass and Common Desktop Environment.
X Window System –
Any desktop environment (program) need to communicate data with video card and monitor to project a graphical environment on the monitor screen. The X window system is a desktop environment which has been developed for many operating systems including the Linux. The most popular version of X Window System is X.org which supports for many recent video cards. The X window system is a low-level program that directly interacts with the display hardware (video card and the monitor). Apart from X.org, other popular X window versions are Wayland software (that ships in Fedora Linux) and Mir Display Server (that ships in Ubuntu Linux). The Desktop Environment are integral to the Linux OS. While installation, Linux (having X Window Desktop) creates an X Window Configuration file which scans for video card and monitor, and detects the supported video modes and resolution. X Window is only capable to display a graphical environment on the screen. It cannot let user manipulate files or launch programs. So, there needs other desktop environment on the top of X window system.
KDE Desktop Environment –
K Desktop is a Windows like desktop environment first released in 1996. It contains a desktop area (like in windows) where icons for files and applications can be placed. The user can launch an application by clicking its icon while on clicking a file icon, user is prompted to select an application program to open that file. This is called desktop area. There is also a panel at the bottom of the desktop area. The panel has program shortcuts and applets (small applications having change able icons). There is a K menu (similar to start menu in windows) that contains links to the installed programs. There is also a taskbar (similar to taskbar in windows ) where icons for currently running applications are placed.
GNOME Desktop –
GNU Network Object Model Environment (GNOME) is another popular desktop environment first released in 1999. It is default desktop environment in Red Hat Linux and many other Linux Distributions. It includes several Windows like features, for example, desktop area for icons, drag and drop facility for icons and panel area. There are many additional graphical features in GNOME that set it apart from popular windows look and feel.
Unity Desktop –
Unity is a desktop environment developed for Ubuntu Linux. It is different from both KDE and GNOME. The Unity Desktop has been developed with objective to cater a common graphical environment across various platforms like desktop computers, mobiles and tablets. It has the same graphical interface whether it runs on computer, mobile device, tablet or phablet.
KDE Plasma –
The recent version of KDE Desktop available is KDE Plasma developed by KDE software community. It comes packaged with several tools and utilities called KDE applications. Like, it contains Dolphin File Browsing application that has features like batch file renaming, tabbed browsing support, desktop widgets and multiple panels. It also features live window previews with media control features for audio and video play applications. It comes with its own shell called KRunner which can be even used to customize applications by just right clicking their icons. It also contains a KDE Connect application through which Android and Blackberry devices can be connected to the Desktop and notifications, battery status and mobile device files can be accessed from the Linux Desktop itself. The default desktop environment of KDE Plasma is OpenSUSE Linux Distro.
Desktop Environments for Low-Powered PCs –
KDE and GNOME had a great advantage that they could also run on older PCs and low powered devices. The OSS developers took pain to develop many other fully featured desktop environments that could run on older PCs and low-powered devices. Some of these desktops include Fluxbox, JWM, Xfce, Fvwm, fvwm95 etc. Fluxbox is a simple desktop including a panel and popup menu. Joe’s Window Manager (JWM) is another desktop environment that can run on low memory and low disk space. Xfce is a KDE like Desktop designed to run on low memory. Fvwm is another fully featured desktop that can be easily run despite memory constraint. The fvwm95 is based on Fvwm but it has a Windows like look and feel.
Other Desktop Environments –
There are several other popular desktop environments for Linux Distributions like MATE, Cinnamon, Pantheon, LXQt, PIXEL, Budgie, Enlightenment, LXDE, Trinity etc. Most of the popular Linux Distributions have one or the other desktop environment as default. Like Cinnamon is the default desktop in Linux Mint, Unity is the default desktop environment in Ubuntu, Budgie is default desktop environment for Solus and so on. The Linux user can also download and install a desktop environment explicitly. It must be taken care that different Linux distributions have different memory requirements. For example, Cinnamon requires 175 MB, GNOME 250 MB, KDE Plasma 300 MB, LXDE 85 MB, XFCE 100 MB, MATE 125 MB, Enlightenment 85 MB, Unity 300 MB memory (RAM) space. Each environment has its own features and advantages. So, the user must install a different desktop environment wisely otherwise should continue with the default one shipped along the distribution.
Application Softwares –
Several application softwares come default with Linux Distributions. Each distribution has its own add-on applications that are installed along with the Linux by default. The user can add or remove application softwares as per their requirements and use. Different Linux distributions have common Kernel and system utilities and only differ by their desktop environments and default add-on applications.
Linux Distributions –
Linux Distributions are complete Linux System Package including Kernel, System Utilities, Shell, Desktop Environment and Add-on Applications. There are hundreds of Linux Distributions with many customized for specific user groups. The Linux Distributions can be broadly categorized into three types –
1) Full Core Linux Distribution – These distributions include Linux Kernel, one or more desktop environment and only those applications and utilities that are essential for the Kernel. It is a bare and core Linux installation. Some of the popular core Linux distributions are Red Hat, Fedora, Slackware, Arch Linux, OpenSUSE, Mandriva Linux, Gentoo and Debian. Red hat is a commercial Linux Distro for internet servers. Fedora is a Red Hat spin off for home use. Slackware is a customizable early Linux distribution first released in 1993. OpenSUSE has been designed as core Linux for home and office work stations. Gentoo distribution is for power user and contain Linux Source code and compiling of applications from the source through FreeBSD ports. Arch Linux is another distribution designed for power users and contains official and unofficial binary packages in the form of PKGBUILD files. Mandriva Linux is a popular, now community driven, Red Hat derivative. Debian is a non-commercial distribution most popular among Linux users.
2) Specialized Distribution – These distributions are generally derivative of core distributions containing a subset of core applications along with application programs for specific user groups. Debian is the most popular choice for making specialized distributions. These distributions have custom installations and target specific user groups like graphic designers, educators, developers etc. Some of the popular specialized distributions include Mint, Ubuntu, CentOS, PCLinuxOS, bolic, Puppy Linux, Solus, Elementary OS etc.
3) LiveCD Test Distributions – Many Linux Distributions are also available in the form of bootable LiveCD. They do not require any installation and can be booted directly from a CD-ROM. Many LiveCDs can be downloaded from internet, burnt to a CD-ROM and are ready to use anytime and anywhere. Some of the popular LiveCD distributions include Ubuntu, PCLinuxOS, Slitaz, Knoppix, Reskatux Linux, Puppy Linux, Tails Live, Clonezilla, Finnix and Slax. For obvious reasons, LiveCD distributions are generally limited in features and applications.
In the next tutorial, learn about installing Linux and setting up development environment.
Filed Under: Featured Contributions