Собственные программы несовместимы, потому что Windows имеет совершенно другой набор API, чем Linux, например. Как уже упоминали другие, каждая платформа также использует свой исполняемый формат. Кроме того, обе платформы имеют свой собственный набор библиотек, с которыми программы будут связаны и / или совместно использовать. Например, программа для Windows, как правило, разрабатывается в Visual Studio с использованием библиотек, специфичных для Windows, таких как MFC
, Win32
API и т. Д. Эти библиотеки недоступны в Linux, поэтому программа даже не будет компилироваться, если не принять меры чтобы убедиться, что используются кроссплатформенные библиотеки (такие как QT).
Однако, если вы будете осторожны, вы можете использовать кроссплатформенные библиотеки в своем коде и получить одну и ту же программу для компиляции на обеих платформах. Для такой программы вам нужно аккуратно помещать любые специфичные для платформы сведения (расположение файловой системы и т. Д.) В свои собственные файлы. Затем вам нужно будет настроить правильные операторы * / 1005 * и / или директивы make-файла, чтобы обеспечить включение соответствующих файлов в сборку для каждой платформы.
Конечно, если вы используете "кроссплатформенный" язык, такой как Java или Python, и не используете какой-либо платформо-зависимый код в своей реализации, тогда ваша программа может работать в обеих средах.
Примечание Хотя форматы исполняемых файлов различны, некоторые программы, разработанные в Windows, могут выполняться под Linux с использованием эмулятора, называемого WINE .