Preparatevi, questa domanda apparirà probabilmente ingenua e / o sciocca, visto che sono relativamente nuovo al funzionamento interno di sistemi come unix e alla programmazione in generale.
Pronto? Ok! Attraverserò circa 3 livelli di ludicrosità, aumentando man mano che procederò.
Abbiamo due sistemi con hardware simile (il punto principale è il processore, diciamo un Intel Core 2 duo standard).
Uno è in esecuzione (inserisci qui la tua distribuzione Linux: Ubuntu verrà utilizzato d'ora in poi) e l'altro è in esecuzione, diciamo Mac OS X.
Uno compila un programma equivalente, diciamo qualcosa del tipo:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Il codice è estremamente semplice, perché non voglio ancora considerare le implicazioni delle librerie condivise.
Quando compilato sui rispettivi sistemi. La differenza principale tra l'uscita non è una questione di ELF vs Mach-O? Se uno dovesse eliminare ogni binario della formattazione, lasciando un binario piatto, le istruzioni della macchina smontata non sarebbero le stesse? (con forse alcune differenze a seconda delle abitudini / tendenze dei compilatori).
1.) Se si sviluppasse un programma per riconfezionare il binario piatto prodotto dal nostro sistema Ubuntu, nella formattazione Mach-O, verrebbe eseguito nel sistema Mac OS X? Quindi, se uno avesse solo il binario compilato del presunto programma sopra e uno avesse questo strumento mistico per il riconfezionamento di binari piatti, i programmi semplici sarebbero in grado di funzionare sul sistema Mac OS X?
Ora andiamo un po 'oltre.
Ora abbiamo un programma con sorgente come:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.) Supponendo che questo programma sia compilato e staticamente collegato, il nostro programma magico sarebbe ancora in grado di riconfezionare il file binario grezzo nel formato Mach-O e farlo funzionare su mac os X? Visto che non avrebbe bisogno di fare affidamento su altri binari, (per i quali il sistema mac non avrebbe in questo caso)
E ora per il livello finale;
3.) E se usassimo questo presunto programma per convertire tutte le librerie condivise necessarie nel formato Mach-O, e poi invece compilassimo il programma sopra con collegamento dinamico. Il programma sarebbe ancora riuscito a funzionare?
Per il momento dovrebbe essere così, ovviamente ogni passo dell'assurdità si basa sulla base precedente, anche per avere un senso. quindi se il primo pilastro viene distrutto, dubito che ci sarebbero molti meriti per i livelli rimanenti.
Sicuramente non mi spingerei nemmeno a pensarci con programmi che hanno in mente la GUI. I sistemi di finestre sarebbero probabilmente un altro mal di testa. Sto prendendo in considerazione solo i programmi da riga di comando in questa fase.
Ora invito il mondo a correggermi e mi dico tutto ciò che non va nella mia assurda linea di pensiero.