Por que nem todos os aplicativos do Mac são facilmente portáveis para o Linux?

15

Como o sistema operacional Apple OS-X é derivado do UNIX (BSD) e a arquitetura Mac (subjacente) é a mesma, por que não é muito simples executar aplicativos específicos da Apple no Linux?

    
por Nick Pierpoint 14.08.2009 / 12:34

4 respostas

23

OS X é na verdade (principalmente) o shell gráfico proprietário em cima do BSD. Para criar um aplicativo GUI do OS X, é preciso seguir a API que a Apple expôs e, portanto, isso não é uma plataforma cruzada e não é facilmente transportável.
É por isso que a maioria das bibliotecas são portadas com facilidade (na verdade, a maioria é desenvolvida no Linux) para o Linux, mas não em suas gráficas.

Em uma nota lateral: existem estruturas com as quais você pode criar aplicativos GUI entre plataformas. Qt vem à mente. Mas o fato de esses frameworks serem multiplataformas também torna os aplicativos criados com eles menos fáceis de usar em uma plataforma específica do que um aplicativo GUI "nativo". Essas estruturas tendem a fazer tudo parecer genérico em todas as plataformas, o que no caso da Apple é ruim, porque a Apple criou uma experiência de usuário muito específica que não se encaixa facilmente em outras plataformas.

Editar (para incorporar os comentários na resposta - obrigado @Nick, @kbisset e @John):
Uma solução seria portar todo o shell gráfico do OS X (as bibliotecas de código fechado Cocoa / Core - que é o que torna o OS X verdadeiramente único) para o Linux. E, tecnicamente, a Apple pode fazer isso com bastante facilidade, mas eles não têm motivos para isso, já que todo o seu modelo de negócios é a exclusividade de toda a sua plataforma - hardware e software. É CONCEBIDO que alguém possa tentar clonar as bibliotecas, mas isso levaria décadas para o homem fazer, e provavelmente nunca estaria certo devido a todas as chamadas não documentadas que teriam que ser replicadas.

    
por 14.08.2009 / 12:39
2

Por aplicativos específicos da Apple, você quer dizer aplicativos GUI? Uma vez que você se move acima da linha de comando, existem APIs específicas da Apple para tudo (gráficos, som, etc.) que não são suportadas no Linux, portanto, não é possível portar aplicativos facilmente.

    
por 14.08.2009 / 12:41
1

A camada gráfica não é a mesma. OS X usa uma estrutura gráfica proprietária, o linux usa X (X11 / X.org)

Quase todos os aplicativos nativos do OS X usam estruturas como Cocoa, CoreAnimation e assim por diante, que estão disponíveis apenas no OS X.

Por exemplo, digamos que você tenha um aplicativo que armazene uma senha para o usuário - no OS X, isso usaria seu sistema Keychain e APIs relevantes. Se você fosse portar isso para o Linux, não há um equivalente direto, então você teria que reimplantar este recurso inteiro. Esse é um recurso minúsculo e exigiria uma grande reescrita.

Se você escrever seu aplicativo usando uma biblioteca GUI multiplataforma como GTK, Qt ou wxWidgets, a portabilidade será muito mais fácil (ou "possível") - mas os sistemas operacionais ainda são muito diferentes em termos de UI (por exemplo, o OS X usa uma barra de menu separada, enquanto o Linux tende a ter sua barra de menu para cada janela)

Uma das melhores portas multi-plataforma que vi é Transmission , que implementa sua funcionalidade principal como uma biblioteca (que contém o menor código específico de plataforma possível), criando então GUIs nativas para cada plataformas, separadamente. Isso significa que cada porta compartilha muito código, mas todas têm boas interfaces nativas (ao invés de uma única interface que se encaixa muito bem no Linux, mas está fora do lugar no OS X, ou vice-versa)

Existe um projeto chamado Cocotron que "visa implementar uma API Objective-C de plataforma cruzada semelhante à descrita pela Apple Inc. "Cocoa documentation" que potencialmente tornaria a portabilidade muito mais fácil, mas parece haver muito pouca atividade ultimamente (o último post foi em dezembro de 2008)

    
por 14.08.2009 / 17:43
1

Como a maioria dos aplicativos depende muito mais do processador e da arquitetura subjacente da máquina em que eles estão sendo executados. Eles também dependem dos kits de ferramentas da interface do usuário e de outras bibliotecas específicas da plataforma.

    
por 14.08.2009 / 12:38