explaingit

darlinghq/darling

12,768Objective-CAudience · developerComplexity · 4/5LicenseSetup · hard

TLDR

Compatibility layer that lets Linux users run macOS command-line programs without a Mac, by reimplementing the system libraries those programs depend on.

Mindmap

mindmap
  root((repo))
    What it does
      Run macOS apps
      On Linux only
    Key concepts
      Compatibility layer
      macOS prefix
      System libraries
    Supported formats
      pkg installer
      dmg disk image
    Limitations
      CLI apps only
      No GUI yet
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Run macOS shell tools and developer utilities on a Linux machine without owning a Mac

USE CASE 2

Install and test macOS .pkg packages in a sandboxed folder on Linux

USE CASE 3

Compile Apple platform code using the Xcode toolchain on a Linux server

USE CASE 4

Experiment with macOS command-line scripts in an isolated prefix environment

Tech stack

Objective-CCCMake

Getting it running

Difficulty · hard Time to first run · 1day+

Must build from source on Linux, encrypted home directories are not supported for the prefix location.

GPL, free to use and modify, but any version you distribute must also be released as open source.

In plain English

Darling is a compatibility layer that lets Linux users run macOS command-line applications without owning a Mac. It works by reimplementing the low-level system calls and runtime libraries that macOS programs expect, so those programs behave as if they are running on a real Mac while the underlying operating system remains Linux. The project is written primarily in Objective-C and C, which are the same languages used by Apple's own system frameworks. The project is in active development, and most GUI applications do not run yet. The current focus is command-line tools and developer utilities. You can run macOS shell commands through Darling, install macOS package files (.pkg), mount disk image files (.dmg), and even compile code with Apple's Xcode toolchain if you supply a copy of the Xcode installer. Darling uses a concept called a prefix (borrowed from the WINE project, which does something similar for Windows software on Linux). A prefix is a sandboxed folder that mimics the macOS filesystem structure. Software you install inside Darling goes into this prefix, keeping it separate from your main Linux system. The default prefix lives at ~/.darling in your home folder and is created automatically on first use. Note that prefixes cannot be stored on certain encrypted or network filesystems, including encrypted home directories on some Linux setups. Pre-built packages are available for several Linux distributions under the Releases tab. Full build instructions are in the project's online documentation.

Copy-paste prompts

Prompt 1
I just installed Darling on Ubuntu. Walk me through creating a new prefix at ~/.darling and running a basic macOS command like sw_vers to verify it works.
Prompt 2
Using Darling, show me how to mount a .dmg disk image file and install the .pkg inside it into my Darling prefix.
Prompt 3
I want to run the macOS xcrun command inside Darling to compile a simple C program with Apple's toolchain. What steps do I need to follow after setting up the prefix?
Prompt 4
What macOS command-line tools are most likely to work in Darling today, and which categories should I avoid because GUI or kernel dependencies are not yet implemented?
Prompt 5
How do I update my Darling prefix after upgrading Darling itself without losing the macOS packages I already installed?
Open on GitHub → Explain another repo

← darlinghq on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.