Un binari gras (o binari multiarquitectura) és un programa o biblioteca executable d'ordinador que s'ha ampliat (o "engreixat") amb codi natiu de diversos conjunts d'instruccions que, per tant, es poden executar en diversos tipus de processadors. Això resulta en un fitxer més gran que un fitxer binari normal d'una arquitectura, per tant el nom.

El mètode habitual d'implementació és incloure una versió del codi màquina per a cada conjunt d'instruccions, precedida d'un únic punt d'entrada amb codi compatible amb tots els sistemes operatius, que executa un salt a la secció corresponent. Les implementacions alternatives emmagatzemen diferents executables en diferents forks, cadascun amb el seu propi punt d'entrada que el sistema operatiu utilitza directament.

L'ús de binaris fat no és habitual al programari del sistema operatiu; hi ha diverses alternatives per resoldre el mateix problema, com ara l'ús d'un programa d'instal·lació per triar un binari específic per a l'arquitectura en el moment de la instal·lació (com ara amb Android APK múltiples), seleccionar un binari específic per a l'arquitectura en temps d'execució (com amb els directoris d'unió de Plan 9 i els paquets de greix de GNUstep), utilitzar-lo en forma de codi font virtual, distribuir-lo o compilar-lo en una màquina virtual. (com ara amb Java) i compilació just-in-time.

Apol·lo Els executables compostos d'Apol·lo El 1988, el domini/OS SR10.1 d'Apollo Computer va introduir un nou tipus de fitxer, "cmpexe" (executable compost), que agrupava binaris per als executables Motorola 680x0 i Apollo PRISM.

Apple El binari gras d'Apple Un esquema binari gras va suavitzar la transició de l'Apple Macintosh, a partir del 1994, dels microprocessadors de 68k als microprocessadors PowerPC. Moltes aplicacions per a la plataforma antiga s'executaven de manera transparent a la plataforma nova sota un esquema d'emulació en evolució, però el codi emulat generalment s'executa més lent que el codi natiu. Les aplicacions llançades com a "binaris grossos" ocupaven més espai d'emmagatzematge, però funcionaven a tota velocitat a qualsevol plataforma. Això es va aconseguir empaquetant una versió compilada 68000 i una versió compilada per PowerPC del mateix programa als seus fitxers executables. El codi 68K més antic (CFM-68K o 68K clàssic) es va continuar emmagatzemant a la bifurcació de recursos, mentre que el codi PowerPC més recent estava contingut a la bifurcació de dades, en format PEF.

Binaris multiarquitectura de NeXT/Apple Mach-O i Mac OS X Apple Computer va adquirir NeXT el 1996 i va continuar treballant amb el codi OPENSTEP. Mach-O es va convertir en el format de fitxer d'objectes natiu del sistema operatiu Darwin gratuït d'Apple (2000) i Mac OS X d'Apple (2001), i els binaris multiarquitectura de NeXT van continuar sent compatibles amb el sistema operatiu. Sota Mac OS X, els binaris multiarquitectura es poden utilitzar per suportar múltiples variants d'una arquitectura, per exemple, per tenir diferents versions de codi de 32 bits optimitzades per a les generacions de processadors PowerPC G3, PowerPC G4 i PowerPC 970. També es pot utilitzar per suportar múltiples arquitectures, com ara PowerPC de 32 bits i 64 bits, o PowerPC i x86, o x86-64 i ARM64.

El binari universal d'Apple miniatura|Logotip binari universal d'Apple El 2005, Apple va anunciar una altra transició, dels processadors PowerPC als processadors Intel x86. Apple va promoure la distribució de noves aplicacions que admeten tant PowerPC com x86 de manera nativa mitjançant l'ús de fitxers executables en format binari multiarquitectura. Apple anomena aquests programes "aplicacions universals" i anomena el format de fitxer " binari universal " com potser una manera de distingir aquesta nova transició de la transició anterior, o altres usos del format binari multiarquitectura.

Binari Apple Fat EFI El 2006, Apple va canviar de PowerPC a CPU Intel i va substituir Open Firmware per EFI. Tanmateix, el 2008, alguns dels seus Mac utilitzaven EFI de 32 bits i alguns utilitzaven EFI de 64 bits. Per aquest motiu, Apple va ampliar l'especificació EFI amb binaris "grossos" que contenien tant binaris EFI de 32 bits com de 64 bits.

CP/M i DOS Binaris d'estil COM combinats per a CP/M-80 i DOS Els executables CP/M-80, MP/M-80, Concurrent CP/M, CP/M Plus, Personal CP/M-80, SCP i MSX-DOS per a les famílies de processadors Intel 8080 (i Zilog Z80) utilitzen el mateix. Extensió de fitxer COM com a sistemes operatius compatibles amb DOS per a binaris Intel 8086. En ambdós casos els programes es carreguen amb un offset +100h i s'executen saltant al primer byte del fitxer. Com que els codis operatius de les dues famílies de processadors no són compatibles, intentar iniciar un programa amb un sistema operatiu incorrecte provoca un comportament incorrecte i impredictible

Binaris combinats per a CP/M-86 i DOS CP/M-86 i DOS no comparteixen una extensió de fitxer comuna per als executables. Per tant, normalment no és possible confondre els executables. No obstant això, les primeres versions de DOS tenien tant en comú amb CP/M pel que fa a la seva arquitectura que alguns dels primers programes de DOS es van desenvolupar per compartir binaris que contenien codi executable. Un programa conegut per fer això va ser WordStar 3.2x, que utilitzava fitxers de superposició idèntics als seus ports per a CP/M-86 i MS-DOS, i utilitzaven codi dinàmicament fixat per adaptar-se a les diferents convencions de trucada d'aquests sistemes operatius en temps d'execució.

Linux FatELF: binaris universals per a Linux miniatura|Logotip de FatELF FatELF va ser una implementació binària grossa per a Linux i altres sistemes operatius semblants a Unix. Tècnicament, un binari FatELF era una concatenació de binaris ELF amb algunes metadades que indicaven quin binari utilitzar en quina arquitectura. A més de l'abstracció de l'arquitectura de la CPU (ordre de bytes, mida de paraules, conjunt d'instruccions de la CPU, etc.), hi ha l'avantatge dels binaris amb suport per a múltiples ABI i versions del nucli.

FatELF té diversos casos d'ús, segons els desenvolupadors:

Les distribucions ja no necessiten descàrregues separades per a diverses plataformes. Els arbres /lib, /lib32 i /lib64 separats ja no són necessaris a l'estructura de directoris del sistema operatiu. El sistema tria el sistema binari i les biblioteques correctes en lloc dels scripts de l'intèrpret d'ordres. Si l'ELF ABI canvia algun dia, els usuaris heretats encara poden ser compatibles. Distribució de complements de navegador web que funcionen de manera immediata amb diverses plataformes. Distribució d'un fitxer d'aplicació que funciona en variants del sistema operatiu Linux i BSD, sense cap capa de compatibilitat de plataformes. Una partició del disc dur es pot arrencar en diferents màquines amb diferents arquitectures de CPU, per al desenvolupament i l'experimentació. Mateix sistema de fitxers arrel, nucli i arquitectura de CPU diferents. Les aplicacions proporcionades per compartició de xarxa o llapis USB, funcionaran en diversos sistemes. Això també és útil per crear aplicacions portàtils i també imatges de cloud computing per a sistemes heterogenis.

Windows Fatpack Tot i que el format Portable Executable utilitzat per Windows no permet assignar codi a plataformes, encara és possible fer un programa de càrrega que envia basat en l'arquitectura. Això es deu al fet que les versions d'escriptori de Windows a ARM tenen suport per a l'emulació x86 de 32 bits, la qual cosa la converteix en un objectiu de codi màquina "universal" útil. Fatpack és un carregador que demostra el concepte: inclou un programa x86 de 32 bits que intenta executar els executables empaquetats a les seves seccions de recursos un per un.

Arm64X Quan va desenvolupar Windows 11 ARM64, Microsoft va introduir una nova manera d'estendre el format executable portàtil anomenada Arm64X. Un binari Arm64X conté tot el contingut que estaria en binaris x64/Arm64EC i Arm64 separats, però fusionat en un fitxer més eficient al disc. El conjunt d'eines Visual C++ s'ha actualitzat per donar suport a la producció d'aquests binaris. I quan la creació de binaris Arm64X és tècnicament difícil, els desenvolupadors poden crear DLL de reenviador pur Arm64X.

Referències

Categoria:Programari Categoria:Sistemes operatius