Что стало известно о новой ОС от Google: компилируем, запускаем и изучаем исходники Fuchsia

Недавно мы публиковали новость о том, что Google анонсировала новую ОС под названием «Fuchsia». В ней мы писали, что любой желающий может скомпилировать из исходного кода и запустить Fuchsia. Сегодня мы выкладываем перевод рассказа о том, что бы вы увидели, если бы вы действительно решили потестировать эту наработку.

Компилируем Fuchsia

Самый простой способ собрать Fuchsia — использовать 64-х битную машину c Ubuntu Linux. Вероятно, она должна так же нормально собираться и на OS X. Если вы не слишком дружите с Linux или командной строкой, то эта задача однозначно не для вас. Но не беспокойтесь – я уже выполнил всю сложную работу 🙂

Сейчас Fuchsia разделена на две крупные части: Magenta (ядро) и разные инструменты, библиотеки и програмы, которые и делают из сырого ядра Magenta операционную систему. В сердце у Magenta находится Little Kernel (LK) — маленькая операционная система, созданная для маленьких встраиваемых устройств и бутлоадеров. Magenta построена вокруг LK, чтобы расширить его функциональность для работы с большими системами, у которых есть приличный запас памяти и периферия (т.е. которой нужны драйвера для работы с другими устройствами). К примеру, у Magenta есть такое понятие как «процесс», которое отсутствует у LK. У Magenta есть работа с пользователем, у LK его нет, и дальше в таком духе.

Таким образом, чтобы собрать Fuchsia необходимо сделать две вещи. Первая — собрать все инструменты и библиотеки, которые будут работать в пространстве пользователя (user space), включая маленькую shell програмку с названием «mxsh». Вторая — собрать LK/Magenta. Как только вы это сделаете, вы можете запускать Magenta, используя файловую систему, содержащую все исполняемые файлы Fuchsia.

Запускаем Fuchsia

Самый простой способ запустить Fuchsia – использовать qemu (популярный open source эмулятор). Фактически, исходники Fuchsia содержат собственную копию qemu, которая компилируется вместе со всем остальным.

Как только вы запустите Fuchsia, вы сразу увидите множество сообщений от ядра, которые сообщают о том, как система запускается (эти сообщения для дебага). Система приветствует вас словами «welcome to lk/MP», и затем ядро начинает инициализировать разные подсистемы, вроде потоков и таймеров. После этого запускается обнаружение процессора, менеджер устройств и сеть. После загрузки вы получаете доступ к консоли с названием «mxsh».

У mxsh есть несколько встроенных команд, вроде cd, cp, echo, ls и rm. Если вы наберёте слово, которое не является встроенной командой, то консоль попробует запустить программу с таким именем из /boot/bin . Директория /boot/bin содержит множество разных исполняемых файлов, большинство из которых предназначено для тестирования и дальнейшей разработки системы. Например, одна из программ называется «thread-depth-test», она проверяет способность Fuchsia создавать потоки. Есть ещё несколько простых исполняемых файлов вроде fortune или cowsay:

Команда cowsay работает в Fuchsia отлично

Команда cowsay работает в Fuchsia отлично

Самая важная часть здесь — поддержка языка Dart (скриптового языка Google), который изначально задумывался как альтернатива JavaScript. С тех пор Dart значительно вырос и теперь это полноценный интерпретируемый язык, который Google использует во многих своих системах (например AdWords). Есть два способа запустить программу на Dart — транслировать его в JavaScript (и потом запустить с помощью интерпретатора JS) или интерпретировать напрямую через Dart VM. Последний вариант и используется в Fuchsia.

Чтобы проверить работу Dart, в Fuchsia есть маленький скрипт /boot/apps/hello_fuchsia.dart, который (как несложно догадаться) выводит на экран строчку Hello, Fuchsia!. Запускаются Dart-скрипты командой dart путь_до_файла.

"Hello World" на Dart тоже запускается

«Hello World» на Dart тоже запускается

Конечно, фраза «Hello, Fuchsia!» в консоли может показаться не слишком впечатляющей. Однако на самом деле это здорово — ведь это значит, что Fuchsia уже достаточно развита, чтобы исполнять сложный интерпретатор, который в свою очередь запускает скрипт. Это требует работы с процессами, потоками, памятью, файловым вводом-выводом и многим другим. Это напоминает мне Linux, а точнее, его первые релизы, вроде pre v1.0.

О чём это всё говорит?

Первое, что мы можем с увернностью сказать о Fuchsia — Dart будет играть в ней важную роль. Текущая сборка не содержит ни компилятора Си, ни какого-либо другого языка высокого уровня, вроде Java, в то время как Dart уже там есть и уже работает. Видимо, Google будут разрабатывать устройство, которое будет работать на Fuchsia и программироваться на Dart. Возможно, это будет устройство виртуальной реальности? Или что-то для дома? Прибор для доступа к массивной инфраструктуре искусственного интеллекта Google? Нам так же известно, что над Fuchsia так же работают разработчики Flatter (фреймворка для создания высокопроизводительных приложений для iOS и Android на Dart).

Кроме этого, нам известно, что Fuchsia не предназначена для встраиваемых систем (с несколькими тысячами килобайт памяти), она предназначена для куда бóльших устройств, как минимум для смартфонов. Но мне кажется абсурдным, что Fuchsia будет серьёзной десктопной ОС для конкуренции с Windows или OS X. Кроме того, учитывая, сколько Google вложили в развитие сообщества разработчиков под Android, мне кажется маловероятным и то, что Google захочет это всё уничтожить одним махом.

fuchsia-boot-apps

Напоследок стоит повторить, что Fuchsia ещё только начинает развиваться. В ней ещё нет никакого графического интерфейса (и никто не гарантирует, что он будет в конце разработки). Нет никаких дистрибутивов или установщиков, которые рассчитаны на потребителей (а не разработчиков), количество команд и библиотек сильно ограничено, и так далее. Ещё хочется сказать, что в общем-то Fuchsia сейчас развивается достаточно быстрым темпом. Однако для чего именно она развивается, остаётся загадкой.


Наши зарубежные коллеги, помимо прочего, решили исследовать исходники Fuchsia, поскольку они теперь доступны на GitHub. Вот что им удалось выяснить.

Magenta

Magenta — это сердце новой операционной системы, состоящее из микроядра и набора пользовательских сервисов и драйверов. Примечательно, что ОС не использует ядро Linux, как это делают Android и Chrome OS.

Escher

Fuchsia включает в себя Escher, «основанный на физике рендерер», предоставляющий возможность реализовать объёмные мягкие тени, рассеивание света и эффект линзы. Это даёт основание считать, что Fuchsia не будет простой встраиваемой операционной системой, а как минимум сможет предоставить графический пользовательский интерфейс.

Mojo

Похоже, что Mojo — это фреймворк и среда выполнения приложений. Как мы уже упоминали, основным языком, используемым в Fuchsia, является Dart.

Jiri

Jiri — это инструмент для разработки с использованием нескольких репозиториев. Исходники его открыты, и поэтому его набор команд можно расширять. По принципу работы Jiri похож на Git.

GigaBoot20x6

Ну а GigaBoot20x6 — это UEFI-бутлоадер для вышеупомянутой Magenta.

Пётр Соковых, транслятор двоичного кода в русский язык