GNU/Linux >> Znalost Linux >  >> Linux

Binární kompatibilita mezi Mac OS X a Linuxem

Zapomínáte na jednu zásadní věc, totiž že váš program bude muset interagovat s operačním systémem, aby mohl dělat něco zajímavého.

Konvence se mezi Linuxem a OS X liší, takže stejný binární soubor nemůže běžet tak, jak je, aniž by v podstatě měl kus kódu závislého na operačním systému, aby s ním bylo možné interagovat. Mnoho z těchto věcí je poskytováno prostřednictvím knihoven, které pak musíte propojit, a to znamená, že váš program musí být propojitelný a propojení se mezi těmito dvěma systémy také liší.

A tak to jde pořád dokola. To, co navenek zní jako dělat totéž, se ve skutečných detailech velmi liší.


To je proveditelné, pokud někdo chce strávit dostatek času, aby se to stalo. Projekt Darling se o to pokouší, i když v době psaní tohoto článku je v docela primitivním stavu.

Na jiných platformách to již bylo úspěšně provedeno:

  • Solaris a UnixWare obsahují pomocný program nazvaný lxrun což funguje něco jako sudo :předáte své jméno a parametry spustitelného souboru pomocníkovi a ten věci dynamicky opraví, takže spustitelný soubor může mluvit s OS. Oficiální stránka (dole, odkaz na archiv) říká, že je bitrotted.

  • Linuxové jádro kdysi mělo funkci zvanou iBCS, která dělala opak, kromě toho, že nepotřebovala pomocníka, protože jádro přímo rozpoznávalo „cizí“ binární soubory. Během vývojové série jádra 2.3 chátral, s největší pravděpodobností proto, že bitva malých unixových serverů byla v podstatě u konce, jakmile vyšla verze 2.4.

  • Jádro FreeBSD lze nakonfigurovat tak, aby rozpoznávalo linuxové binární soubory a spouštělo je, jako by byly nativní. Tato funkce se zdá být v lepším stavu než dvě výše uvedené.

    OpenBSD a NetBSD mají podobné vlastnosti.

OS X má v sobě hodně FreeBSD, takže portování jeho podpory pro Linux může být jednoduché.


V podstatě souhlasím se všemi, ale chci dodat, že i když by to vyžadovalo značné množství času a úsilí, nebylo by to zdaleka tolik, kolik bylo zapotřebí k vývoji Wine.

Velká část obtíží ve vývoji Wine spočívá v tom, že přenášejí binární formát z operačního systému s uzavřeným zdrojovým kódem a MNOHA systémových volání je nezdokumentovaných. Museli v podstatě provést zpětnou analýzu operačního systému.

Pokud by to někdo udělal z jednoho otevřeného operačního systému na jiný, mohl by to pravděpodobně udělat za 1/10 času, protože vrstvu kompatibility by bylo možné zkopírovat/vložit z jiného operačního systému, pokud by ekvivalentní nativní systémové volání neexistuje. Samozřejmě, ve většině případů ve světě POSIX bude k dispozici nativní volání.

Dalším významným projektem je ReactOS, kde v podstatě vytvářejí plnou binárně kompatibilní verzi Windows... není potřeba Wine.


Linux
  1. Linux – rozdíl mezi uživatelským prostorem a prostorem jádra?

  2. Binární kompatibilita distribuce Linuxu

  3. Jaký je rozdíl mezi env a set (na Mac OS X nebo Linux)?

  1. Naučte se rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. Jaký souborový systém použít mezi OSX a Linuxem

  3. Jaký je rozdíl mezi voláním knihovny a voláním systému v Linuxu?

  1. Jak zkontrolovat verzi OS a Linuxu

  2. Jak nastavit Wifi-Direct připojení mezi Androidem a Linuxem

  3. git vynutí obnovení indexu po přepnutí mezi okny a linuxem