В ОС Fuchsia намерены реализовать поддержку запуска немодифицированных Linux-программ
12 февраля 2021 года
Разработчики из компании 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 подготовлен собственный графический интерфейс (Архивная копия от 30 октября 2019 на Wayback Machine), написанный на языке Dart с использованием фреймворка Flutter. Проектом также развиваются фреймворк для построения интерфейсов пользователя Peridot, пакетный менеджер Fargo, стандартная библиотека libc, система рендеринга Escher, Vulkan-драйвер Magma (Архивная копия от 30 октября 2019 на Wayback Machine), композитный менеджер Scenic(недоступная ссылка), файловые системы MinFS, MemFS, ThinFS (FAT на языке Go) и Blobfs, а также менеджер разделов FVM. Для разработки приложений предоставляется (Архивная копия от 23 мая 2020 на Wayback Machine) поддержка языков C/C++, Dart, в системных компонентах также допускается использование Rust, в сетевом стеке Go, а в системе сборки языка Python.
В процессе загрузки используется (Архивная копия от 19 января 2021 на Wayback Machine) системный менеджер, включающий appmgr для создания начального программного окружения, sysmgr для формирования загрузочного окружения и basemgr для настройки пользовательского окружения и организации входа в систему. Для обеспечения безопасности предлагается продвинутая система sandbox-изоляции(недоступная ссылка), в которой новые процессы не имеют доступа к объектам ядра, не могут выделять память и не могут запускать код, а для доступа к ресурсам применяется система пространств имён(недоступная ссылка), определяющая доступные полномочия. Платформа предоставляет фреймворк для создания компонентов, представляющих собой программы, запускаемые в своём sandbox, которые могут взаимодействовать с другими компонентами через IPC.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.