GNU/Linux >> Linux Esercitazione >  >> Linux

Compatibilità binaria tra Mac OS X e Linux

Dimentichi una cosa cruciale, vale a dire che il tuo programma dovrà interagire con il sistema operativo per fare qualcosa di interessante.

Le convenzioni sono diverse tra Linux e OS X, quindi lo stesso binario non può essere eseguito così com'è senza avere essenzialmente un pezzo di codice dipendente dal sistema operativo per poter interagire con esso. Molte di queste cose vengono fornite tramite librerie, che devi quindi collegare, e questo significa che il tuo programma deve essere collegabile, e anche il collegamento è diverso tra i due sistemi.

E così va avanti e avanti. Ciò che in superficie sembra fare la stessa cosa è molto diverso nei dettagli reali.


Questo è fattibile se qualcuno vuole dedicare abbastanza tempo per realizzarlo. Il progetto Darling sta tentando di farlo, anche se al momento della stesura di questo articolo è in uno stato piuttosto primitivo.

È già stato fatto con successo su altre piattaforme:

  • Solaris e UnixWare includono un programma di supporto chiamato lxrun che funziona qualcosa come sudo :passi il nome e i parametri dell'eseguibile all'helper e risolve le cose in modo dinamico in modo che l'eseguibile possa parlare con il sistema operativo. Il sito ufficiale (in basso, link all'archivio) dice che è bitrottato.

  • Il kernel di Linux una volta aveva una funzionalità chiamata iBCS che faceva il contrario, tranne per il fatto che non aveva bisogno di un helper perché il kernel riconosceva direttamente i binari "stranieri". È caduto in rovina durante la serie di sviluppo del kernel 2.3, molto probabilmente perché la piccola battaglia del server Unix era sostanzialmente finita quando è uscito il 2.4.

  • Il kernel di FreeBSD può essere configurato per riconoscere i binari di Linux ed eseguirli come se fossero nativi. Questa funzionalità sembra essere in condizioni migliori rispetto alle due precedenti.

    OpenBSD e NetBSD hanno caratteristiche simili.

OS X ha molto FreeBSD al suo interno, quindi il porting del suo supporto per Linux potrebbe essere semplice.


Sono praticamente d'accordo con tutti, ma voglio aggiungere che, sebbene ciò richiederebbe una notevole quantità di tempo e impegno, non sarebbe neanche lontanamente quanto è stato necessario per sviluppare Wine.

Gran parte della difficoltà nello sviluppo di Wine è che stanno portando un formato binario da un sistema operativo closed source e MOLTE delle chiamate di sistema non sono documentate. Hanno dovuto essenzialmente decodificare il sistema operativo.

Se qualcuno dovesse eseguire questa operazione da un sistema operativo aperto a un altro sistema operativo aperto, probabilmente potrebbe farlo in 1/10 del tempo, poiché il livello di compatibilità potrebbe plausibilmente essere copiato/incollato dall'altro sistema operativo se una chiamata di sistema nativa equivalente non esiste. Ovviamente, nella maggior parte dei casi nel mondo POSIX, sarà disponibile una chiamata nativa.

Un altro progetto degno di nota è ReactOS, in cui stanno essenzialmente creando una versione completa di Windows compatibile con i binari... non c'è bisogno di Wine.


Linux
  1. Scopri la differenza tra i comandi "su" e "su -" in Linux

  2. Come controllare la versione del sistema operativo e di Linux

  3. Compatibilità binaria della distribuzione Linux

  4. Qual è la differenza tra env e set (su Mac OS X o Linux)?

  5. Quale file system usare tra OSX e Linux

Qual è la differenza tra Linux e Unix?

Come installare e utilizzare Git nel sistema Linux

Condividi facilmente i file tra Linux, Windows e Mac utilizzando NitroShare

Storia di Unix e Linux

Come installare e configurare Redis su un sistema Linux

differenza tra netstat e ss in linux?