2016-01-20 10 views
1

Возможно ли теоретически выполнить построение для одного ядра POSIX (например, Linux) на втором (например, в XNU Дарвина)
И почему это невозможно?Запустить Linux exectuable на другом ядре POSIX

Если это из-за библиотек и/или общих объектов, возможно, можно оставить только ядро ​​и его зависимости от всей второй ОС и использовать все остальное с первого раза?

Итак, у вас будет только ядро ​​и драйверы из второй ОС, и вы можете chroot в какое-то место, и вы сможете запустить любой исполняемый файл для первого?

Или Можем ли мы сделать какую-либо динамическую оболочку или статический переводчик?

UPD: Хорошо, я нашел something similar, но есть только беглые рекомендации, может быть, кто-то может сделать это более понятным?

+0

xBinary может быть решением, но он устарел и не работает на современной OSX – stek29

+0

. Интересная часть состоит в том, что внутренняя часть ядра darwins должна иметь оболочку системного вызова внутри, что делает это проще, но я сомневаюсь, что он все еще работает так, как должен. Кроме того, у freebsd есть поддержка бинарных файлов Linux до определенной степени. https://www.freebsd.org/doc/handbook/linuxemu.html – Alex

ответ

4

Есть только так много деталей, которые должны быть правильными для запуска программ. Библиотеки и общие объекты являются первой проблемой, но даже если вы их замените, интерфейс системного вызова отличается от ОС к ОС.

И с помощью интерфейса системного вызова я не имею в виду прототипы функций, я имею в виду, как задачи пользовательского пространства вызывают системные вызовы в ядре. Даже на x86 существуют различные способы реализации ловушки, которая переходит в режим ядра, и различные способы передачи данных аргумента системного вызова в ядро. Детали этого обычно встроены в библиотеки/общие объекты.

Итак, теоретически возможно создать слой обертывания/перевода, но это очень много работы, и очень сложно получить все подробные сведения. Это одна из причин, почему виртуализация стала настолько популярной в последние годы.

0

Я посчастливилось иметь BlogPost на тему: http://codingtragedy.blogspot.com/2015/04/why-binaries-from-one-os-dont-work-on.html

В короткой 1. двоичном формате 2. Системные вызовы 3. во время выполнения в пользовательском пространстве, все из которых могут быть предусмотрены в принципе. Примеры в реальном мире включают в себя BSD и Illumos, в которых используются исполняемые файлы Linux.

+1

Ответы только на ссылку не в порядке при переполнении стека. Пожалуйста, предоставьте основную информацию от вашего блога прямо в ответе. (Таким образом, ссылка может быть использована для получения дополнительной информации). – Tsyvarev

+0

Там, я надеюсь, это достаточно хорошо. –

 Смежные вопросы

  • Нет связанных вопросов^_^