Darwin/macOS emulation layer for Linux
Go to file
2017-01-28 00:27:14 +01:00
basic-headers Adding sys/qos.h into basic-headers 2017-01-08 13:28:09 +01:00
cmake Working new libc and fat build, added machdep calls table and implemented sys_getentropy() 2017-01-28 00:27:14 +01:00
compiler-include More progress on libc upgrade+fat build, now at the point of linking libSystem 2017-01-25 16:11:01 +01:00
etc Add resolv.conf with 8.8.8.8/8.8.4.4 in it 2017-01-05 16:52:15 +03:00
kernel-include More stuff building as fat, libsystem linking, the next step is to have dyld link 2017-01-25 23:33:37 +01:00
misc Cleanup benchmarks, misc and tools directories 2016-02-26 22:59:34 +01:00
platform-include Working new libc and fat build, added machdep calls table and implemented sys_getentropy() 2017-01-28 00:27:14 +01:00
src Working new libc and fat build, added machdep calls table and implemented sys_getentropy() 2017-01-28 00:27:14 +01:00
tests/src Remove unused stuff from tests/ 2016-02-26 23:03:00 +01:00
tools Cleanup benchmarks, misc and tools directories 2016-02-26 22:59:34 +01:00
.gdbinit Loads of work on dyld and BSD functions 2012-08-15 12:17:58 +02:00
.gitignore Add the suggested build folder and some artifacts of building the kernel module to .gitignores 2016-11-03 19:31:44 -07:00
.gitmodules Add libpthread and syslog as submodules 2017-01-24 23:22:30 +01:00
CMakeLists.txt More stuff building as fat, libsystem linking, the next step is to have dyld link 2017-01-25 23:33:37 +01:00
darwin.map Restructured source tree to prepare for merge with the "darling" repo 2015-10-24 22:29:54 +02:00
LICENSE Loads of work, libmacarchive added, copyright headers... 2012-10-22 19:02:06 +02:00
README.md Fix build instructions for Arch 2017-01-16 01:14:48 +03:00
README.md.old Moving README.md away, because this is an experimental branch 2015-10-25 19:37:16 +01:00
Toolchain-x86_64.cmake Avoid lib64 use on ArchLinux 2017-01-15 13:53:09 +01:00
Toolchain-x86.cmake Hardcode arch triplets 2017-01-13 22:26:45 +03:00

Darling

Darling logo

Darling is a runtime environment for OS X applications.

Please note that no GUI applications are supported at the moment.

Download

Darling uses many Git submodules, so a plain clone will not do.

git clone --recurse-submodules https://github.com/darlinghq/darling.git

Updating sources:

git pull
git submodule init
git submodule update

Build Instructions

For complete instructions, visit DarlingHQ.org.

For running x86-64 OS X binaries

Required dependencies

Debian (stable):

$ sudo apt-get install cmake clang bison flex xz-utils libfuse-dev libxml2-dev libicu-dev libssl-dev libbz2-dev zlib1g-dev libudev-dev linux-headers-amd64

Ubuntu (16.04):

$ sudo apt-get install cmake clang bison flex xz-utils libfuse-dev libxml2-dev libicu-dev libssl-dev libbz2-dev zlib1g-dev libudev-dev linux-headers-generic

Arch Linux (4.8):

$ sudo pacman -S make cmake clang flex bison icu fuse linux-headers

Fedora (25):

$ sudo dnf install cmake clang bison flex fuse-devel systemd-devel kernel-devel libxml2-devel libicu-devel openssl-devel bzip2-devel
cd darling
mkdir -p build/x86-64
cd build/x86-64
cmake ../.. -DCMAKE_TOOLCHAIN_FILE=../../Toolchain-x86_64.cmake
make
make install

For running i386 OS X binaries

Required additional dependencies (on top of x86_64 dependencies)

Debian (stable) / Ubuntu (15.10):

$ sudo apt-get install libc6-dev-i386 libudev-dev:i386 lib32stdc++-4.9-dev

Arch Linux (4.8):

$ sudo pacman -S lib32-libstdc++5 lib32-clang
cd darling
mkdir -p build/i386
cd build/i386
cmake ../.. -DCMAKE_TOOLCHAIN_FILE=../../Toolchain-x86.cmake
make
make install

Building and loading the kernel module (x86-64 and i386)

# Go into src/lkm to build the kernel module
cd ../../src/lkm
make
make install

If this does not work (e.g. on newer Ubuntu versions), try the DKMS build:

# Go into src/lkm to build the kernel module
cd ../../src/lkm
sudo ./dkms.sh

Loading the kernel module:

modprobe darling-mach

# ATTENTION: The kernel module is likely unstable,
# full of vulnerabilities, etc.
# You SHOULD restrict access to /dev/mach to trusted
# users only and be prepared to the eventuality of
# kernel hangups (and related data loss).

chmod a+rw /dev/mach

Hello world

Let's start with a Hello world:

$ darling shell echo Hello world
Hello world

Congratulations, you have printed Hello world through Darling's OS X system call emulation and runtime libraries.

Installing software

You can install .pkg packages with the installer tool available inside shell. It is a somewhat limited cousin of OS X's installer:

$ darling shell
Darling [~]$ installer -pkg mc-4.8.7-0.pkg -target /

If you have previously downloaded the Midnight Commander package from Rudix, you can now run mc to start MC for OS X. For easier installation, install the Rudix Package Manager. Note that not all Rudix packages may work under Darling.

You can uninstall and list packages with the uninstaller command.

Working with DMG images

DMG images can be attached and deattached from inside darling shell with hdiutil. This is how you can install Xcode along with its toolchain and SDKs (note that Xcode itself doesn't run yet):

Darling [~]$ hdiutil attach Xcode_7.2.dmg
/Volumes/Xcode_7.2
Darling [~]$ cp -r /Volumes/Xcode_7.2/Xcode.app /Applications
Darling [~]$ export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
Darling [~]$ echo 'void main() { puts("Hello world"); }' > helloworld.c
Darling [~]$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang helloworld.c -o helloworld
Darling [~]$ ./helloworld
Hello world

Congratulations, you have just compiled and run your own Hello world application with Apple's toolchain.

AppKit

AppKit is still highly experimental and incomplete, but to work on it you need to configure CMake with -DFRAMEWORK_APPKIT=1 and install some additional packages.

Ubuntu 16.04:

sudo apt install qt5-default qtquick1-5-dev qtscript5-dev qtdeclarative5-dev