Fat binary
# Fat binary

Un fat binary (o multiarchitecture binary) è un programma nativo per più set di istruzioni (SI) ed è quindi eseguibile su più tipi di architetture di processori. Il metodo usuale di implementazione consiste nell'inclusione di una versione del linguaggio macchina per ogni SI, realizzando un file n volte più grande di un binario per una sola architettura, da cui il nome.

Un popolare utilizzo di programmi fat binary è stato per il PowerPC della Apple Macintosh, dove un programma avrebbe dovuto contenere sia le istruzioni per il processore Motorola 68000 che quelle per il PowerPC. Ciò fu reso possibile dall'inserimento del codice per PowerPC (nel formato PEF) all'interno del data fork del programma, mentre il codice per 68000 venne mantenuto nel resource fork. I programmi Fat binary sono usati anche per la transizione dal processore PPC verso x86 tra il 2006 e il 2007. Apple ha scelto di chiamare questi binari "Universal binary", probabilmente per distinguere questa nuova transizione di processori da quella precedente.

Il codice oggetto Mach-O usato nei sistemi operativi NEXTSTEP e OPENSTEP della NeXT supporta il formato fat binary, il che permette al software sviluppato per NeXT Cube di essere compilato eseguito su una macchina Intel sopra NeXTSTEP. Questa tecnologia è inoltre disponibile in Darwin, e quindi macOS, dove può essere usato per supportare più varianti di una architettura, avendo differenti versione del codice compilato per processori PowerPC G3, PowerPC G4, e PowerPC G5. Questa soluzione è stata adottata inizialmente per permettere l'esecuzione di applicazioni OpenStep su processori IA-32 e sulle varie piattaforme RISC supportate, ed ha trovato un nuovo utilizzo nell transizione da PPC a X86 precedentemente menzionata.

Il supporto al formato fat binary non è lo stesso su diversi sistemi operativi; ci sono molte alternative per risolvere il problema, quali l'uso di un programma di installazione per scegliere il binario specifico per l'architettura al momento dell'installazione, distribuendo il codice sorgente del programma e compilandolo al momento, o usando una macchina virtuale ed un Compilatore just-in-time. Ognuna di queste soluzioni ha i suoi svantaggi, che si manifestano maggiormente se l'utente cerca di portare un programma su una nuova macchina attraverso un upgrade.

