Запуск приложений OS X в Linux


Под OS X есть немало интересных приложений. Однако формат исполняемых файлов Mach-O, используемый в ОС от Apple, отличается от ELF, да и API, хоть и POSIX-совместимый, все же с Linux несовместим. В конце 2012 года был представлен проект Darling, который позиционируется разработчиками пока как средство для запуска инструментов разработки. На данный момент поддерживается совсем немного приложений (по большей части консольных), но хочется надеяться, что их количество будет неуклонно расти. Проект, в частности, использует GNUStep — свободную реализацию API Cocoa, которая применяется в OS X.

Сборка Darling потребует установки множества пакетов, в том числе компилятора clang:

$ sudo apt-get install git cmake clang nasm g++ checkinstall libxml2-dev libgnutls-dev libicu-dev libcairo-dev libjpeg-dev libpng-dev libtiff-dev libbsd-dev libudev-dev liblcms-dev libkqueue-dev libssl-dev libbz2-dev uuid-dev libncurses-dev libxrandr-dev

Получаем из Git-репозитория утилиту GNUStep Make, компилируем и ставим:

$ git clone https://github.com/gnustep/gnustep-make.git
$ cd gnustep-make
$ CC=clang CXX=clang++ ./configure
$ sudo make install

Собираем библиотеку поддержки Objective-C – GNUstep Libobjc2:

$ git clone https://github.com/gnustep/gnustep-libobjc2.git
$ cd gnustep-libobjc2
$ OBJCFLAGS=-fblocks CC=clang CXX=clang++ cmake .
$ rm GNUmakefile
$ make
$ sudo make install

Затем базовую часть GNUStep:

$ git clone https://github.com/gnustep/gnustep-base.git
$ cd gnustep-base
$ OBJCFLAGS=-fblocks CC=clang CXX=clang++ ./configure
$ make
$ sudo make install

И его GUI:

$ git clone https://github.com/gnustep/gnustep-gui.git
$ cd gnustep-gui
$ OBJCFLAGS=-fblocks CC=clang CXX=clang++ ./configure
$ export LD_LIBRARY_PATH=/usr/local/lib
$ echo export LD_LIBRARY_PATH=/usr/local/lib >> ~/.bashrc
$ make
$ sudo make install

GNUStep CoreBase, являющийся аналогом CoreFoundation, тоже необходим:

$ git clone https://github.com/gnustep/gnustep-corebase.git
$ cd gnustep-corebase
$ OBJCFLAGS=-fblocks CC=clang CXX=clang++ ./configure
$ make
$ sudo make install

Отвечающий за рендеринг аналог Quartz 2D — Opal тоже необходимо собрать:

$ git clone https://github.com/gnustep/gnustep-opal.git
$ cd gnustep-opal
$ OBJCFLAGS=-fblocks CC=clang CXX=clang++ make
$ sudo make install

Наконец, нужно скомпилировать собственно Darling:

$ git clone https://github.com/LubosD/darling.git
$ cd darling
$ CC=clang CXX=clang++ cmake .
$ make

Все, можно запускать приложения OS X, введя команду:

./dyld <Mach-O-файл> <аргументы>