LinuxCommandLibrary

darling

Run macOS software on Linux

TLDR

Run a builtin command

$ darling shell [uname]
copy

Run a specific program with arguments
$ darling shell [path/to/program] [program_argument_1 program_argument_2 ...]
copy

Open a macOS shell
$ darling shell
copy

Shutdown the service
$ darling shutdown
copy

SYNOPSIS

darling [options] <subcommand> [arguments]

Subcommands:
  shell [<command> [<args>...]]
  run [<options>] <program> [<args>...]
  path [-l] <macos-path>...
  version

PARAMETERS

-v, --verbose
    Increase output verbosity

-q, --quiet
    Decrease output verbosity

--root=<PATH>
    Use alternative Darling root filesystem

--env=<NAME>[=<VALUE>]
    Set macOS environment variable

--preload=<LIB>
    Preload specified DYLIB

--app[=<NAME>]
    Treat argument as app bundle (for run)

--help
    Display help and exit

--version
    Display version and exit

DESCRIPTION

Darling is an open-source compatibility layer for running macOS and iOS software on Linux. Similar to Wine for Windows apps, it translates Mach-O binaries and Darwin system calls to native Linux equivalents. It supports command-line tools, libraries, and some GUI applications via ongoing Cocoa framework reimplementation.

Key features include a dyld (dynamic linker) emulator, Mach microkernel emulation on Linux primitives, and a pseudo-filesystem for macOS paths like /System. Users install macOS SDKs or binaries, then execute them seamlessly. While CLI tools like clang or otool work reliably, full App Store apps are experimental due to incomplete AppKit support. Ideal for developers testing cross-platform code or running macOS utilities without a Mac.

Requires a compatible Linux distro (x86_64), Darling installation via packages or source, and often manual dyld cache generation for performance.

CAVEATS

Experimental; many GUI apps crash due to incomplete frameworks. Requires x86_64 Linux, macOS SDKs/binaries, and dyld cache setup. No ARM support yet. Security risks from running untrusted macOS code.

SUBCOMMANDS

shell: Starts interactive Darwin shell.
run: Executes Mach-O binary or app bundle.
path: Converts macOS paths to Linux equivalents (-l lists all).
version: Prints Darling version.

EXAMPLES

darling shell
darling run /path/to/clang --version
darling path /usr/bin/env

HISTORY

Development began in 2019 by Lucas Nazario as a Wine-like layer for Darwin. First public release in 2021 with basic dyld and shell support. Active on GitHub with community contributions; version 1.0.x focuses on CLI stability, ongoing Cocoa work for v2.

SEE ALSO

wine(1), box64(1), qemu-x86_64(1)

Copied to clipboard