Dlaczego Windows exe nie działa w systemie Linux?

29

Ja nie pytając o jak zrobić pracę exe systemu Windows w systemie Linux.

Pytam DLACZEGO to nie działa.

Czym różni się sposób, w jaki Windows uruchamia plik wykonywalny, a Linux uruchamia plik wykonywalny? Dlaczego musieli być inni? Poza tym, dlaczego pliki wykonywalne Linuksa nie mają rozszerzenia plików?

Nav
źródło
1
Podobne pytanie na temat informatyki : Dlaczego nie mogę uruchomić programu Mac natywnie w systemie Windows?
Gilles „SO- przestań być zły”

Odpowiedzi:

45

Pliki wykonywalne Linux i Windows używają różnych formatów. Linux używa formatu ELF na większości architektur, podczas gdy Windows używa formatu PE . ELF jest lepiej dostosowany do sposobu, w jaki Linux zarządza bibliotekami współdzielonymi, a PE jest lepiej dostosowany do sposobu, w jaki Windows zarządza bibliotekami współdzielonymi, ale nie ma fundamentalnego powodu, dla którego Linux nie mógł wykonywać plików wykonywalnych PE lub plików wykonywalnych ELF systemu Windows. W rzeczywistości Linux może wykonywać pliki PE przy pomocy Wine .

Trudność polega na tym, że Windows i Linux mają zupełnie inne interfejsy API : mają różne interfejsy jądra i zestawy bibliotek. Aby faktycznie uruchomić aplikację Windows, Linux musiałby emulować wszystkie wywołania API, które wykonuje aplikacja. To dużo pracy. Wino robi to do pewnego stopnia, ale jest bardzo trudne, zwłaszcza, że ​​producent systemu Windows nie współpracuje. Możesz to porównać z, powiedzmy, nauką angielskiego, gdy twoim językiem ojczystym jest chiński: formatem wykonywalnym jest alfabet (nie tak trudny do opanowania), API to słownictwo (zajmuje lata, aby przejść do poziomu, na którym możesz zacząć czytać literaturę ).

Gilles „SO- przestań być zły”
źródło
9
„Słownictwo” to doskonała analogia.
Wstrzymano do odwołania.
Myślę, że miałeś na myśli zupełnie inny .
Mircea Chirea
Android obsługuje również bnary Linux (nie pakiety), jeśli są one skompilowane dla ARM, ponieważ jest oparty na Linuksie
Suici Doga,
@ SuiciDoga W pewnym sensie, ale jest to bardziej skomplikowane. Jądro systemu Android może uruchamiać pliki binarne systemu Linux (jeśli są one skompilowane dla odpowiedniego ABI jądra, np. Wrt przy użyciu rejestrów NEON), ale jeśli chcesz uruchamiać dynamicznie połączone programy, musisz również zainstalować wszystkie biblioteki. (A jeśli to zrobisz, możesz również zainstalować menedżera pakietów, więc „binaria, ale nie pakiet” nie jest tak naprawdę prawdą.)
Gilles „SO- przestań być zły”
Tak, wiem o tym, że musisz zmienić ścieżkę biblioteki itp.
Suici Doga,
14

Pliki binarne systemu Windows mają inny ABI i używają innego interfejsu API niż pliki binarne systemu Linux.

Pliki binarne systemu Linux nie wymagają rozszerzenia, ponieważ * nix używa bitów uprawnień do identyfikacji pliku wykonywalnego zamiast rozszerzenia.

Ignacio Vazquez-Abrams
źródło
1
Zgadzam się z odpowiedzią ... dodatkowy fragment danych, który może być istotny: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans
Ach tak, potrzebuje również innego modułu ładującego. en.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams
Szczególnie podoba mi się druga informacja, której brakuje w odpowiedzi @Gilles.
Timothy Gu,
@ IgnacioVazquez-Abrams To bardzo interesujące. Co jeśli powiem Ci, że natywnie uruchamiam grę Windows PlantsVsZombies.exe na Ubuntu 16.04 Linux? Po prostu zrobiłem to z nudów, wiedząc, że się nie uruchomi, ale tak zrobiłem i mogłem grać doskonale. Jest to niemożliwe, ponieważ ta gra wymaga uruchomienia interfejsu Steam i najwyraźniej nie. Jak to się zaczęło ??? Czy powinienem zadać nowe pytanie?
Nikos
@ RestlessC0bra: Wine i Mono to rzeczy.
Ignacio Vazquez-Abrams
0

W ten sposób usłyszałem od programistów, że okienko zostało wyjaśnione laikans.

W systemie Windows istnieją haczyki w programach i systemie operacyjnym, które Exe wywołuje do tego, że po prostu nie będzie tam w Linuksie. Ze względu na różnice w obu środowiskach. Początkowo Linux szuka uprawnień, Windows najpierw szuka formatu możliwego do połączenia, badając rozszerzenie, przeglądając właściwości, a następnie przeglądając plik Exe itp.

Istnieją aplikacje takie jak Netbackup, które zaczęły się w systemie Linux i zostały zmodyfikowane do działania w środowisku Windows bez korzystania z IMHO Wine, często są to jedne z najbardziej stabilnych i najlepiej zachowujących się aplikacji Windows.

Gdy aplikacje Windows. stają się niesforne, zwykle dlatego, że niektóre z haków utrzymywanych przez aplikację nie zostały całkowicie zwolnione, a system Windows uważa, że ​​tak było (wycieki pamięci). Gdy system Windows przekazuje niewydane miejsce pamięci do innej aplikacji Awaria i nagranie.

Rachunek
źródło
2
Jakoś chciałbym wierzyć, że Bill Gates odpowiedział na moje pytanie ;-)
Nav