В ОС Fuchsia намерены реализовать поддержку запуска немодифицированных Linux-программ

Разработчики из компании Google опубликовали план реализации в операционной системе Fuchsia механизма для запуска немодифицированных программ, собранных для Linux. Для выполнения Linux-программ в пространстве пользователя планируется предоставить прослойку “starnix”, обеспечивающую совместимость с ABI Linux.

В развиваемой прослойке системные интерфейсы ядра Linux реализуются в обработчике, запускаемом в виде процесса для ОС Fuchsia, работающего в пространстве пользователя и транслирующего запросы Linux-программ в обращения к соответствующим подсистемам Fuchsia. Отмечается, что при разработке проекта многие подсистемы Fuchsia придётся доработать для реализации всех доступных в Linux системных интерфейсов. Архитектура starnix во многом повторяет подсистму Windows Subsystem for Linux, применяемую в Windows для трансляции системных вызовов Linux в системные вызовы Windows.

Код starnix планируется реализовать на языке Rust для минимизации возможных векторов для возникновения уязвимостей, которые потенциально могут использоваться для поднятия привилегий Linux-процесса до процесса starnix. Для обеспечения безопасности в starnix по возможности будут задействованы штатные механизмы защиты Fuchsia. Например, при обращении к системным сервисам, таким как файловая система, сетевой стек или графическая подсистема, starnix будет лишь транслировать запросы, преобразуя Linux ABI в Fuchsia
System ABI, что позволит использовать те же ограничения, которые применяются для обычных процессов Fuchsia. При этом будут реализованы и специфичные для Linux-процессов механизмы контроля полномочий, например, определяющие в каких ситуациях один Linux-процесс имеет право завершить другой.

Поддержку запуска приложений Linux разработчики Fuchsia развивали и ранее, но экспериментировали с реализацией, работающей по аналогии с тем, как организован запуск Linux-приложений в Chrome OS. Для совместимости с Linux в Fuchsia предлагалась библиотека Machina, которая позволяла запускать Linux-программы в специальной изолированной виртуальной машине, формируемой при помощи гипервизора на базе ядра Zircon и спецификаций Virtio.

Подобные метод не сбрасывается со счетов, так как полная реализация системного интерфейса Linux является нетривиальной задачей. В дополнение к прослойке starnix не исключается создание механизма для запуска исполняемых файлов Linux с использованием ядра Linux, работающего в отдельной виртуальной машине. Данные способ отмечается как самый простой в реализации, но и наиболее ресурсоёмкий. В своё время компания Microsoft, начала развитие своей прослойки совместимости с Linux с транслятора, но в конечном счёте перешла на использование родного ядра Linux в Windows Subsystem for Linux 2.

Кроме того, в Fuchsia предоставляется уровень совместимости POSIX Lite, работающий поверх Fuchsia System ABI. POSIX Lite позволяет обеспечить запуск некоторых Linux-программ, но требует перекомпиляции кода приложения, а в ряде случаев и модификации исходных текстов. Одной из проблем POSIX Lite является неполная реализация всех возможностей POSIX, например, не поддерживаются вызовы для изменения глобального состояния процессов (например, функция kill), которые расходятся с концепциями обеспечения безопасности в Fuchsia, запрещающими изменение глобального состояния. Применение POSIX Lite оправдывает себя в процессе портирования открытых приложений, но не решает проблемы с запуском программ, для которых отсутствует доступ к коду (например, невозможно добиться совместимости с Android-приложениями, содержащими скомпилированные нативные вставки).

Напомним, что в рамках проекта Fuchsia компанией Google развивается универсальная операционная система, способная работать на любых типах устройств, от рабочих станций и смартфонов до встраиваемой и потребительской техники. Разработка ведётся с учётом опыта создания платформы Android и учитывает недостатки в области масштабирования и обеспечения безопасности.

Система базируется на микроядре Zircon, основанном на наработках проекта LK, расширенного для применения на различных классах устройств, включая смартфоны и персональные компьютеры. Zircon расширяет LK поддержкой процессов и разделяемых библиотек, уровнем пользователя, системой обработки объектов и моделью обеспечения безопасности на основе capability. Драйверы реализуются в виде работающих в пространстве пользователя динамических библиотек, загружаемых процессом devhost и управляемых менеджером устройств (devmg, Device Manager).

Для Fuchsia подготовлен собственный графический интерфейс, написанный на языке Dart с использованием фреймворка Flutter. Проектом также развиваются фреймворк для построения интерфейсов пользователя Peridot, пакетный менеджер Fargo, стандартная библиотека libc, система рендеринга Escher, Vulkan-драйвер Magma, композитный менеджер Scenic, файловые системы MinFS, MemFS, ThinFS (FAT на языке Go) и Blobfs, а также менеджер разделов FVM. Для разработки приложений предоставляется поддержка языков C/C++, Dart, в системных компонентах также допускается использование Rust, в сетевом стеке Go, а в системе сборки языка Python.


В процессе загрузки используется системный менеджер, включающий
appmgr для создания начального программного окружения, sysmgr для формирования загрузочного окружения и basemgr для настройки пользовательского окружения и организации входа в систему. Для обеспечения безопасности предлагается продвинутая система sandbox-изоляции, в которой новые процессы не имеют доступа к объектам ядра, не могут выделять память и не могут запускать код, а для доступа к ресурсам применяется система пространств имён, определяющая доступные полномочия. Платформа предоставляет фреймворк для создания компонентов, представляющих собой программы, запускаемые в своём sandbox, которые могут взаимодействовать с другими компонентами через IPC.

Release. Ссылка here.