#windows #ос #macos #linux
Возник спор, решил спросить у аудитории (:
В общем, чисто теоретически возможно ли создание ОС, у которой исполняемыми файлами
будут являться .exe .deb и т.п. и они будут корректно интерпретированы и подобающе
работоспособными?
Получается что-то наподобие "Кроссплатформенной ОС", оксюморон прям (:
Ответы
Ответ 1
Существует же wine и разные его дериваты, которые худо-бедно позволяют на никсах
запускать виндовские приложения. Что-то подобное есть и для маков. И на виндах есть
способы запускать линуксовые приложения. Так что не только теоретически, но и практически
уже нечто подобное существует, хотя и очень далекое от совершенства.
ADDENDA: deb - это не исполняемый файл, а установочный пакет Linux Debian и его производных
(например, Ubuntu).
Ответ 2
Конечно возможно. Но на пути будет множество сложностей и придётся проделать очень
много лишней работы. Это было бы очень неэффективно с точки зрения ресурсов разработчиков.
Создание действительно полноценной ОС требует довольно больших ресурсов и много времени,
тестирования и т.п. Сделать две ОС в одной потребует ещё больше усилий и терпения.
Но теоретически всё это возможно. Ничто не мешает реализовать разные системные API
одновременно, поддерживать несколько моделей организации файлов, разных абстракций,
реализовать иксы и т.п. На уровне ядра придётся также реализовать сразу два вида API
чтобы драйвера в ядре могли работать и не мешать друг другу. С другой стороны есть
вероятность, что всё же будут ограничения на уровне ядра, связанные с разной архитектурой.
Однако на прикладном уровне думаю это возможно, более чем. Такие вещи как wine доказывают,
что это возможно. Только очень уж мучительно будет.
Ответ 3
Наверное, да.
Т.е. подсистемы типа wine, cygwin, interix существуют, подкрутить загрузчик (+ подключение
соответствующих разделяемых библиотек) тоже можно, хотя, на практике геморроя будет много.
Интереснее другое продолжение темы. Кроссплатформенный standalown модуль (естественно
я имею в виду машинные коды и следовательно речь идет об одной и той же процессорной
архитектуре).
Возможно к такой штуке нужен будет миниустановщик (меняющий magic и если потребуется
формат файла для загрузчика ОС) в зависимости от ОС. Идея состоит в том, что функция
в точке входа определяет (сама, на лету) текущее окружение и "подстраивается" к нему.
Очевидно, что система разработки (компоновщик и библиотеки) должна "обладать знаниями"
о возможных целевых ОС.
IMHO идея интересная, но дальше теоретических размышлений сам не двигался. На практике
же широко используются интерпретаторы типа python, perl ...