Чому Windows не працює на Linux?


29

Я не запитую про те, як змусити Windows працювати в Linux.

Я запитую, ЧОМУ це не працює.

Що відрізняється від того, як Windows запускає виконуваний файл, а Linux працює виконуваним файлом? Чому вони повинні були бути різними? Крім того, чому у виконуваних файлів Linux немає розширення файлу?


Відповіді:


45

Виконавчі файли Linux та Windows використовують різні формати. Linux використовує формат ELF у більшості архітектур, тоді як Windows використовує формат PE . ELF краще підходить до того, як Linux управляє спільними бібліотеками, а PE краще підходить до того, як Windows управляє спільними бібліотеками, але немає жодної принципової причини, чому Linux не міг би виконувати виконуючі файли PE або виконувані файли Windows ELF. Насправді Linux може виконувати виконуючі PE через Wine .

Складність полягає в тому, що Windows і Linux мають абсолютно різні API : вони мають різні інтерфейси ядра та набори бібліотек. Отже, щоб насправді запустити додаток Windows, Linux повинен був би імітувати всі виклики API, які робить програма. Це багато роботи. Вино робить це певною мірою, але це дуже важко, тим більше, що виробник Windows не співпрацює. Ви можете порівняти це, скажімо, з вивченням англійської мови, коли ваша рідна мова є китайською: формат, який виконується, - це алфавіт (не так важко освоїти), API - словниковий запас (потрібні роки, щоб досягти рівня, коли ви можете почати читати літературу ).


9
"Лексика" - відмінна аналогія.
Призупинено до подальшого повідомлення.

Я думаю, ви мали на увазі зовсім інше .
Mircea Chirea

Android також підтримує Linux bnaries (не пакети), якщо вони складені для ARM, оскільки він базується на Linux
Suici Doga

@SuiciDoga Сорт, але це складніше за це. Ядро Android може запускати бінарні файли Linux (якщо вони скомпільовані для правильного ядра ABI, наприклад, wrt використання реєстрів NEON), але якщо ви хочете запускати динамічно пов'язані програми, вам також потрібно встановити всі бібліотеки. (І якщо ви зробите це, ви могли б встановити і менеджера пакунків, тому "бінарні файли, але не пакет" насправді не відповідають дійсності.)
Жил "ТАК - перестань бути злим"

Так, я знаю про те, що вам потрібно змінити шлях до бібліотеки тощо
Suici Doga,

14

Бінарні файли Windows мають інший ABI і використовують інший API, ніж бінарні файли Linux.

Бінарні файли Linux не потребують розширення, оскільки * nix використовує біти дозволу для ідентифікації виконуваного файлу замість розширення.


1
Погодьтеся з відповіддю ... додатковий фрагмент даних, який може бути актуальним: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans

Ага так, він також потребує іншого навантажувача. en.wikipedia.org/wiki/Loader_%28computing%29
Ігнасіо Васкес-Абрамс

Особливо мені подобається, що другий фрагмент інформації, відсутній у відповіді від @Gilles.
Тимофій Гу

@ IgnacioVazquez-Abrams Це дуже цікаво. Що робити, якщо я сказав вам, що я просто запускаю гру Windows PlantsVsZombies.exe на Ubuntu 16.04 Linux? Я просто зробив це з нудьги, знаючи, що він не запуститься, але це зробило, і я міг би зіграти на ньому чудово. Це як неможливо, тому що для цієї гри потрібен перший паровий апарат, і він явно не став. Як він запустився ??? Чи варто мені поставити нове запитання для цього?
Нікос

@ RestlessC0bra: Вино і Моно - це речі.
Ігнасіо Васкес-Абрамс

0

Ось так я почув, як сторона Windows пояснюється у програмі програмістами з промовою.

У Windows є гачки в програмах та ОС, які Exe здійснюють дзвінки до цього просто не в Linux. Через відмінності в обох середовищах. Спочатку Linux шукає дозволи, Windows шукає спочатку зв'язаний формат, вивчаючи розширення, розглядаючи властивості, потім заглядаючи у файл Exe тощо.

Є такі програми, як Netbackup, які запускалися в Linux і були модифіковані для роботи в середовищі Windows, використовуючи вино IMHO, найчастіше це одні з найбільш стабільних найкращих програм, що ведуть себе в Windows.

Коли програми Windows. зазвичай стають недоброзичливими це тому, що деякі з цих гаків, які утримує додаток, не були повністю випущені, і Windows вважає, що вони були (Пам'ять витоків). Коли Windows передає цей невивільнений простір пам'яті, випадає в іншу програму Збій і запиши.


2
Я хотів би повірити, що Білл Гейтс відповів на моє питання ;-)
Nav
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.