Perché windows exe non funziona su Linux?


29

Sto Non chiedendo come fare un lavoro exe di Windows in Linux.

Sto chiedendo PERCHÉ non funziona.

Cosa c'è di diverso nel modo in cui Windows esegue un eseguibile e Linux esegue un eseguibile? Perché dovevano essere diversi? Inoltre, perché gli eseguibili di Linux non hanno un'estensione di file?


Risposte:


45

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 vi è alcun motivo fondamentale per cui Linux non possa eseguire eseguibili PE o eseguibili ELF di Windows. Infatti Linux può eseguire eseguibili PE, tramite Wine .

La difficoltà è che Windows e Linux hanno API completamente diverse : hanno diverse interfacce del kernel e set di librerie. Quindi per eseguire effettivamente un'applicazione Windows, Linux dovrebbe emulare tutte le chiamate API che l'applicazione effettua. È molto lavoro. Il vino lo fa in una certa misura, ma è molto difficile, soprattutto perché il produttore di Windows non collabora. Puoi paragonarlo, per esempio, all'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 ).


9
"Vocabulary" è un'analogia eccellente.
In pausa fino a nuovo avviso.

Penso che intendevi completamente diverso .
Mircea Chirea,

Android supporta anche i bnary Linux (non i pacchetti) se sono compilati per ARM perché è basato su Linux
Suici Doga,

@SuiciDoga Una specie di, ma è più complicato di così. Il kernel di Android può eseguire binari Linux (se sono compilati per l'ABI del kernel giusto, ad esempio l'uso dei registri NEON), ma se si desidera eseguire programmi collegati dinamicamente, è necessario installare anche tutte le librerie. (E se lo fai che si potrebbe installare un gestore di pacchetti troppo, così “i binari, ma non il pacchetto” non è proprio vero.)
Gilles 'SO-tappa è male'

Sì, so che devi cambiare il percorso della biblioteca ecc.
Suici Doga,

14

I binari di Windows hanno un ABI diverso e usano un'API diversa rispetto ai binari di Linux.

I binari di Linux non hanno bisogno di un'estensione perché * nix utilizza i bit di autorizzazione per identificare un eseguibile anziché l'estensione.


1
Concordo con la risposta ... dati aggiuntivi che potrebbero essere rilevanti: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans

Ah sì, ha bisogno anche di un caricatore diverso. en.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams

Mi piace soprattutto la seconda informazione mancante nella risposta di @Gilles.
Timothy Gu,

@ IgnacioVazquez-Abrams È molto interessante. E se ti dicessi che ho appena eseguito un gioco Windows PlantsVsZombies.exe su Ubuntu 16.04 Linux in modo nativo? L'ho fatto solo per noia sapendo che non si sarebbe lanciato, ma l'ho fatto e ho potuto giocarlo perfettamente. È impossibile, perché quel gioco ha bisogno dell'api steam per funzionare per primo e chiaramente no. Come è stato lanciato ??? Dovrei fare una nuova domanda per questo?
Nikos,

@ RestlessC0bra: vino e mono sono cose.
Ignacio Vazquez-Abrams,

0

È così che ho sentito il lato di Windows spiegato in termini laici dai programmatori.

In Windows ci sono hook nei programmi e il sistema operativo a cui Exe fa chiamate che non sarà presente in Linux. A causa delle differenze in entrambi gli ambienti. Inizialmente Linux cerca i permessi, Windows cerca prima un formato collegabile esaminando l'estensione, guardando le proprietà quindi guardando all'interno del file Exe ecc.

Esistono applicazioni come Netbackup che sono state avviate in Linux e sono state modificate per essere eseguite in ambiente Windows senza utilizzare wine IMHO, spesso sono alcune delle app Windows più stabili e con il comportamento migliore.

Quando app di Windows. diventa indisciplinato di solito perché alcuni di questi hook contenuti nell'applicazione non sono stati completamente rilasciati e Windows pensa che lo siano (perdite di memoria). Quando Windows distribuisce lo spazio di memoria inedito a un'altra applicazione, crash e masterizzazione.


2
In qualche modo mi piacerebbe credere che Bill Gates abbia risposto alla mia domanda ;-)
Nav
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.