Skip to main content

What is Linux?

When you purchase a MacBook, it comes with MacOS pre-installed on it.  This operating system is where you browse the Internet, message friends and run your favorite applications.  This closely guarded software uses proprietary code created by Apple and each year they release a new version superseding the last.  This cycle focuses on using software to leverage new features in updated hardware.

1000000358.png

When talking about "Linux", we are not explicitly referring to any one operating system – like MacOS or Windows.  Linux is collective effort of countless development communities from around the globe working together and release their source code for everyone to see.  These projects create modular components that conglomerate into larger systems. 

1000000350.pngThese systems revolve around the Linux kernel – a core piece of software that has complete control over all hardware and software within a computer. At 40-million lines of code, this monolithic software project has contributions from over 13,000 developers and 1,300 companies around the globe.

1000006866.png 1000006873.png 1000006869.png

The Kernel is packaged alongside software created by other open-source developers into a 'distro' – or a distribution. Entire Linux branches can derive from other distros by mixing and matching components to create a family treeDebian is the root of Ubuntu which is used in turn for Raspberry Pi OS, ElementaryOS, Linux Mint and many others.

1000000351.png

Much of our modern world is powered through open-source software projects.  Linux is an example of the immense scale of the open-source projects used to power the majority of the cloud and Internet serversOpenssl, an open-source project which provides secure encryption to over two-thirds of the internet, illustrates their dire importance. Was

Components

The Linux operating system comes with several core components. These parts works together to get the hardware initialized so that software can be loaded on it and made available for users.  For each component, there are often multiple software options to achieve the same outcome so you can choose what

Show flow chart diagram like the flow of data

Bootstrapping

When a computer is first turned on, the bootloader loads the kernel into active memory and activates the first stages of the operating system. This can also enable you to have multiple operating systems options available on the same hardware.

GRUB (or the GNU GRand Unified Boot) is the most common bootloader for Linux operating systems.

Core Systems

The kernel is always loaded into memory, facilitating communication between components like your processor, graphics card, and storage drives.  The kernel uses device drivers installed on the operating system to control hardware inside the computer. 

A kernel is the most essential and core part of something larger.

1000000352.png

Visualization of Open-Source Projects in the Linux Kernel

While the Linux kernel is perhaps the most well-known open-source kernel, it is far from the only option. Notable examples being FreeBSD, OpenBSD and NetBSD, as well as specialized kernels like GNU Hurd and Mach.  Microsoft Windows and MacOS also use their own proprietary "closed-source" kernel for their operating systems.

Drivers

The Kernel communicates using modular software known as drivers to control hardware components.  There are a wide range of drivers available, ranging from proprietary drivers to open-source drivers that provide basic features to a diverse range of devices.

1000000347.webp

Initialize Subsystems 

Once GRUB has loaded the kernel, the first program started by the operating system is called an init – or initialization – service.  This integral service is the root of all other processes operating on the computer.  This is the first program that operates within the 'user space' – or running software that exists outside of the kernel.  

image.pngFor many Linux distributions, systemd has become standard.  This software is responsible for managing all of the software that runs behind-the-scenes in an operating system.  A crucial aspect is making sure that everything starts in the right order – such as only starting network-dependent services after an internet connection is established.

Daemons

Once the init program – often systemd – has loaded itself, it can start the other necessary processes.  A daemon is a specific type of software program that runs in the background and are not something that you need to interact with directly.  Generally, these services start with the boot process and keep running until the computer is shut down.

Many people equate the word "daemon" with the word "demon", implying some kind of satanic connection between UNIX and the underworld. This is an egregious misunderstanding. "Daemon" is actually a much older form of "demon"; daemons have no particular bias towards good or evil, but rather serve to help define a person's character or personality. The ancient Greeks' concept of a "personal daemon" was similar to the modern concept of a "guardian angel"—eudaemonia is the state of being helped or protected by a kindly spirit. As a rule, UNIX systems seem to be infested with both daemons and demons.

— Unix System Administration Handbook

These daemon services fill a range of roles and niches.  Traditionally, they have a 'd' at the end of their name or otherwise denote that it's a daemon.

Daemon Description 
syslogd Handles error logs
sshd Handles SSH connections
PulseAudio-d Handles system audio
D-Bus-Daemon Handles communication between applications
cups-daemon Handles printer integration

Interacting with a Computer 

As part of the init program, the system loads the Shell – or the user interface. This is the interactive element of the operating system that evokes what we commonly consider as the "operating system".   The shell can be a command line interface or a graphical user interface. 

It is named the "shell" because it is outermost layer surrounding the operating system

Command Line

Command line interfaces first emerged in the 1960s as the primary means of interacting with a computer.  They were created as an interactive alternative to punch-card systems

image.png

They offer powerful direct access to computer hardware and software.  Command-line interpreters use a specific syntax and there are many available, such as Bash used by Debian. You accomplish this using programs and utilities that accept text-based input through the terminal.  Command-line interfaces make it easy to complete procedural tasks by creating shell scripts to automate events based on user input.

Graphical User Interface

Graphical user interfaces offer a visual desktop environment that allows you to interact with the operating system and running applications.  These interfaces require a display to view the "desktop" as well as a mouse and keyboard to accept user input.  GUIs often come with a terminal emulator pre-installed, providing direct access to the command-line.

VirtualBox_Debian - GNOME_02_04_2025_12_03_25.png

Debian uses GNOME by default, but other common options include:

VirtualBox_Plasma_02_04_2025_13_01_16.png

KDE Plasma

 

VirtualBox_Xfce_02_04_2025_13_56_51.png

Xfce

 

VirtualBox_LXDE_02_04_2025_12_31_42.png

LXDE

 

VirtualBox_LXQt_02_04_2025_14_29_44.png

LXQt

VirtualBox_MATE_02_04_2025_14_52_59.png

MATE

VirtualBox_Cinnamon_02_04_2025_15_39_08.png

Cinnamon

The Desktop Environment is largely a personal preference and defines the overall feel of your user experience.  This choice affects what applications are installed by default, but you are free to install any compatible applications.  While configuring Debian, you can install your preference or even include more than one to switch on-the-fly. 

Wrangling Data

The Shell allows users to interact with the data stored on disk drives through a command line or graphic user interface.  This is accomplished using a file system on your hard drive that governs file access and its functional organizational structure.  

Files are expressed by their folder hierarchy – as a file path – starting with the root directory ("/").  As an example, personal user account data is stored within the home directory, or "/home".

Windows path use a backslash ("\") while Linux uses a forward slash ("/").

image.png

Linux has an "everything is a file" design philosophy.  This functionally means that hardware devices, processes, and sockets are overlaid onto our root folder.  As an example, the directory "/proc" doesn't actually exist on our storage drive.  Instead, it is a virtual filesystem representing real-time information from the kernel and other processes. 

Similarly, Docker creates a virtual file named "/var/run/docker.sock" that acts as a "socket" for communication between services.  This is how services like Portainer can access and manage existing containers, as well as create new ones.

When a computer system has multiple storage drives, they are located as a subdirectory within "/mnt".  This enables all of our storage drives to be accessible from the Linux root folder.  As an example, we could mount an external USB hard disk drive to "/mnt/storage". 

The Windows operating system assigns a letter designation to each drive, effectively creating multiple root folders – such as "C:\" and "D:\". 

A Common Language

The System Call Interface allows the applications you run to access computer hardware without being in direct control of it.  Like much of computing, it creates a layer that abstracts underlying information.  This is how an application can access files on a hard drive or a camera connected though USB in a way that is under our control.

Systematic Functions

Software consists of computer programs that instruct the execution of a computer. The introduction of high-level programming languages in 1958 allowed for more human-readable instructions, making software development easier and more portable across different computer architectures. Software in a programming language is run through a compiler or interpreter to execute on the architecture's hardware. 


User Applications 

Application software is any computer program that is intended for end-user use – not operating, administering or programming the computer. An application (app, application program, software application) is any program that can be categorized as application software.[1][2] Common types of applications include word processor, media player and accounting software.

https://en.m.wikipedia.org/wiki/Application_software

Server Applications

https://en.m.wikipedia.org/wiki/Server_(computing)

The rise of cloud computing has introduced the new software delivery model Software as a Service (SaaS). In SaaS, applications are hosted by a provider and accessed over the Internet. 

The server component provides a function or service to one or many clients, which initiate requests for such services. Servers are classified by the services they provide. For example, a web server serves web pages and a file server serves computer files. A shared resource may be any of the server computer's software and electronic components, from programs and data to processors and storage devices. The sharing of resources of a server constitutes a service.

Whether a computer is a client, a server, or both, is determined by the nature of the application that requires the service functions. For example, a single computer can run a web server and file server software at the same time to serve different data to clients making different kinds of requests. The client software can also communicate with server software within the same computer.[2] Communication between servers, such as to synchronize data, is sometimes called inter-server or server-to-server communication.