Mac OS X is a UNIX-based operating system with modern GUI and application support frameworks layered on top. The lowest layer, Darwin, includes the kernel, device drivers and driver support frameworks, a BSD personality layer, and various libraries and command-line utilities.
The Darwin layers of Mac OS X are open source. This serves two main purposes: to provide a resource for other open source development efforts (such as Linux and BSD variants) to make their software available on Mac hardware and to provide source code to aid developers writing device drivers and other low-level technologies for Mac OS X.
In addition to being part of Mac OS X, Darwin is a standalone, BSD-based operating system. (BSD, short for Berkeley Software Distribution, is a family of UNIX variants descended from Berkeley’s version of UNIX.)
Darwin is also occasionally used to refer to the Darwin Streaming Server, also known as the QuickTime Streaming Server (QTSS). For more information on QTSS, see the QuickTime Streaming Documentation.
For more information about how Darwin fits into Mac OS X, you should read Mac Technology Overview.
For a better understanding of Darwin as a standalone operating system, you should read a book on system administration, such as UNIX System Administration Handbook by Nemeth and others.
Choose a Learning Path
There are five primary areas of learning related to Darwin: the kernel and device drivers, tools, porting, the Darwin OS components, and system administration.
The Kernel and Device Drivers
The first thing you should do before starting to write a device driver is to find out whether your driver should be in the kernel or not. Many drivers and other services are traditionally provided outside the kernel in Mac OS X. The document Should You Program in the Kernel? explains how to decide whether your driver or service needs to be in the kernel.
Getting Started with Hardware and Drivers to learn about resources of interest to device driver programmers.
Kernel Programming Guide to learn about non-driver programming in the kernel. This canonical document contains some information that may be helpful for driver writers, but is primarily intended for people developing other technologies.
IOKit Fundamentals to get a general overview of the I/O Kit.
To learn about Apple’s tools, including its open source tools, read Tools & Languages Starting Point.
To learn about porting software to Mac OS X, read Getting Started With Porting. If you are planning to port a 64-bit tool to Mac OS X, or if you plan to transition a 32-bit command-line tool to a 64-bit environment, read 64-Bit Transition Guide.
The Darwin OS Components
Look at the Open Source topic page to learn about Apple-created open source technologies.
To learn about system administration, look at the ADC topic page for Mac OS X. For additional information about security, including documentation on Mac OS X's support for access control lists (ACLs), see Security Overview.
The Darwin Reference Library includes the following high-level resource pages, which can be bookmarked for easy access.
Conceptual and how-to information for Darwin technologies.
Focused, detailed descriptions in reference format for Darwin technologies.
Sample applications demonstrating various Darwin technologies.
Late-breaking documents on issues related to Darwin.
Programming tips, code snippets, and FAQs by Apple’s support engineers.
There are numerous mailing lists available to discuss Darwin topics with other developers. To discuss Darwin software development, join darwin-development. Other, more specialized Darwin lists of interest include darwin-documentation (for discussion pertaining to Darwin documentation), darwin-drivers (on Darwin hardware drivers), darwin-kernel (on the Darwin Mach+BSD kernel, darwin-userlevel (on Darwin user-level software), and darwin-x86 (on Darwin on the x86 platform).
For discussion on the QuickTime Streaming Server, join the mailing list for developers (streaming-server-developers) or users (streaming-server-users). To get announcements of key events and milestones for Apple’s open source projects, join publicsource-announce, and to get announcements of open source software submissions, join publicsource-modifications. For software development discussion about OpenPlay and NetSprockets, join openplay-development.
These additional websites may also be helpful:
Apple’s Darwin topic page.
Apple’s open source technologies website.
Information about FreeBSD, upon which much of Darwin is based.
Documentation on UNIX standards.
A community-driven website about various open source projects.