Чтобы сделать что-то осмысленное, приложения должны будут взаимодействовать с ОС. Поскольку системные вызовы и инфраструктура пространства пользователя выглядят в корне разными в Windows и Unix / Linux, наличие разных форматов для исполняемых программ - это наименьшая проблема. Это логика программы , которую необходимо изменить.
(Вы можете утверждать, что это бессмысленно, если у вас есть программа, которая зависит исключительно от стандартизированных компонентов, например библиотеки времени выполнения C. Это теоретически верно, но не имеет значения для большинства приложений, поскольку они вынуждены использовать зависящие от ОС вещи ).
Другие различия между файлами Windows PE (EXE, DLL, ..) и двоичными файлами Linux ELF связаны с различными загрузчиками образов и некоторыми конструктивными характеристиками обеих ОС. Например, в Linux для импорта внешних библиотек используется отдельная программа, в то время как эта функция встроена в Windows. Другой пример: общие библиотеки Linux работают иначе, чем библиотеки DLL в Windows. Не говоря уже о том, что оба формата оптимизированы для того, чтобы ядра соответствующих ОС могли загружать программы как можно быстрее.
Эмуляторы, такие как Wine, пытаются заполнить пробел ( и фактически доказывают, что самая большая проблема не в двоичном формате, а в интерфейсе ОС! ).