Por que o trabalho do windows exe não funciona no Linux?

28

Estou não perguntando sobre como fazer um exe do Windows funcionar no Linux.

Estou a perguntar PORQUE que não funciona.

O que há de diferente na maneira como o Windows executa um executável e o Linux executa um executável? Por que eles têm que ser diferentes? Além disso, por que os executáveis do Linux não possuem uma extensão de arquivo?

    
por Nav 11.11.2010 / 14:03

3 respostas

43

Os executáveis Linux e Windows usam formatos diferentes. O Linux usa o formato ELF na maioria das arquiteturas, enquanto o Windows usa o PE . O ELF é mais adequado para o modo como o Linux gerencia bibliotecas compartilhadas, e o PE é mais adequado para o modo como o Windows gerencia bibliotecas compartilhadas, mas não há razão fundamental para que o Linux não possa executar executáveis PE ou executáveis ELF do Windows. Na verdade, o Linux pode executar executáveis PE, por meio do Wine .

A dificuldade é que o Windows e o Linux têm APIs completamente diferentes : eles têm diferentes interfaces de kernel e conjuntos de bibliotecas. Então, para realmente executar um aplicativo do Windows, o Linux precisaria emular todas as chamadas de API feitas pelo aplicativo. Isso é muito trabalho. O vinho faz isso em certa medida, mas é muito difícil, especialmente porque o fabricante do Windows não coopera. Você pode compará-lo com, digamos, aprender inglês quando seu idioma nativo é chinês: o formato executável é o alfabeto (não tão difícil de dominar), a API é o vocabulário (leva anos para chegar a um nível em que você pode começar a ler literatura ).

    
por 11.11.2010 / 15:37
14

Os binários do Windows têm uma ABI diferente e usam um API do que binários do Linux.

Os binários do Linux não precisam de uma extensão porque o * nix usa bits de permissão para identificar um executável em vez da extensão.

    
por 11.11.2010 / 14:06
0

Foi assim que ouvi o lado do Windows explicado em laymans de programadores.

No Windows existem ganchos em programas e o sistema operacional que o Exe faz chamadas para isso não vai estar lá no Linux. Por causa das diferenças em ambos os ambientes. Inicialmente o Linux procura por permissões, o Windows procura por um formato vinculável primeiro examinando a extensão, olhando as propriedades e procurando dentro do arquivo Exe, etc.

Existem aplicativos como o Netbackup que começaram no linux e foram modificados para rodar em ambiente Windows sem usar o IMHO de vinhos, freqüentemente esses são alguns dos aplicativos Windows mais estáveis que se comportam melhor.

Quando o Windows Apps. tornar-se indisciplinado geralmente é porque alguns desses ganchos mantidos pelo aplicativo não foram completamente liberados e o Windows pensa que eles eram (Memory Leaks). Quando o Windows transfere essa memória não liberada para outro aplicativo, trava e queima.

    
por 14.11.2010 / 16:20