Несколько способов обеспечить переносимость бинарных данных между разными архитектурами:
- Эмуляция целевой аппаратной платформы. dsilakov.ru Может быть реализована в аппаратуре, в операционной системе или в виде независимого приложения. dsilakov.ru Например, динамический транслятор Rosetta используется в MacOS X для выполнения программ, предназначенных для машин с процессорами PowerPC. dsilakov.ru citforum.ru
- Использование эмуляторов и слоёв совместимости. dsilakov.ru Такие инструменты не предоставляют полный набор функциональности эмулируемой платформы, но в случаях, когда они покрывают все потребности приложения, их можно использовать для обеспечения переносимости. dsilakov.ru Примеры: wine — слой совместимости с WinAPI для Linux, MacOS, Solaris, FreeBSD и других систем, cygwin — слой совместимости с Linux для семейства ОС Microsoft Windows. dsilakov.ru
- Стандартизация бинарных интерфейсов. dsilakov.ru Этот подход не является широко распространённым, но, например, существует стандарт базового бинарного интерфейса различных дистрибутивов ОС Linux: Linux Standard Base. dsilakov.ru
- Виртуализация. dsilakov.ru Позволяет запустить копию одной ОС внутри другой ОС, и, таким образом, любое приложение, предназначенное для первой ОС, может работать внутри второй ОС. dsilakov.ru Но этот способ достаточно накладен в смысле производительности, а также требует наличия лицензий на обе ОС. dsilakov.ru
- Использование перенацеливаемого компилятора. cyberleninka.ru Компилятор, организация исходного кода которого ориентирована на адаптацию с целью поддержки новых платформ. cyberleninka.ru
В большинстве случаев совместимость на бинарном уровне выполняется в рамках систем одного производителя, и лишь немногие системы способны загружать исполняемые файлы, предназначенные для выполнения на платформах других поставщиков. citforum.ru