Linux Kernel Vs. Mac Kernel
Both the Linux kernel and the macOS kernel are UNIX-based. Some people say that macOS is “linux”, some say that both are compatible due to similarities between commands and file system hierarchy.
Today I want to show a little of both, showing the differences and similarities between Linux Kernel & Mac kernel like I mentioned in previous Linux kernel articles.
Kernel of macOS
In 1985, Steve Jobs left Apple due to a disagreement with CEO John Sculley and Apple’s board of directors. He then founded a new computer company called NeXT. Jobs wanted a new computer (with a new operating system) to be released quickly. To save time, the NeXT team used the Carnegie Mellon Mach kernel and parts of the BSD code base to create the NeXTSTEP operating system.
NeXT has never become a financial success, in part due to Jobs’s habit of spending money as if he were still at Apple. Meanwhile, Apple tried unsuccessfully to update its operating system on several occasions, even partnering with IBM. In 1997, Apple bought NeXT for $429 million. As part of the deal, Steve Jobs returned to Apple and NeXTSTEP became the foundation of macOS and iOS.
Unlike the macOS kernel, Linux was not created as part of a commercial enterprise. Instead, it was created in 1991 by computer student Linus Torvalds. Originally, the kernel was written according to the specifications of Linus’s computer because he wanted to take advantage of his new 80386 processor.
Linus posted the code for his new kernel on the web in August 1991. Soon, he was receiving code and resource suggestions Worldwide. The following year, Orest Zborowski ported the X Windows System to Linux, giving it the ability to support a graphical user interface.
MacOS kernel resources
The macOS kernel is officially known as XNU. The acronym stands for “XNU is Not Unix.” According to Apple’s official Github page, XNU is “a hybrid kernel that combines the Mach kernel developed at Carnegie Mellon University with FreeBSD and C++ components for the drivers.”
The BSD subsystem part of the code is “normally implemented as userspace servers in microkernel systems”. The Mach part is responsible for low-level work such as multitasking, protected memory, virtual memory management, kernel debugging support, and console I/O.
Map of MacOS: the heart of everything is called Darwin; and within it, we have separate system utilities and the XNU kernel, which is composed in parts by the Mach kernel and by the BSD kernel.
Unlike Linux, this kernel is split into what they call the hybrid kernel, allowing one part of it to stop for maintenance, while another continues to work. In several debates this also opened the question of the fact that a hybrid kernel is more stable; if one of its parts stops, the other can start it again.
Linux kernel resources
While the macOS kernel combines the capabilities of a microkernel with Mach and a monolithic kernel like BSD, Linux is just a monolithic kernel. A monolithic kernel is responsible for managing CPU, memory, inter-process communication, device drivers, file system, and system service calls. That is, it does everything without subdivisions.
Obviously, this has already garnered much discussion even with Linus himself and other developers, who claim that a monolithic kernel is more susceptible to errors besides being slower; but Linux is the opposite of this every year, and can be optimized as a hybrid kernel. In addition, with the help of RedHat, the kernel now includes a Live Patch that allows real-time maintenance with no reboot required.
Differences between MacOS Kernel (XNU) and Linux
- The macOS kernel (XNU) has existed for longer than Linux and was based on a combination of two even older codebases. This weighs in favor, for stability and history.
- On the other hand, Linux is newer, written from scratch and used on many other devices; so much that it is present in all 500 best among the best supercomputers and in the recently inaugurated North American supercomputer.
In the system scope, we do not have a package manager via the command line in the macOS terminal.
The installation of the packages in .pkg format – such as BSD – is via this command line, if not through the GUI:
$ sudo installer -pkg /path/to/package.pkg -target /
NOTE: MacOS .pkg is totally different from BSD .pkg!
Do not think that macOS supports BSD programs and vice versa. It does not support and does not install. You can have a command equivalent to apt in macOS, under 2 options:
$ port install PACKAGE
Remember that not all programs/packages available for Linux or BSD will be in MacOS Ports.
In terms of compatibility, there is not much to say; the Darwin core and the Linux kernel are as distinct as comparing the Windows NT kernel with the BSD kernel. Drivers written for Linux do not run on macOS and vice versa. They must be compiled beforehand; Curiously, Linux has a series of macOS daemons, including the CUPS print server!
What we have in common compatibility are, in fact, terminal tools like GNU Utils packages or Busybox, so we have not only BASH but also gcc, rm, dd, top, nano, vim, etc. And this is intrinsic to all UNIX-based applications. In addition, we have the filesystem folders architecture, common folders common to root in /, / lib, / var, / etc, / dev, and so on.
macOS and Linux have their similarities and differences, just like BSD compared to Linux. But because they are based on UNIX, they share patterns that make them familiar to the environment. Those who use Linux and migrate pro macOS or vice versa will be familiar with a number of commands and features.
The most striking difference would be the graphical interface, whose problem would be a matter of personal adaptation.