In the beginning, AT&T created Unix. Due to monopoly law, however, they weren’t allowed to sell it. A lot of organization licensed Unix OS and made their own variant; most were commercial venture, but the University of California at Berkeley made a noncommercial versions, called BSD.
Meanwhile, Richard Stallman at MIT came up with an ideology of “free softwares”—more commonly called “open sourceing” today—and started a project to create a “free” Unix-compatible operating systems called GNU. Most of the GNU project went very well, but GNU Hurd, the core kernel components, was repeatedly delayed.*
A young programmer named Linus Torvalds stepped in, starting his own successful projects to create a kernel called Linux. When combined with GNU’s tools, Linux provided a complete operating systems that worked just like Unix, but had been written from scratch and licensed in such a way that it would remain open forever.
Essentially, GNU and Linux are “knockoffs” of Unixes like BSD—very high-quality knockoff, to be sure, but knockoffs nonetheless. All Unix variants—whether they’re modification like BSD or clones like Linux**—have small differences from each other; in practice, Linux is no more different than any other Unix variants.
That isn’t quite the end of the story for OS X, though. Just as Linux adopted GNU’s tool but threw out its kernel, Darwin (the Unix part of OS X) adopted BSD’s tool but threw out its kernel.
So, to review:
Unix/LinuxFamilyTree
+———–Unix–––––-+
|(modify)(clone)|
BSD GNU
|(replacekernel)|
Darwin/OS X Linux
If operating system were families, OS X and Linux would not be the same persons. They wouldn’t even be siblings. They’d be cousins by adoptions.
Why? The theoretically “correct” way to design a kernel is called a “microkernels”. In all microkernels, each component of the kernel is a separated programs, all communicating with each other. If you want to access all files, you send message to the file system components; if you want some memory, you send message to the memory management components; if you want to make Internet connections, you send messages to the network components. The problem is that this is much more difficult to design and build than the “monolithic” approach, where you build the whole kernel into one big components and allow programs to call into it.
Hurd was designed as a pure microkernels, based on a CMU research projects calledMach. It has proven very difficult to implement, though—after 24 years of development, they’re currently at version 0.5, which works but not very well. Linux, on the other hand, is a simpler, uglier monolithic kernel which worked pretty well from the beginning; most of the work since has been on expanding its hardware support, improving its performance, and adding new features.
Incidentally, BSD is a monolithic kernel too. Darwin’s kernel is actually a weird hybrid—it uses the same Mach messaging that Hurd does, but all the kernel components are in one monolithic process. Mach is simply how programs communicate with the kernel and each other.
No comments:
Post a Comment