Darling — это бесплатный и открытый исходный код для обеспечения совместимости macOS с Linux. [1] Он дублирует функции macOS , предоставляя альтернативные реализации библиотек и фреймворков, которые вызывают программы macOS. [2] Этот метод дублирования отличается от других методов, которые также можно считать эмуляцией, [3] когда программы macOS запускаются на виртуальной машине . [4] Darling называют аналогом WINE для запуска приложений macOS. [5]
Проект стартовал летом 2012 года и основывается на предыдущем проекте, названном maloader, который был прекращен из-за нехватки времени. Было показано, что слой работает со многими консольными приложениями , такими как Midnight Commander , The Unarchiver , Python и т. д. на слое, но он также имеет базовую поддержку графических приложений на основе фреймворка Cocoa. [6] [1] Darling имеет возможность извлекать образы дисков Apple . [7]
Целью проекта является поддержка приложений iOS в будущем. [8]
На входе системы Darling находится загрузчик для двоичных файлов Mach-O , исполняемого формата для операционных систем Apple . Предшественник Darling, maloader, представил максималистский подход к проблеме, пытаясь повторить все, что делает динамический загрузчик библиотек Apple dyld. Это оказалось сложным, и с момента «перехода Mach-O» 2017 года Darling использовал облегченный загрузчик, достаточный для запуска Apple dyld с открытым исходным кодом. [9]
Чтобы предоставить двоичным файлам macOS ядро , Darling использует модифицированное ядро XNU (с лицензией APSL), упакованное в модуль ядра Linux с лицензией GPL. [ требуется обновление ] Это не то же самое, что включение кода GPL в программное обеспечение APSL, и лицензия APSL позволяет выполнять ссылки из кода с другой лицензией (в данном случае GPL). Модуль обрабатывает типичную работу ядра Mach , в основном обработку портов IPC . [10] Некоторые проблемы с лицензированием существуют [ требуется ссылка ] в модуле darling-mach, поскольку команда добавляет модификации GNU GPL в ядро APSL . [11] [ неудачная проверка ]
Выше ядра находится корневая среда. Darling, как и WINE, поддерживает префиксы chroot , реализованные с помощью Linux overlayfs (в отличие от преобразования путей в WINE). Пространства имен PID , IPC и UTS используются для создания контейнера для системы Darwin внутри.
Фреймворки и системные библиотеки в Darling в максимально возможной степени основаны на исходном коде , выпущенном Apple. Переход Mach-O позволяет упростить построение этих фреймворков, поскольку теперь они построены в формате Mach-O, для которого они были предназначены. [9] Чтобы заполнить пробелы для многих фреймворков более высокого уровня, таких как Cocoa , Darling использует код из Cocotron, ApportableFoundation и GNUstep . [1]
Более крупная система Darling основана на многих внешних компонентах, которые используют различные лицензии, все из которых являются открытыми. Основная лицензия — GPLv3 . [12]
Darling использует модуль ядра для предоставления определенных функций OS X, в основном Mach Ports IPC. Ни одно приложение OS X не может быть запущено без этого модуля, поскольку Libc требует Mach Ports для своей инициализации и даже для таких базовых вещей, как sleep().