Цветочные новости: разработчики ОС Fuchsia добавят поддержку запуска немодифицированных Linux-программ
Несмотря на то, что новостей про ОС Fuchsia немного, проект продолжает развиваться, и очень активно. Доказательство — сообщение от разработчиков о своих планах реализовать механизм для запуска немодифицированных программ, которые собраны для Linux.
Основывается этот механизм на специальной «прослойке», которая получила название starnix. Именно она обеспечивает совместимость с ABI Linux.
Системные интерфейсы ядра Linux реализуются в обработчике, который запускается в виде процесса для операционной системы Fuchsia. Процесс работает в пространстве пользователя, транслируя запросы Linux-программ в обращения к соответствующим подсистемам ОС. При разработке этого проекта многие подсистемы придется модифицировать, чтобы пользователям были доступны все необходимые системные интерфейсы.
Архитектура «прослойки», по словам разработчиков, сильно напоминает аналогичную подсистему для Windows, которая называется Windows Subsystem for Linux. Она тоже используется для трансляции системных вызовов Linux в системные вызовы Windows.
Код прослойки будет написан на Rust для того, чтобы снизить проблемы с уязвимостями. Разработчики считают, что этот язык программирования поможет снизить до минимума опасность появления уязвимостей, которые могут эксплуатироваться для поднятия привилегий Linux-процесса до самого процесса starnix. Для этого будут также использоваться штатные механизмы защиты Fuchsia.
Пример: при обращении к файловой системе, сетевому стеку или графической подсистеме starnix будет транслировать запросы, преобразуя Linux ABI в Fuchsia System ABI. Это, в свою очередь, позволит использовать те же ограничения, которые используются для обычных процессов в Fuchsia. Также будут использоваться и стандартные для Linux механизмы контроля полномочий.
Стоит отметить, что возможность запуска приложений Linux под Fuchsia разработчики ОС развивали и ранее. Но они использовали реализацию, которая похожа на то, что применяется в Chrome OS. В целом, понять их можно, ведь Fuchsia является своеобразным pet-проектом Google. Ранее для совместимости с Linux предлагалось использовать библиотеку Machina, запускающую Linux-софт в специальной виртуальной машине, которая формируется посредством гипервизора на базе ядра Zircon и спецификаций VirtIO.
Насколько можно судить, виртуализация будет использоваться в Fuchsia параллельно, поскольку реализовать системный интерфейс Linux не так-то и просто. Скорее всего виртуализация будет использоваться вместе с «прослойкой». В этом случае ядро Linux будет работать в отдельной виртуальной машине, что неплохо, но требует ресурсов. Именно по причине ресурсоемкости команда Microsoft, которая занималась Windows Subsystem for Linux, отказалась от транслятора и использовала родное ядро Linux в WSL 2.
К слову, разработчики Fuchsia тоже не зря свой хлеб едят — в ОС уже предоставляется уровень совместимости POSIX Lite, работающий поверх Fuchsia System ABI. Все это позволяет обеспечить запуск ряда Linux-программ, но при этом нужно перекомпилировать приложения или даже модифицировать исходные тексты. Одна из проблем POSIX Lite — неполная реализация всех возможностей POSIX.
Главная проблема здесь — отсутствие поддержки вызовов для изменения глобального состояния процессов, включая kill. Соответственно, если есть расхождение с концепциями обеспечения безопасности в Fuchsia, то изменение глобального состояния запрещается. Тем не менее, использование lite-версии POSIX оправдывает себя, если требуется портировать приложения с открытым исходным кодом. Правда, возникает проблема с запуском программ, у которых нет доступа к коду.
Что касается Fuchsia, то это универсальная ОС: где именно она будет использоваться, пока неизвестно. Тем не менее, она совместима практически с любыми типами устройств, включая рабочие станции, смартфоны, IoT-устройства и потребительскую технику. Разработка ведется с учетом опыта создания Android-платформы и недостатков в области масштабирования и обеспечения безопасности.
Основа новой операционной системы — микроядро Zircon, которое, в свою очередь, базируется на наработках проекта LK.
Проект относительно активно развивался несколько лет, причем в сети публиковались предположения о том, что Google разрабатывает ее в качестве альтернативы Android. Все это время ОС продолжала развиваться. Например, в 2017 году сообщалось, что ОС получила новый пользовательский интерфейс, возможности командной строки и еще несколько возможностей. В 2018 году Google выложила новую версию своей ОС, которую уже можно было протестировать.
У 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 соответственно.
Для защиты системы применяется «песочница», которая не дает доступ новым процессам к объектам ядра, кроме того, под них не выделяется память и не запускается код. Обеспечением доступа к ресурсам занимается система пространств имен, определяющая доступные полномочия. В «песочнице» используется фреймворк, обеспечивающий создание специализированных компонентов, способных взаимодействовать с другими компонентами через IPC.