Я не спрашиваю о том, как заставить Windows exe работать в Linux.
Я спрашиваю, ПОЧЕМУ это не работает.
Чем отличается способ запуска исполняемого файла в Windows и запуска исполняемого файла в Linux? Почему они должны быть разными? Кроме того, почему исполняемые файлы Linux не имеют расширения файла?
Ответы:
Исполняемые файлы Linux и Windows используют разные форматы. Linux использует формат ELF на большинстве архитектур, в то время как Windows использует формат PE . ELF лучше подходит для того, как Linux управляет общими библиотеками, а PE лучше подходит для того, как Windows управляет общими библиотеками, но нет фундаментальной причины, по которой Linux не может выполнять исполняемые файлы PE или исполняемые файлы Windows ELF. Фактически, Linux может выполнять PE-исполняемые файлы через Wine .
Сложность состоит в том, что Windows и Linux имеют совершенно разные API : у них разные интерфейсы ядра и наборы библиотек. Таким образом, чтобы фактически запустить приложение Windows, Linux должен был эмулировать все вызовы API, которые делает приложение. Это много работы. Wine делает это в некоторой степени, но это очень сложно, тем более что производитель Windows не сотрудничает. Вы можете сравнить его, скажем, с изучением английского языка, когда ваш родной язык - китайский: исполняемый формат - алфавит (его не так сложно освоить), API - это словарь (требуются годы, чтобы достичь уровня, на котором вы можете начать читать литературу ).
источник
Двоичные файлы Windows имеют другой ABI и используют другой API, чем двоичные файлы Linux.
Двоичные файлы Linux не нуждаются в расширении, поскольку * nix использует биты разрешения для идентификации исполняемого файла вместо расширения.
источник
Вот как я слышал, что сторона окон объясняла программистам в терминах непрофессионалов.
В Windows есть хуки в программах и ОС, которые Exe делает вызовы, которых просто нет в Linux. Из-за различий в обеих средах. Первоначально Linux ищет разрешения, Windows сначала ищет связываемый формат, проверяя расширение, просматривая свойства, затем заглядывая в файл Exe и т. Д.
Существуют такие приложения, как Netbackup, которые были запущены в linux и были модифицированы для работы в среде Windows без использования Wine IMHO, часто это одни из самых стабильных приложений Windows с лучшим поведением.
Когда Windows Apps. обычно это становится неуправляемым, потому что некоторые из этих хуков, удерживаемых приложением, не были полностью освобождены, и Windows думает, что они были (утечки памяти). Когда Windows передает это невыпущенное пространство памяти другому приложению, происходит сбой и запись.
источник