The Kernel or Core is a fundamental component of any operating system. It is responsible for the software and hardware of any computer can work together on the same system, for which it manages the memory of the programs and processes executed, the processor time used by the programs, or is responsible for allowing access And the correct functioning of peripherals and other physical elements of the equipment.
GNU / Linux users are accustomed to talking and hearing about their kernel, which can be upgraded and manipulated in any distribution. However, in such a user-centric operating system and simplicity as Windows, its kernel is a big unknown. So today we will talk about it to tell you how it develops and what are the fundamental differences with respect to Linux.
And we will try to do it in a way that everyone can understand. Trying not to get too lost in technicalities so that any user without too much knowledge can know where the shots go.
In the 1990s Microsoft was basing its operating systems on the Windows 9x kernel, where the basic code had many similarities with MS-DOS. In fact, he needed to use it to operate. In parallel, Microsoft was also developing another version of its server-based system called Windows NT, which was born on July 26, 1993.
Both versions of Windows were developed separately. Windows NT was more a long-term move, a technology that was developing for the Windows of tomorrow, and in 2000 took a new step in that direction. To version 5.0 of NT was called Windows 2000, and became an interesting participant in the business sector.
After seeing the good reception that had, Microsoft decided to take NT to the rest of users so that both ramifications converged. They did it in October of 2001 with the version 5.1 of Windows NT, that arrived at the market with the name of Windows XP. Therefore, this version marked a before and after not only for its great impact on the market, but because it was the beginning of the adventure of the Windows NT Kernel in the world of foot users.
Since that day, all versions of Windows have been based on this Kernel more than 20 years old. Version 5.1.2600 was Windows XP, 6.0.6002 was Windows Vista, and 6.1.7601 Windows 7. Before there were other Windows Server 2008 and 2003, and then came the versions of NT 6.2.9200 called Windows 8, 6.3 .9600 or Windows 8, and finally the NT 10.0, also known as Windows 10.
The main feature of the Windows NT kernel is that it is quite modular, and is based on two main layers, the user and kernel layers. The system uses each for different program types . For example, applications run in user mode, and the core components of the operating system in kernel mode. While most drivers usually use kernel mode, but with exceptions.
That is why they refer to it as a hybrid kernel , but above all also because it allows subsystems in the user space that communicated with the kernel through an IPC mechanism.
When you run an application, it accesses the user mode, where Windows creates a specific process for the application. Each application has its virtual private address, none can alter the data belonging to another and not access the virtual space of the operating system itself. It is therefore the least privileged mode , even access to hardware is limited, and to request system services applications have to resort to the Windows API.
The kernel mode is the one in which the code that runs on it has direct access to all the hardware and all the memory of the computer. Here the whole code shares the same virtual space, and can even access the address spaces of all processes in the user mode. This is dangerous, since if a driver in kernel mode touches what it should not could affect the operation of the whole operating system.
This core mode consists of executive services such as cache controller, communication manager, I / O manager, local procedure calls, power and memory managers, among others. These in turn are made up of several modules that perform specific tasks, core controllers, a kernel and a Hardware Abstraction Layer or HAL
Differences between Linux kernels and Windows
The main difference between the kernel of the Windows operating systems and that of Linux is in its philosophy. The one developed by the Linus Torvalds team is open source and anyone can take it and modify it , something that is used to be present in multiple operating systems or GNU / Linux distros. Microsoft’s instead is rather more closed, and is made by and for the Windows operating system.
In essence, in Linux they took the principles of modularity of Unix and decided to open the code and the technical discussions . Thanks to this, Linux has created a meritocratic community of developers, one in which everyone can collaborate and in which every suggested change is fought hard to discard the worst ideas and stick with the best. It also flatters those who manage to improve the most veteran features.
In Windows, things do not work that way. As one former Kernel contributor explained in an article , Kernel leaders do not welcome proposals that deviate from the work plan, and ensure that there are few incentives to upgrade existing non-priority features.
This makes it, in the eyes of that old developer, that given greater importance to implement plans that accept changes that improve the quality of the product, or not having so many programmers without experience , the Windows NT Kernel is always one step behind in Stability and functionality.
However, because Microsoft is a company and its operating system dominates the desktop, it costs less toassociate to work with them by implementing drivers. That makes, for example, that in issues of compatibility of Windows hardware always go a little ahead, at least in key aspects such as the drivers of graphics cards.
At the technical level there are similarities between the two . The two cores control low-level system software and interactions with computer hardware through the hardware abstraction layer (HAL). HAL is an element of the system that functions as an interface between software and hardware, and like APIs, allows applications to be hardware independent.
The two are mainly written in C, and are capable of handling caching, device drivers, virtual memory, file systems, network protocols and system calls. Come on, that in essence its functionality are the same, although the way to carry them out is different.
Just as the Windows kernel has two modes, and therefore is considered a hybrid, the big difference is that the Linux kernel has only one layer, so it is a monolithic kernel. Of course, despite being simpler in this aspect, to function properly has its core divided into three different sublayers.
Both handle memory problems in a similar way. They have “swapping” systems to move a process or part of it temporarily from the main memory to a secondary storage in the case in the main there is little space. Windows does it in the files pagefile.sys and swapfile.sys, whereas Linux usually does it in a partition, although it can also do it in one or several files or disable it. Let’s have more options.
As for what kind of structure is better, there is always debate here. Defenders of the monolithic kernel always point out that they are much simpler to debug errors. Perhaps because of this, many consider that Windows NT is increasingly tending to a monolithic one, since tools like Windows Nano Server do not have the window manager at all, everything is done by console, and is one of the varieties of WinServer 2016.
In any case, others consider this last statement very bold, and in fact consider that the Hybrid Kernel is one of the great advantages of Windows. Given the lack of performance of microkernels and security against internal faults of monolithic, Windows knows how to take advantage of the good aspects of each to compensate for the bad ones.
For everyone to understand it we have tried not to go too deeply into the technical aspect. So, if you are looking for more technical details of the cores of different operating systems, in this graph you can find them absolutely all, Windows NT and Linux as Amiga, FreeBSD or GNU.
Therefore, we can say that the main difference between both is the way that each one develops. In addition, the Linux kernel is much simpler, which is good for developers. Meanwhile, Windows attempts to put a protection layer in its user mode so that users with less knowledge are less likely to damage the system, and its structure makes it more stable front, for example to graphics driver failures.