Открыть список
Как стать автором
Обновить

Пробуем native Inferno OS на Raspberry Pi

Софт
Представляю рабочий порт Inferno OS для Raspberry Pi.



Довольно долго было не так просто попробовать Inferno OS как «родную» ос а не в «hosted» режиме когда система запускается как процесс на Linux/Windows/MacOS/Plan9. Основная проблема этого в отсутствии широкого спектра драйверов для основных платформ да и легко доступный «hosted» режим.

Сначала наверно стоит немного приоткрыть завесу и сказать что такое Inferno OS и чем она хороша (Первое что спросят в комментариях! На хабре уже давно присутствует отличный цикл русскоязычных статей от powerman: list, также его блог).

Всё есть файл

Inferno OS система это идеологический наследник Plan9, поэтому понятно присутствие простой концепции: всё есть файл. Именно так, понятие API в каком-то смысле можно опустить. Например TCP стек — это виртуальные файлы, взаимодействуя с которыми открываются новые соединения, передаются данные через запись/чтение файлов. Переменные среды — каталог /env где файлы это переменный среды, и так далее…

Namespaces

Каждый процесс может создать свое собственное окружение для себя и своих потомков — вам нужна реализация «песочницы» без сети для приложений? — просто убирается /net из окружения определённых процессов-потомков. Так как всё взаимодействие с системой, другими приложениями и окружающей средой осуществляется через синтетические файлы то жонглируя окружением приложений можно реализовать диаметральный подход к разработке приложений — не приложение пытается подстроится к платформе анализируя окружение, оборудование, софт, а наоборот система даёт возможность настроить окружения под потребности приложения.

Dis, виртуальная машина и платформонезависимый байт-код

Dis это довольно интересный байт-код который «реализует» процессор без регистров, то есть asm команды Dis это команды вида mov mem1,mem2; add mem1,mem2,mem3; Трансляция подобных команд (JIT) оказывается очень быстрой и эффективной, так как каждой Dis инструкции соответствует всего пара-тройка команд процессора платформы. Есть даже проект по трансляции java байт-кода в байт-код Dis. По производительности отставание от такой же программы на C в тестах показывалось как всего 1.6-2 раза (хочу вскоре воспроизвести подобное тестирование чтобы подтвердить результаты)

Безопасность

Система проверок доступа в результате сводится к управлению доступом к файлам — пропадает головная боль по проверке сотен различных API на предмет уязвимостей. Это не означает отсутствие уязвимостей но даёт существенное упрощение системы безопасности в целом.

Программирование приложений используя концепцию Communicating sequential processes

Программируя приложения для Inferno OS используются лёгкие нити, каналы — всё то с чем пришёл Go. Но в отличие от Go и Erlang и подобных присутствует фундаментальная возможность превратить любой канал приложения в синтетический файл. В результате каждое многопоточное приложение легко разрезается на отдельные процессы, приложения и при необходимости легко разносится на разные хосты. Именно поэтому основная практика написания приложений это не «поточное» приложение в unix-стиле которое ожидает stdin, обрабатывает данные и выдаёт результаты в stdout а приложение в стиле файл-сервер которое имеет виртуальные(синтетические) файлы для входящих данных, контроля и виртуальные файлы для вывода.

Универсальный сетевой протокол взаимодействия — 9p/Styx

Очень простой и эффективный протокол для организации соединения различных компонентов. Только одна конструктивная особенность — чувствительность к задержкам.

Если Inferno OS так хороша и легко запускается в «hosted» режиме то зачем нам «native» версия?

Тут самый интересный момент: в последние пару лет проснулся интерес к Inferno OS но не как к пользовательской системе а системе для использования в инфраструктуре «Internet of things». Как ни странно но именно inferno как компактная операционная система с универсальным протоколом 9p/styx для доступа ко всему и управления всем и универсальным Dis кодом идеально подходит для встраивания и использования в этой нише.

Многие SoC сейчас обладают тем что можно назвать «избыток» вычислительной мощности для задач для которых они предназначаются. Поэтому такие технологии как Dis/Limbo/Styx имеют преимущество даже при меньшей производительности чем аналоги на C. Плюс всегда есть несложная возможность вынести «вычислительную» часть в C-уровень ядра. Зато 9p/Styx позволяет легко реализовывать взаимодействие и объединение десятков и больше инферно-устройств в «умные» сети, легко пробрасывать вычисления между устройствами и так далее…

Теперь про сам порт.

Порт был начат не спеша и больше just for fun. И не ожидал что выльется в полноценный порт. Основная цель которую я ставил это задокументировать процесс портирования в виде лаб чтобы потом максимально упростить адаптацию системы к новым чипам. После получения «Шарообразного Инферно в вакууме» (сезон 1, без драйверов совсем, но с таймерами чтобы работало переключение процессов итд) оказалось что многое из драйверов довольно несложно адаптируется из проекта Plan9 для Pi (9pi) – взялся за второй сезон и доведён порт до состояния чтобы запустить полноценно на RPi с сетью, клавиатурой мышью и графической оболочкой.

Оказалось что портирование системы на другой ARM чип довольно несложно.

Как результат теперь существует легкая возможность для пробы и изучения Inferno OS именно как «родной» системы на железе. Так как система очень компактна, код несложен в изучении (часть кода общая с Plan9), то эта операционная система легко модифицируема как раз для исследовательских задач (у меня есть пару горячих идей!). Думаю многих исследователей в области операционных систем это заинтересует.

PS. На определенное время эта ос была можно сказать забыта. Многие архитектурные решения в этой системе оказались опередившим своё время и просто невостребованными. Сейчас похоже ситуация меняется с приходом «internet of things».

Рекомендуемая литература:

1. Inferno Programming with Limbo. Phillip Stanley-Marbell.
2. Principles of Operating Systems: Design & Applications. Brian L. Stuart
3. Communicating Sequential Processes. Hoare, C. A. R.
Теги:infernoinfernoosraspberry piraspberryinternet of thingsfog computing
Хабы: Софт
Всего голосов 57: ↑55 и ↓2 +53
Просмотры21.7K

Комментарии 14

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Похожие публикации

Administrator Linux.Basic
24 апреля 202155 000 ₽OTUS
Профессия iOS-разработчик
26 апреля 202190 000 ₽SkillFactory
Факультет дизайна
26 апреля 2021236 988 ₽GeekBrains
Факультет интернент-маркетинга
26 апреля 2021210 000 ₽GeekBrains
SEO-специалист
26 апреля 202164 900 ₽Нетология

Лучшие публикации за сутки