Dado que el sistema operativo Apple OS-X es un derivado de UNIX (BSD) y la arquitectura subyacente de Mac (Intel) es la misma, ¿por qué no es muy sencillo ejecutar aplicaciones específicas de Apple en Linux?
Dado que el sistema operativo Apple OS-X es un derivado de UNIX (BSD) y la arquitectura subyacente de Mac (Intel) es la misma, ¿por qué no es muy sencillo ejecutar aplicaciones específicas de Apple en Linux?
Respuestas:
OS X es en realidad (principalmente) el shell gráfico patentado sobre BSD. Para crear una aplicación OS X GUI, uno tiene que seguir la API que Apple ha expuesto, y por lo tanto no es multiplataforma y no es fácilmente portátil.
Es por eso que la mayoría de las bibliotecas se portan fácilmente (en realidad, la mayoría se desarrollan en Linux) a Linux, pero no a sus shells gráficos.
Como nota al margen: existen marcos con los que puede crear aplicaciones GUI multiplataforma. Qt viene a mi mente. Pero el hecho de que esos marcos sean multiplataforma también hace que las aplicaciones creadas con ellas sean menos fáciles de usar en una plataforma específica que una aplicación GUI "nativa". Esos marcos tienden a hacer que todo parezca genérico en todas las plataformas, lo que en el caso de Apple es malo, porque Apple creó una experiencia de usuario muy específica que no "encaja" fácilmente en otras plataformas.
Editar (para incorporar los comentarios en la respuesta - gracias @ Nick, @kbisset y @John):
Una solución sería la de portar el sistema operativo entero X consola gráfica (bibliotecas Cacao / núcleo del código cerrado - que es lo que hace realmente único OS X ) a Linux. Y técnicamente, Apple podría hacerlo bastante fácil, pero no tienen razón para hacerlo, ya que todo su modelo de negocio es la singularidad de toda su plataforma: hardware y software.
Es CONCEBIBLE que alguien pueda intentar clonar las bibliotecas, pero eso llevaría décadas de trabajo, y probablemente nunca sería correcto debido a todas las llamadas indocumentadas que tendrían que ser replicadas.
La capa gráfica no es la misma, en absoluto. OS X usa un marco gráfico patentado, Linux usa X (X11 / X.org)
Casi todas las aplicaciones nativas de OS X usan marcos como Cocoa, CoreAnimation, etc., que solo están disponibles en OS X.
Por ejemplo, supongamos que tiene una aplicación que almacena una contraseña para el usuario; en OS X, esto usaría su sistema Keychain y las API relevantes. Si tuviera que portar esto a Linux, no hay un equivalente directo, por lo que tendría que volver a poner en práctica toda esta característica. Esa es una característica pequeña, y requeriría una gran reescritura.
Si escribe su aplicación utilizando una biblioteca GUI multiplataforma como GTK, Qt o wxWidgets, y la transferencia será mucho más fácil (o "posible"), pero los sistemas operativos siguen siendo muy diferentes en términos de IU (por ejemplo, SO X usa una barra de menú separada, mientras que Linux tiende a tener su barra de menú para cada ventana)
Uno de los mejores puertos multiplataforma que he visto es Transmission , que implementa su funcionalidad principal como una biblioteca (que contiene el menor código específico de plataforma posible), luego crea GUI nativas para cada plataforma, por separado. Esto significa que cada puerto comparte mucho código, pero todos tienen buenas interfaces nativas (en lugar de una única interfaz que se adapta muy bien a Linux, pero está fuera de lugar en OS X, o viceversa)
Hay un proyecto llamado Cocotron que "tiene como objetivo implementar una API Objective-C multiplataforma similar a la descrita por la documentación Cocoa de Apple Inc." que potencialmente facilitaría mucho la transferencia, pero parece haber muy poca actividad en los últimos tiempos. (la última publicación de blog fue en diciembre de 2008)
Porque la mayoría de las aplicaciones dependen mucho más que el procesador y la arquitectura subyacente de la máquina en la que se están ejecutando. También dependen de kits de herramientas de interfaz de usuario y otras bibliotecas específicas de la plataforma.