Mengapa windows exe tidak berfungsi di Linux?

29

Saya tidak bertanya tentang cara membuat exe Windows berfungsi di Linux.

Saya bertanya MENGAPA itu tidak berhasil?

Apa yang berbeda tentang cara Windows menjalankan executable dan Linux menjalankan executable? Mengapa mereka harus berbeda? Selain itu, mengapa linux executable tidak memiliki ekstensi file?

Nav
sumber
1
Pertanyaan serupa tentang Ilmu Komputer : Mengapa saya tidak bisa menjalankan program mac secara native di windows?
Gilles 'SO- stop being evil'

Jawaban:

45

Executable Linux dan Windows menggunakan format yang berbeda. Linux menggunakan format ELF pada sebagian besar arsitektur, sedangkan Windows menggunakan format PE . ELF lebih cocok dengan cara Linux mengelola perpustakaan bersama, dan PE lebih cocok dengan cara Windows mengelola perpustakaan bersama, tetapi tidak ada alasan mendasar mengapa Linux tidak bisa menjalankan executable PE atau executable Windows ELF. Bahkan Linux dapat mengeksekusi executable PE, melalui Wine .

Kesulitannya adalah bahwa Windows dan Linux memiliki API yang sama sekali berbeda : mereka memiliki antarmuka kernel dan set pustaka yang berbeda. Jadi untuk benar-benar menjalankan aplikasi Windows, Linux perlu meniru semua panggilan API yang dibuat aplikasi. Itu banyak pekerjaan. Wine melakukannya sampai batas tertentu, tetapi sangat sulit, terutama karena pembuat Windows tidak mau bekerja sama. Anda dapat membandingkannya dengan, misalnya, belajar bahasa Inggris ketika bahasa ibu Anda adalah bahasa Cina: format yang dapat dieksekusi adalah alfabet (tidak terlalu sulit untuk dikuasai), API adalah kosakata (butuh bertahun-tahun untuk mencapai tingkat di mana Anda dapat mulai membaca literatur ).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
9
"Kosakata" adalah analogi yang sangat baik.
Dijeda sampai pemberitahuan lebih lanjut.
Saya pikir maksud Anda sangat berbeda .
Mircea Chirea
Android juga mendukung Linux bnaries (bukan paket) jika mereka dikompilasi untuk ARM karena berbasiskan Linux
Suici Doga
@SuiciDoga Agak, tapi lebih rumit dari itu. Kernel Android dapat menjalankan binari Linux (jika mereka dikompilasi untuk kernel ABI yang tepat, misalnya menggunakan register NEON), tetapi jika Anda ingin menjalankan program yang terhubung secara dinamis, Anda harus menginstal semua perpustakaan juga. (Dan jika Anda melakukannya, Anda dapat menginstal manajer paket juga, jadi "binari tetapi bukan paket" tidak benar-benar benar.)
Gilles 'SO-stop evil'
Ya, saya tahu bahwa Anda harus mengubah jalur perpustakaan, dll.
Suici Doga
14

Binari Windows memiliki ABI yang berbeda dan menggunakan API yang berbeda dari binari Linux.

Binari Linux tidak memerlukan ekstensi karena * nix menggunakan bit izin untuk mengidentifikasi yang bisa dieksekusi daripada ekstensi.

Ignacio Vazquez-Abrams
sumber
1
Setuju dengan jawaban ... sepotong data tambahan yang mungkin relevan: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans
Ah ya, perlu loader yang berbeda juga. en.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams
Saya terutama menyukai informasi kedua yang hilang dari jawaban oleh @Gilles.
Timothy Gu
@ IgnacioVazquez-Abrams Itu sangat menarik. Bagaimana jika saya katakan bahwa saya baru saja menjalankan windows game PlantsVsZombies.exe di Ubuntu 16.04 Linux? Saya hanya melakukannya karena bosan mengetahui bahwa itu tidak akan diluncurkan, tetapi itu berhasil dan saya bisa memainkannya dengan sangat baik. Rasanya mustahil, karena permainan itu membutuhkan api uap untuk berjalan lebih dulu dan jelas tidak. Bagaimana peluncurannya ??? Haruskah saya membuat pertanyaan baru untuk itu?
Nikos
@ RestlessC0bra: Anggur dan Mono adalah barang.
Ignacio Vazquez-Abrams
0

Ini adalah bagaimana saya mendengar sisi windows dijelaskan dalam istilah awam dari programmer.

Di Windows ada kait dalam program dan OS yang membuat panggilan untuk yang hanya ada di Linux. Karena perbedaan di kedua lingkungan. Awalnya Linux mencari izin, Windows mencari format yang dapat ditautkan terlebih dahulu dengan memeriksa ekstensi, melihat properti kemudian mencari di dalam file Exe dll.

Ada aplikasi seperti Netbackup yang dimulai di linux dan telah dimodifikasi untuk berjalan di lingkungan windows tanpa menggunakan wine IMHO, sering kali itu adalah beberapa aplikasi Windows berperilaku paling stabil.

Saat Aplikasi Windows. menjadi susah diatur biasanya itu karena beberapa kait yang dipegang oleh aplikasi tidak sepenuhnya dirilis dan windows mengira mereka (Memory Leaks). Ketika Windows memberikan ruang memori yang tidak dirilis ke aplikasi lain Crash and burn.

Tagihan
sumber
2
Entah bagaimana saya ingin percaya bahwa Bill Gates menjawab pertanyaan saya ;-)
Nav