Olvidas una cosa crucial, a saber, que tu programa tendrá que interactuar con el sistema operativo para hacer algo interesante.
Las convenciones son diferentes entre Linux y OS X, por lo que el mismo binario no puede ejecutarse tal como está sin tener esencialmente una parte del código dependiente del sistema operativo para poder interactuar con él. Muchas de estas cosas se proporcionan a través de bibliotecas, que luego debe vincular, y eso significa que su programa debe poder vincularse, y la vinculación también es diferente entre los dos sistemas.
Y así sigue y sigue. Lo que en la superficie parece hacer lo mismo es muy diferente en los detalles reales.
Esto es factible si alguien quiere pasar suficiente tiempo para que esto suceda. El proyecto Darling está intentando esto, aunque al momento de escribir este artículo, se encuentra en un estado bastante primitivo.
Se ha hecho con éxito antes en otras plataformas:
-
Solaris y UnixWare incluyen un programa auxiliar llamado
lxrun
que funciona algo así comosudo
:pasa el nombre y los parámetros de su ejecutable al ayudante y arregla las cosas dinámicamente para que el ejecutable pueda comunicarse con el sistema operativo. El sitio oficial (abajo, enlace de archivo) dice que está bitroteado. -
El kernel de Linux una vez tuvo una característica llamada iBCS que hacía lo contrario, excepto que no necesitaba un ayudante porque el kernel reconocía los archivos binarios "extranjeros" directamente. Cayó en mal estado durante la serie de desarrollo del kernel 2.3, muy probablemente porque la pequeña batalla del servidor Unix terminó esencialmente una vez que salió el 2.4.
-
El kernel de FreeBSD se puede configurar para reconocer binarios de Linux y ejecutarlos como si fueran nativos. Esta característica parece estar en mejor forma que las dos anteriores.
OpenBSD y NetBSD tienen características similares.
OS X tiene una gran cantidad de FreeBSD, por lo que la compatibilidad con Linux podría ser sencilla.
Estoy bastante de acuerdo con todos, pero quiero agregar que, si bien esto requeriría una gran cantidad de tiempo y esfuerzo, no sería tanto como se ha necesitado para desarrollar Wine.
Gran parte de la dificultad en el desarrollo de Wine es que están portando un formato binario desde un sistema operativo de código cerrado y MUCHAS de las llamadas al sistema no están documentadas. Tuvieron que aplicar esencialmente ingeniería inversa al sistema operativo.
Si alguien hiciera esto desde un sistema operativo abierto a otro sistema operativo abierto, probablemente podría hacerlo en 1/10 del tiempo, ya que la capa de compatibilidad podría muy posiblemente copiarse/pegarse desde el otro sistema operativo si se llama a un sistema nativo equivalente. no existe Por supuesto, en la mayoría de los casos en todo el mundo POSIX, habrá una llamada nativa disponible.
Otro proyecto a destacar es ReactOS, donde esencialmente están creando una versión completa de Windows compatible con binario... sin necesidad de Wine.