В целом, будут ли двоичные файлы, созданные на FreeBSD, работать в операционных системах Linux, особенно в Ubuntu?
2 ответа
Теоретически, вы можете иметь исполняемые файлы операционной системы, созданные для других операционных систем. На практике это требует работы, и это не случается много, потому что люди не хотят делать работу за это.
Есть несколько вещей, которые могут помешать:
- Разные фишки
- Разные системные вызовы
- Разные библиотечные звонки
- Файлы / пути разные.
Итак, допустим, вы хотите запустить двоичный файл Intel FreeBSD на компьютере с Intel Linux. Чип будет такой же, эмуляция не нужна. Но интерфейс системного вызова отличается. Кто-то должен был бы написать код для ядра Linux, чтобы понять, что когда вы запускаете бинарный файл FreeBSD, используйте другую таблицу системных вызовов. Это стало немного проще, так как они оба UNIX, большая часть кода может быть одинаковой.
Но тогда вам понадобятся библиотеки. Теоретически они могут быть скопированы из дистрибутива FreeBSD, и динамический загрузчик узнает это специальное место для библиотек FreeBSD. Если бы были какие-либо пути к файлам конфигурации или жестко закодированные пути вывода, это также необходимо учитывать.
Так что это выполнимо, но это требует работы. Много работы. Таким образом, работа обычно выполняется только для непопулярной (или слишком новой) ОС для запуска двоичных файлов для более популярной или устоявшейся ОС.
Первоначально Microsoft NT могла запускать приложения командной строки OS/2 и обладала некоторой теоретической (наполовину оцененной) способностью запускать приложения POSIX. Эта возможность была отброшена, так как OS/2 стала неактуальной, и людям нравилась NT для NT, а не что-либо, что могло бы работать с POSIX. Я недостаточно квалифицирован, чтобы сказать, считается ли Windows 7, работающая под Windows 95, приложениями из другой ОС, или просто запускает какой-то древний код, объединенный с Win7.
Mac OSX может запускать двоичные файлы MacOS 7/8, если они написаны для чего-то, называемого Carbon (набор библиотек совместимости). Это помогло в переходе на MacOSX. Им также требовалась эмуляция для чипа PowerPC.
Поскольку Linux является более распространенным явлением, чем FreeBSD, многим людям не нужно эмулировать FreeBSD в Linux. Редко приложение для FreeBSD будет недоступно в Linux. Так что никто не сделал эту работу. Но есть возможность для FreeBSD запускать двоичные файлы Linux. Поскольку Linux является движущейся целью, эмуляция должна быть обновлена, когда ядро Linux сильно меняется, или ему нужны новые библиотеки.
Вы не можете запускать двоичные файлы, созданные для FreeBSD в Linux (см. Этот вопрос). В основном это разные операционные системы, использующие лишь небольшое подмножество API (совместимость с POSIX).
Однако, если у вас есть исходный код, вы можете создавать двоичные файлы для Linux на FreeBSD; термин "кросс-компиляция". Например, программы для Windows часто компилируются в системе Linux.