Introduction and History of Darwin

In December of 1996, Apple acquired NeXT Software. The reason for the acquisition was so that Apple could finally make a modern operating system for their users. They searched high and low for a OS to be the foundation for their new OS. Among the candidates, Windows NT which never even made it past the first stage. Then came Solaris, but Apple and Sun could not agree on the licensing terms and the idea was crushed.

Be was considered as well but like Windows NT, the idea was crushed because Be was still in development and very few commercial applications were available for the OS, Be was very strongly considered because it had features that surpassed the current Mac OS as well as other Operating Systems on the market and had the support of the Mac user base. Then came NeXT in all of its glory and it was decided that NeXT would be the foundation for the new OS.. Here are some of the things NeXT brought to Apple through the Acquisition.

Mach Microkernel

Hexley, the Darwin Mascot Mach is a microkernel designed by Carnegie Mellon University from 1985 to 1994. A microkernel is a smaller operating system implementation than monolithic kernels, as Microkernels build on smaller modules. Mach was one of the most popular microkernels ever used. Compaq, IBM, HP all of them used the Mach Microkernel at one time or another. GNU Hurd was also based on Mach but that OS has yet to be released and personally I doubt it ever will be released. Here is a list of all Microkernels in use today.

What Mach brings to Darwin and Mac OS X is preemptive multitasking, Inter-process communication, I/O and interrupt management. It also brings along a great device driver framework. In Mach, device drivers are IOKits ( Input-Output kits). The differences between a Microkernel, like what is used in Mac OS X and Darwin, and a Monolithic Kernel, like what is used in Linux, is that a Monolithic Kernel is a large chunk of code, where a Microkernel consists of small message passing cores or Modules, with several different Daemons or “servers” that communicate between the modules. The modules give filing systems, security,and virtual memory. This often times makes a Microkernel more complex and decreases performance in some instances. One of the many advantages is that if you create a new Module, it can just be simply ” plugged ” in where in a Monolithic it used to be that you had to recompile your source code in order to utilize new features. BUT, Now Monolithic kernels use what is called dynamically loadable modules, where this allows you to actually do the same thing and plug in modules, but in some cases it is easier to inherit memory leaks and other problems that could impact your system more severely with this method. To counter act these problems writing dynamically loadable modules can often times be more time consuming as well as take up even more time in testing. While yes, Microkernels do have problems and as Linus Torvalds says, sometimes they can make up problems of their own. I find Microkernels to be much easier to work with and problems are easier to pinpoint in Microkernels than it is in Monolithic kernels.

BSD Compatibility

The BSD Application layer is built on top of the Mach Microkernel. This layer allows compatibility with most UNIX based software. The BSD Layer also offers great Networking capabilities.

The Open Step Development Environment

This is a true object oriented programming environment developed by Avie Tevanian and others at CMU. It is also noteworthy that Dr. Tevanian was a NeXT employee and he remains at Apple to this day.

The Introduction of Darwin

1997 – 2000 was a really exciting time to be a Macintosh developer. It was during this time Steve Jobs returned and started Mac OS X development. He went all clandestine and starting introducing code names and releases and finally showed us that Apple was far from the death that Analysts and the press portrayed. In 1998, Apple finally did it. At WWDC, Steve Jobs finally put Rhapsody, the very first OS X implementation, to sleep and introduced Mac OS X Server. In March of 1999 Steve Jobs made a new announcement, Apple was giving away some of its source code. Apple then introduced Darwin. He also stated that Darwin itself was going to be Open Source, this announcement immediately drew Open Source developers, including myself, out of the woodwork and immediately drew support from the Open Source community. This announcement also ended the FSF Boycott that the Free Software foundation had laid on Apple Computer. Darwin is based on the original NeXTStep implementation of Mach brought over from NeXT Computer. Darwin 1.0 was released shortly after the announcement and while it was primarily for Apple PowerPC based computers, preliminary support for Intel based machines was built into Darwin. Darwin support for Intel has been lacking but it is quickly becoming more robust and development is increasing very quickly to introduce modern features into the Intel offering.


In November of 2000, Dr. Michael Love founded the GNU-Darwin distribution. His goal was to bring free software to the wide spectrum of Apple users. GNU Darwin originally was supposed to run on top of Mac OS X, an XServer was developed which allowed Mac OS X users to run UNIX software without having to port the interface elements to Mac OS X. The project is still going strong and many developers have joined the ranks. During 2002 some bad press caught onto the GNU Darwin project thus their popularity was severely effected by the bad press. It has since recovered, in my opinion, and is since becoming the premier operating environment for Darwin on Intel. The one thing that GNU Darwin has done is to stay in line with the philosophy of the GNU Project in that it no longer links to the proprietary libraries in Mac OS X ( CoreAudio and CoreVideo ) Also they have put their PowerPC offerings into maintenance mode.

Open Darwin

Open Darwin was founded in April of 2002. This is Apples official outside development house for Darwin Intel as well as Darwin PPC. It was formed by Apple and its members include Darwin commiters and Apple employees. This is by far the most popular distribution to date. This distribution is by far the best and many of the Mac OS X as well as Darwin features have been developed by this group. This distribution is well loved by users who wish to keep running Mac OS X but need the full power of the Unix environment. This distribution still links to the Core libraries and you can run several multimedia packages, for example, in your Unix environment without having to run a remote sound server like what has to be done in GNU Darwin.

Present Time

Darwin has had a very bright past, and its future is increasingly bright. Many universities use Darwin for educational purposes to teach operating system design. Darwin has grown up and is well on its way of leaving its mother, Mac OS X. Some are concerned that Darwin will become fragmented and that if people make more commercially available versions of Darwin stand alone systems that we will just be looking at another System V Unix situation. I doubt this will happen because like Linux, Darwin is controlled by Apple and is centralized with Apple. Everyone has access to the same source code, unlike with Unix, where Solaris and AIX are based on the same Operating System they are actually quite different both in design and in features. The Darwin OS as it increases in popularity and development furthers, has the potential to surpass Linux, the BSD family and even Mac OS X in popularity as well as adoption. That will be many years into the future. It will be very interesting to see how Darwin affects the computer industry. As Darwin development furthers, many of its benefits are starting to be recognized by the industry.

About the Author:
Roberto J Dohnert is a Unix/Linux Consultant and software developer. His first introduction to Unix based systems dates back to NeXTStep. He is a member of the GNU Darwin Distribution and has made several contributions to that and other projects. His personal webpage is here.


  1. 2003-06-10 5:55 pm
  2. 2003-06-10 6:09 pm
  3. 2003-06-10 6:12 pm
  4. 2003-06-10 6:15 pm
  5. 2003-06-10 6:15 pm
  6. 2003-06-10 6:18 pm
  7. 2003-06-10 6:19 pm
  8. 2003-06-10 6:23 pm
  9. 2003-06-10 6:23 pm
  10. 2003-06-10 6:28 pm
  11. 2003-06-10 6:32 pm
  12. 2003-06-10 6:33 pm
  13. 2003-06-10 6:34 pm
  14. 2003-06-10 6:36 pm
  15. 2003-06-10 6:38 pm
  16. 2003-06-10 6:42 pm
  17. 2003-06-10 6:47 pm
  18. 2003-06-10 6:47 pm
  19. 2003-06-10 6:49 pm
  20. 2003-06-10 6:50 pm
  21. 2003-06-10 6:50 pm
  22. 2003-06-10 6:52 pm
  23. 2003-06-10 6:53 pm
  24. 2003-06-10 6:54 pm
  25. 2003-06-10 6:54 pm
  26. 2003-06-10 6:54 pm
  27. 2003-06-10 6:55 pm
  28. 2003-06-10 6:57 pm
  29. 2003-06-10 7:02 pm
  30. 2003-06-10 7:07 pm
  31. 2003-06-10 7:12 pm
  32. 2003-06-10 7:17 pm
  33. 2003-06-10 7:20 pm
  34. 2003-06-10 7:21 pm
  35. 2003-06-10 7:22 pm
  36. 2003-06-10 7:26 pm
  37. 2003-06-10 7:27 pm
  38. 2003-06-10 7:28 pm
  39. 2003-06-10 7:31 pm
  40. 2003-06-10 7:31 pm
  41. 2003-06-10 7:40 pm
  42. 2003-06-10 7:41 pm
  43. 2003-06-10 8:02 pm
  44. 2003-06-10 8:47 pm
  45. 2003-06-10 8:53 pm
  46. 2003-06-10 8:57 pm
  47. 2003-06-10 9:09 pm
  48. 2003-06-10 9:12 pm
  49. 2003-06-10 9:22 pm
  50. 2003-06-10 9:29 pm
  51. 2003-06-10 9:30 pm
  52. 2003-06-10 9:39 pm
  53. 2003-06-10 9:53 pm
  54. 2003-06-10 9:54 pm
  55. 2003-06-10 10:18 pm
  56. 2003-06-10 10:46 pm
  57. 2003-06-10 10:59 pm
  58. 2003-06-10 11:21 pm
  59. 2003-06-10 11:24 pm
  60. 2003-06-10 11:37 pm
  61. 2003-06-11 12:09 am
  62. 2003-06-11 1:41 am
  63. 2003-06-11 2:03 am
  64. 2003-06-11 2:05 am
  65. 2003-06-11 3:31 am
  66. 2003-06-11 4:06 am
  67. 2003-06-11 5:53 am
  68. 2003-06-11 6:00 am
  69. 2003-06-11 6:00 am
  70. 2003-06-11 6:03 am
  71. 2003-06-11 6:06 am
  72. 2003-06-11 6:07 am
  73. 2003-06-11 6:42 am
  74. 2003-06-11 7:23 am
  75. 2003-06-11 7:56 am
  76. 2003-06-11 8:33 am
  77. 2003-06-11 8:51 am
  78. 2003-06-11 11:07 am
  79. 2003-06-11 11:20 am
  80. 2003-06-11 1:32 pm
  81. 2003-06-11 1:48 pm
  82. 2003-06-11 2:07 pm
  83. 2003-06-11 3:33 pm
  84. 2003-06-11 3:42 pm
  85. 2003-06-11 4:12 pm
  86. 2003-06-11 4:37 pm
  87. 2003-06-11 5:23 pm
  88. 2003-06-11 6:57 pm
  89. 2003-06-11 7:05 pm
  90. 2003-06-12 4:51 am
  91. 2003-06-12 3:10 pm
  92. 2003-06-12 5:40 pm
  93. 2003-06-12 8:45 pm
  94. 2003-06-13 9:53 am