Разработчики Google выпущен несколько дней назад план реализации механизма для запуска немодифицированных программ, скомпилированных для Linux на операционная система Фуксия.
Чтобы запускать программы Linux в пользовательском пространстве, планируется предоставить слой "starnix" для поддержки Linux ABI.. На развитом уровне системные интерфейсы ядра Linux реализованы в драйвере, который запускается как процесс для операционной системы Fuchsia, который работает в пространстве пользователя и преобразует запросы программ Linux в вызовы соответствующих подсистем Fuchsia.
Замечено, чтоe во время разработки проекта многие подсистемы Fuchsia придется модифицировать. для реализации всех системных интерфейсов, доступных в Linux. Архитектура starnix во многом такая же, как у подсистемы Windows для Linux, которая использует Windows для преобразования системных вызовов Linux в системные вызовы Windows.
Планируется реализовать код starnix в Rust для минимизации возможных векторов уязвимостей.s, которые потенциально могут быть использованы для повышения привилегий процесса Linux до процесса starnix.
Для обеспечения безопасности в Starnix по возможности будут использоваться стандартные механизмы защиты Fuchsia.
Например, при доступе к системным службам, таким как файловая система, сетевой стек или графическая подсистема, starnix будет только транслировать запросы, конвертируя Linux ABI в ABI системы Fuchsia, допуская те же ограничения, что и для общих процессов Fuchsia.
Это также реализует специфичные для Linux механизмы авторизации, например, определение ситуаций, в которых один процесс Linux имеет право завершить другой.
Разработчики Fuchsia разработали поддержку для запуска приложений Linux в прошлом, но они экспериментировали с реализацией, которая работает по аналогии с тем, как запуск приложений Linux организован в Chrome OS.
Для совместимости с Linux Fuchsia предложила библиотеку Machina., что позволило программам Linux запускаться на специальной изолированной виртуальной машине, сформированной с использованием гипервизора на основе ядра Zircon и спецификаций Virtio.
Не исключено использование виртуализации, поскольку полная реализация интерфейса системы Linux - нетривиальная задача.
Помимо мыса Старникса, можно создать механизм для запуска исполняемых файлов Linux с использованием ядра Linux, работающего на отдельной виртуальной машине. Этот метод считается самым простым в реализации, но при этом наиболее ресурсоемким.
В какой-то момент Microsoft начала разрабатывать свой уровень совместимости с Linux с помощью переводчика, но в конечном итоге перешла на использование собственного ядра Linux в подсистеме Windows для Linux 2.
Кроме того, Fuchsia уже предоставляет уровень совместимости с POSIX Lite который работает поверх Fuchsia System ABI. POSIX Lite позволяет запускать некоторые программы Linux, но требует перекомпиляции кода приложения и, в некоторых случаях, изменения исходного кода.
Одна из проблем с POSIX Lite это неполная реализация всех функций POSIX, включая вызовы для изменения глобального состояния процессов (например, функцию уничтожения), которые противоречат концепциям безопасности в Fuchsia, запрещающим изменение глобального состояния процессов. Выражать.
Использование POSIX Lite оправдано при портировании открытых приложений.s, но не решает проблем с запуском программ, для которых нет доступа к коду (например, невозможно добиться совместимости с Android-приложениями, содержащими скомпилированные нативные вставки).
Напомним, что в рамках проекта Fuchsia Google разрабатывает универсальную операционную систему, способную работать на любых типах устройств, от рабочих станций и смартфонов до встроенных и бытовых технологий. Разработка основана на опыте создания платформы Android и учитывает недостатки в области масштабирования и безопасности.
Система основана на микроядре Zircon, основанном на разработках проекта LK, расширенном для использования в различных классах устройств, включая смартфоны и персональные компьютеры.
источник: https://fuchsia.googlesource.com