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

29

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

Estou perguntando POR QUE ele 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 tinham que ser diferentes? Além disso, por que os executáveis ​​linux não têm uma extensão de arquivo?

Nav
fonte

Respostas:

45

Os executáveis ​​do Linux e Windows usam diferentes formatos. O Linux usa o formato ELF na maioria das arquiteturas, enquanto o Windows usa o formato PE . O ELF é mais adequado para a maneira como o Linux gerencia bibliotecas compartilhadas, e o PE é mais adequado para a maneira como o Windows gerencia bibliotecas compartilhadas, mas não há razão fundamental para que o Linux não possa executar executáveis ​​do PE ou executáveis ​​do Windows ELF. De fato, o Linux pode executar executáveis ​​PE, através do Wine .

A dificuldade é que o Windows e o Linux têm APIs completamente diferentes : eles têm diferentes interfaces do kernel e conjuntos de bibliotecas. Portanto, para realmente executar um aplicativo do Windows, o Linux precisaria emular todas as chamadas de API que o aplicativo faz. Isso dá muito trabalho. O Wine faz isso até certo ponto, mas é muito difícil, principalmente porque o criador do Windows não coopera. Você pode compará-lo com, digamos, aprender inglês quando o idioma nativo é o 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 )

Gilles 'SO- parar de ser mau'
fonte
9
"Vocabulário" é uma excelente analogia.
Pausado até novo aviso.
Eu acho que você quis dizer completamente diferente .
Mircea Chirea
Android também suporta bnaries Linux (não pacotes) se eles são compilados para ARM, porque é baseado em Linux
Suici Doga
@SuiciDoga Mais ou menos, mas é mais complicado que isso. O kernel do Android pode executar binários do Linux (se eles forem compilados para a ABI correta do kernel, por exemplo, usando o registro NEON), mas se você quiser executar programas vinculados dinamicamente, também precisará instalar todas as bibliotecas. (E se você fizer isso, poderá instalar um gerenciador de pacotes também, para que “os binários, mas não o pacote” não sejam realmente verdadeiros.)
Gilles 'SO- deixa de ser mau'
Sim, eu sei sobre isso você tem que mudar de caminho da biblioteca etc
Suici Doga
14

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

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

Ignacio Vazquez-Abrams
fonte
1
Concorde com a resposta ... dados adicionais que podem ser relevantes: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans
Ah, sim, ele precisa de um carregador diferente também. en.wikipedia.org/wiki/Loader_%28computing%29 #
Ignacio Vazquez-Abrams
Gosto especialmente da segunda informação que falta na resposta de @Gilles.
Timothy Gu
@ IgnacioVazquez-Abrams Isso é muito interessante. E se eu disser que eu apenas executei um jogo do Windows PlantsVsZombies.exe no Ubuntu 16.04 Linux nativamente? Acabei de fazer isso por tédio, sabendo que não seria lançado, mas o fez e eu poderia jogar perfeitamente bem. Isso é quase impossível, porque esse jogo precisa da API de vapor para rodar primeiro e claramente não. Como foi lançado ??? Devo fazer uma nova pergunta para isso?
Nikos
@ RestlessC0bra: Vinho e Mono são coisas.
Ignacio Vazquez-Abrams
0

Foi assim que ouvi o lado das janelas explicado em termos leigos pelos programadores.

No Windows, existem ganchos nos programas e o sistema operacional que o Exe faz para isso simplesmente não existe no Linux. Por causa das diferenças nos dois ambientes. Inicialmente, o Linux procura permissões, o Windows procura um formato vinculável primeiro examinando a extensão, examinando as propriedades e depois dentro do arquivo Exe etc.

Existem aplicativos como o Netbackup que foram iniciados no Linux e foram modificados para serem executados no ambiente Windows sem o uso do wine IMHO, frequentemente esses são alguns dos aplicativos Windows mais estáveis ​​e com melhor comportamento.

Quando aplicativos do Windows. tornam-se indisciplinados geralmente porque alguns dos ganchos mantidos pelo aplicativo não foram completamente liberados e o Windows pensa que sim (vazamentos de memória). Quando o Windows entrega esse espaço de memória não liberado para outro aplicativo, bata e grave.

Conta
fonte
2
De alguma forma, eu gostaria de acreditar que Bill Gates respondeu à minha pergunta ;-) #
315 Nav Nav