In this topc, we’ll look at what an operating system ‘kernel’ is and specifically focus on the Linux Kernel.
This topic includes a video lesson and text which you will need to read.
While it’s common to think about Linux as an operating system, it’s more precise to understand Linux as the kernel of an operating system. All operating systems have a kernel, though we don’t often talk about them as much as we do with the Linux kernel.
The Linux kernel is an open source program which has been built and modified over the years by thousands of contributors. It was first released by Linus Torvalds in 1991. And it was created in response to restrictive licensing that burdened other operating systems at the time. The license that applies to the Linux kernel allows it to be used and distributed freely and this has resulted in the Linux kernel being made available in a large variety of Linux distributions.
A kernel is software that communicates with the computer’s hardware in order to give programs and therefore users access to these resources so they can do what they need to do. A kernel can run on its own, though it’s not very useful without programs communicating with it and we can’t run programs without a kernel taking requests and information, and then translating them to the systems hardware.
The kernel is what allows us to use a computer but it’s only part of a working operating system. We can think about this using three levels. First there’s the hardware, the memory, the CPU, the storage, the network card, and so on. The kernel communicates with this hardware and presents a series of system calls or SIS calls to programs running in what we call user land or user space. A metaphorical area outside of kernel space where the software running on the system operates. Imagine the action of saving a file in a text editor.
When I click save, the text editor software uses a user space library to tell the kernel what to save and where to save it. The kernel then communicates this information to the storage medium and reports back that the operation succeeded. Modern Linux kernels are able to communicate with a huge variety of computer hardware and they can provide an ever-increasing number of useful functions for programs to use.
The Linux kernel can run on tiny devices like circuit boards intended for hobby use, on super computers, solving the mysteries of the universe on desktops, on laptops, on mobile devices. and even in cars. Usually, these applications will employ a customized kernel which has been slightly modified to run on different kinds of processors or which have support for unnecessary hardware removed. But they’re still all the Linux kernel.
Thinking about the kernel can seem pretty technical and intimidating, though we don’t need to worry about it, if we’re just getting started with Linux or if we’re going to be using Linux in a way that doesn’t involve working directly with the kernel. For most users, the kernel just sits in the background taking care of what needs to get done. Some Linux users though, especially hardware designers and some types of programmers and system administrators will interact with the kernel directly. In some cases, people working with the kernel will need to edit the source code of the kernel, to add new features or make changes to how it works.
The Linux kernel is open source, and anyone can download, edit and run the code that makes the Linux system work. If you’re so inclined, you can download the source code of the kernel @kernel.org. The kernel is what makes Linux, Linux. But in order to have a working system where we can get work done, we need software that interacts with the kernel and we need some other supporting configurations to get a system up and running.
When a Linux system starts up or boots, it goes through a process where the kernel is loaded and then software called an Initialization System or System Manager, takes over and starts up programs to get the system to a state where we can interact with it. This Initialization System starts up services like networking, storage, sometimes it does top environment, and things like that. Again, many Linux users won’t need to concern themselves with this, but system administrators and hobbyists who like to tweak the knobs and dials on things, might find themselves diving deeper into this process.
Even if you plan to use a Linux system without concerning yourself with all the under the hood stuff, it’s helpful to know a little bit about the Linux kernel, and what its role is. And if you plan to get into the technical details and make changes yourself, Linux is one of the few operating systems that makes that possible.