A simple 'HelloWorld' Cocoa app demonstrated on macOS (left) and GNU/Linux (right)
|Original author(s)||Luboš Doležel|
|License||Various, primarily GPLv3|
Darling is a free and open-source macOS compatibility layer for Linux. It duplicates functions of macOS by providing alternative implementations of the libraries and frameworks that macOS programs call. This method of duplication differs from other methods that might also be considered emulation, where macOS programs run in a virtual machine. Darling has been called the counterpart to WINE for running OS X apps.
The project started in Summer 2012 and builds on a previous project, named maloader, which was discontinued due to a lack of time. The developer is testing applications, such as Midnight Commander or The Unarchiver on the layer. So far, the layer has been shown to work with many console apps, but does not currently support graphical applications. Darling does have the ability to extract an Apple Disk Image.
At the entry of the Darling system is a loader for Mach-O binaries, the executable format for Apple's operating systems. Darwin's predecessor, maloader, presented a maximalist approach to the problem by trying to replicate everything that Apple's dynamic library loader dyld does. This proved to be hard, and since an 2017 "Mach-O transition" Darling has been using a lightweight loader just enough to launch the open-source Apple dyld instead.
To provide the macOS binaries with a kernel, Darling uses a modified XNU kernel wrapped into a Linux kernel module. This module handles the typical job of a Mach kernel, mainly Ports IPC handling. Some licensing issues exist in the darling-mach module, as the team are adding GNU GPL modifications to the APSL kernel.
Higher than the kernel is the root environment. Darling, like wine, supports chroot prefixes, implemented using the Linux overlayfs (as opposed to path translation in Wine). PID, IPC, and UTS namespaces are used to create a container for the Darwin system inside.
The frameworks and system libraries in Darling are, to the best possible extent, based on source code released by Apple. The Mach-O transition allows these frameworks to be built more easily, because they are now built as the Mach-O format they were intended for. To fill in the gaps for many higher-level frameworks like Cocoa, Darling uses code from Cocotron, ApportableFoundation, and GNUstep.
- Brodkin, Jon (6 August 2013). "OS X apps run on GNU/Linux with Wine-like emulator for Mac software". Ars Technica. Retrieved 23 January 2014.
- Lynch, Jim. "Will we ever be able to run OS X apps in Linux with Darling?". InfoWorld. Retrieved 2018-07-23.
- "Project Status". Darling project. Retrieved 23 January 2014.
- "Project Darling Is Still Trying To Run macOS/OSX Software On Linux - Phoronix". www.phoronix.com. Retrieved 2018-07-23.
- "A C++ Hello World And The Rose Gold Walled Garden Of Doom". Hacker Noon. 2018-01-29. Retrieved 2018-07-23.
- Heath, Nick (15 July 2013). "OS X apps on their way to Linux courtesy of Darling project". ZDNet. Retrieved 23 January 2014.
- Bugaev, Sergey. "Mach-O linking and loading tricks". Retrieved 12 January 2020.
- "Build Instructions". Darling.
Darling uses a kernel module to provide certain OS X specific features, mainly Mach Ports IPC. No OS X application can be run without this module, since Libc requires Mach Ports for its initialization and even for very basic things such as sleep().
- "Issue: Code from Apple under the APSL is incompatible with the GPL". GitHub. Retrieved 12 January 2020.
- "Homepage FAQ". Darling project. Retrieved 12 January 2019.