Darling: Projecto para a execução de Aplicações do Mac OS X no Linux !

Iniciado por Nosferatu Arucard, 09 de Dezembro de 2012, 12:03

tópico anterior - próximo tópico

Nosferatu Arucard

Apesar de existirem alguns projectos dedicados à criação de ferramentas cross-compiling dedicadas a portar código escrito no Cocoa API para outras plataformas (desde que tenha o código-fonte disponível), surgiu por fim um projecto sério dedicado a criar uma camada de compatibilidade similar ao Wine para correr programas do Mac OS X em sistemas Linux.  ::)

O Darling é essencialmente um mini-Mac OS X open-source constituído por vários componentes (muitos deles ainda muito incompletos  :P), do qual se destaca um Mach-O Binary e MacBinary loader para carregar programas compilados para o Darwin (O kernel nativo do Mac OS X e iOS), um programa que permita a leitura e execução dos pacotes *.app (Literalmente todos os grandes programas do Mac OS X são executados dentro de um ficheiro comprimido que contêm os executáveis, as bibliotecas e frameworks do programa, em vez de espalhar o conteúdo por várias pastas do sistema operativo, excepto claro as API do sistema operativo) do qual ainda é um pré-alfa, e um compilador LLVM-GCC que permite compilar código do Darwin para criar executáveis Linux nativos, ou executáveis Mach-O Darwin.

A outra componente (na verdade o grande componente) que ao fim de quatro meses de trabalho árduo foi implementado algumas API, é o grande framework do Mac OS X: o Cocoa API. Sem a implementação desta framework, não será possível correr programas gráficos em Linux (até ao momento só corre demos "Hello World!"). As primeiras versões do Mac OS X (ou das versões pré-Unix) usavam outra framework mais antiga: o Carbon API, do qual actualmente é totalmente obsoleta e incompatível com os Mac equipados com processadores Intel (Embora em alguns casos fosse possível a instalação e execução de programas Carbon em Mac Intel utilizando o Rosetta, um emulador PPC userland, do qual foi removido de vez na versão 10.7 do OS X).
O iOS utiliza uma versão modificada do Cocoa API, e surpreendentemente o autor do Darling planeia a execução de aplicações iOS no Linux  :o caso tenha maior envolvimento da comunidade open-source (e exigiria a implementação de um emulador ARMv7 para correr os programas compilados). Eventualmente o Darling suportará programas escritos para o PowerPC, caso se justifique (e exigiria a criação de um emulador PPC, uma vez que o QEMU-ppc poderia não ser adequadamente optimizado para tal) o esforço para correr aplicações mais antigas.

Tirando o Cocoa e o Carbon API, o Mac OS X utiliza as mesmas bibliotecas de baixo nível que o Linux, como o OpenGL, o OpenAL, o OpenCL, SMB e outras componentes similares. No caso do sub-sistema gráfico, o Mac OS X implementou uma framework proprietária de interface designada por CoreGraphics que não é mais que uma ponte entre o Cocoa, o OpenGL e o driver da placa gráfica , o mesmo acontece para o CoreAudio para o sub-sistema de som que utiliza o OpenAL, e o GDC que é uma ponte para o OpenCL (Uma biblioteca que permite o uso da GPU para a execução de cálculo numérico em paralelo, aliviando a CPU desta tarefa).

Neste aspecto isto significa que a execução de jogos designados para o Mac OS X deverão correr no Linux com o Darling de forma mais directa e quase sem sobrecarga, do que  a execução da versão do Windows pelo Wine, uma vez que a API gráfica é o OpenGL nos dois sistemas operativos (se bem que o Mac OS X ainda não suporta bem o OpenGL 3.2  >:( quando mais o 4 que está bem implementado no Linux, desde que os drivers suportem  ::))
Na prática observa-se que muitos jogos Windows foram portados para o Mac OS X utilizando o Cider, que é uma versão modificada do antigo WineX que foi baseado numa versão obsoleta do Wine (de 2001  :P). E ao contrário das últimas versões do Wine que já possuem uma versão embebida e open-source do DirectX (via WGL e Open GL), do qual o suporte efectivo do DirectX 10 está para breve (já implementaram 80%, mas só agora é que estão a completar a interface primária desta API  >:(), o Cider têm um desempenho mediano, e observa-se que os jogos Windows a correr pelo Wine chegam a ter melhor desempenho que a compilação tosca do Cider !
Em jogos desenvolvidos de raiz para o Mac OS X ou que basearam no OpenGL nativamente, já têm uma performance mais equilibrada.

  Outro dos objectivos imediatos do Darling seria a execução de softwares como o Final Cut Pro 7 (que é quase um must-have de antigos utilizadores profissionais do Mac que mudaram de sistema porque a versão X é 100% incompatível com os plug-ins e projectos do 7  :o, como foi reduzido a um programa mais vocacionado para os amadores), ou mesmo o AutoCad (as últimas versões já foram nativamente portadas para o Mac OS X, e a versão Windows não corre bem no Wine) que caso o Darling fosse bem sucedido, seria uma boa solução para correr este programa no Linux. (Se a versão Win32 falhasse, tentava-se a versão Cocoa  :D), ou mesmo o iTunes !

Em alguns casos seria até possível correr as três versões do mesmo programa no Linux (como o Steam  ;D), e comparar qual das versões (Linux, Mac OS X, Windows) era a mais rápida!  :)

Por agora, o Darling corre essencialmente programas no modo de linha de comandos (Mach-O binary) mas verifica-se um padrão muito curioso, e que o autor já desconfiava, é que os programas compilados para o Darwin executam muito mais depressa no Linux com o Darling, do que no sistema operativo original !  :o (O problema está no kernel Darwin).

Se quiserem experimentar ou contribuírem para o desenvolvimento do Darling, basta entrar no seguinte site:
http://darling.dolezel.info/en/Darling

Para obterem o programa e testá-lo podem registar o seguinte servidor git:
https://github.com/LubosD/darling

Mas terão que compilar directamente a parte do código-fonte (ainda faltará um bom bocado até surgirem pacotes compilados para o Ubuntu  ::)), e ter em atenção que isto é ainda uma versão alfa!