Компанія Google опублікувала план реалізації механізму запуску програм Linux в ОС Фуксії
Компанія Google опублікувала план реалізації в операційній системі Фуксії механізму запуску немодифікованих програм, побудованих для Linux. Для запуску програм Linux в призначеному для користувача просторі планується передбачити шар "starnix", що забезпечує сумісність з Linux ABI.
У розробленому шарі системні інтерфейси ядра Linux реалізовані в хендлері, який запускається як процес для ОС Фуксії, що працює в призначеному для користувача просторі і переводить запити з програм Linux в дзвінки на відповідні підсистеми Фуксії. Відзначається, що при розробці проекту багато підсистем Фуксії доведеться модифікувати, щоб реалізувати всі доступні в Linux системні інтерфейси. Архітектура starnix значною мірою відповідає підлисту підсистеми Windows для Linux, який використовується в Windows для перекладу системних викликів Linux у системні виклики Windows.
Планується, що код starnix буде реалізований на мові Rust, щоб мінімізувати можливі вектори для виникнення вразливостей, які потенційно можуть бути використані для підвищення привілеїв процесу Linux до процесу starnix. Для забезпечення безпеки starnix по можливості буде використовувати стандартні механізми захисту Фуксії. Наприклад, при зверненні до системних служб, таким як файлова система, мережевий стек або графічна підсистема, starnix буде транслювати тільки запити, перетворюючи Linux ABI в Fuchsia System ABI, допускаючи ті ж обмеження, які застосовуються до звичайних процесів Фуксії. При цьому будуть реалізовані специфічні для Linux механізми контролю дозволів, наприклад, визначення того, в яких ситуаціях один Linux-процес має право припинити інший.
Підтримку запуску Linux-додатків розробники Fuchsia розробляли і раніше, але експериментували з реалізацією, яка працює аналогічно тому, як організований запуск додатків Linux в ОС Chrome . Для сумісності з Linux Фуксія запропонував бібліотеку Machina, яка дозволяла запускати Linux-програми в спеціальній ізольованій віртуальній машині, сформованої за допомогою гипервизора на основі ядра Циркона і специфікацій Virtio.
Використання віртуалізації не скидається з рахунків, так як повна реалізація системного інтерфейсу Linux не є тривіальним завданням. Крім шару starnix, не виключено створення механізму запуску виконуваних файлів Linux з використанням ядра Linux, запущеного в окремій віртуальній машині. Цей спосіб відзначається як найпростіший в реалізації, але і найбільш ресурсномісткий. Свого часу Microsoft почала розробляти свій рівень сумісності з Linux з перекладачем, але в кінцевому підсумку перейшла на використання рідного ядра Linux в підсистемі Windows для Linux 2.
Крім того, Fuchsia вже забезпечує рівень сумісності POSIX Lite, який працює поверх системи Fuchsia System ABI. POSIX Lite дозволяє запускати деякі програми Linux, але вимагає перекомпіляції коду програми, а в деяких випадках і модифікації вихідного коду. Однією з проблем POSIX Lite є неповна реалізація всіх функцій POSIX, включаючи заклики до зміни глобального стану процесів (наприклад, функція вбивства), які розходяться з концепціями безпеки в Фуксії, які забороняють змінювати глобальний стан. Використання POSIX Lite виправдовує себе в процесі портування відкритих додатків, але не вирішує проблем з запущеними програмами, для яких немає доступу до коду (наприклад, неможливо домогтися сумісності з Android-додатками, що містять скомпільовані нативні вставки).
Нагадаємо, що в рамках проекту Fuchsia компанія Google розробляє універсальну операційну систему, яка може працювати на всіх типах пристроїв, від робочих станцій і смартфонів до вбудованого і споживчого обладнання. Розробка ведеться з урахуванням досвіду створення платформи Android і враховує недоліки в області масштабування і безпеки.
Система заснована на мікроядрі Циркон , заснованої на розробках проекту ЛК , розширеної для використання на різних класах пристроїв, включаючи смартфони і персональні комп'ютери. Zircon розширює LK з підтримкою процесів і спільних бібліотек, рівня користувача, системи обробки об'єктів і моделі безпеки на основі можливостей. Драйвери реалізуються у вигляді динамічних бібліотек, що працюють в призначеному для користувача просторі, завантажуються процесом devhost і управляються диспетчером пристроїв (devmg, Device Manager).
Fuchsia має власний графічний інтерфейс, написаний на мові Дарт з використанням фреймворку Flutter. Проект також розробляє фреймворк користувальницького інтерфейсу Peridot, менеджер пакетів Fargo, стандартну бібліотеку libc, систему рендеринга Escher, драйвер Magma Vulkan, композитний менеджер Scenic, файлові системи MinFS, MemFS, ThinFS (FAT in Go) і Blobfs, а також менеджер розділів FVM. Для розробки додатків передбачена підтримка мов C/C++, Dart , rust також допускається в системних компонентах, в мережевому стеку Go і в системі збирання Python.