Gli eseguibili Linux e Windows utilizzano formati diversi. Linux utilizza il formato ELF sulla maggior parte delle architetture, mentre Windows utilizza il formato PE. ELF è più adatto al modo in cui Linux gestisce le librerie condivise e PE è più adatto al modo in cui Windows gestisce le librerie condivise, ma non c'è alcun motivo fondamentale per cui Linux non possa eseguire eseguibili PE o eseguibili ELF di Windows. Infatti Linux può eseguire gli eseguibili PE, attraverso Wine.
La difficoltà è che Windows e Linux hanno API completamente diverse:hanno interfacce kernel e set di librerie diversi. Quindi, per eseguire effettivamente un'applicazione Windows, Linux dovrebbe emulare tutte le chiamate API effettuate dall'applicazione. È un sacco di lavoro. Wine lo fa in una certa misura, ma è molto difficile, soprattutto perché il produttore di Windows non collabora. Puoi confrontarlo, ad esempio, con l'apprendimento dell'inglese quando la tua lingua madre è il cinese:il formato eseguibile è l'alfabeto (non così difficile da padroneggiare), l'API è il vocabolario (ci vogliono anni per arrivare a un livello in cui puoi iniziare a leggere la letteratura ).
I binari di Windows hanno un ABI diverso e utilizzano un'API diversa rispetto ai binari di Linux.
I file binari di Linux non hanno bisogno di un'estensione perché *nix usa i bit di autorizzazione per identificare un eseguibile invece dell'estensione.