Пробуем 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.
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

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

      +2
      Вы молодец, поздравляю с портом! Система очень интересная, надеюсь её мощь оценят многие.
      У меня всё больше желание купить Raspberry Pi, что только с ней не делают люди.
        +6
        Боюсь отхватить минусов, но после покупки Raspberry Pi, а это было примерно год назад, я так и не нашел ему применение. Висел как сервер ssh для тоннеля через домашнюю сеть, как эмулятор приставок (RetroArch), как приставка для телевизора (XBMC). Но так и нигде он у меня не прижился. По каким то причинам он постоянно выключался сам собой, что нарушало стабильность работы сервера, а в последних двух вариантах вообще тормозил. Такую штуку можно брать как игрушку, но не для каких то серьезных намеренияй.
          0
          У меня прижился в качестве музыкального плейера volumio.org/ — управление с телефона, поддерживает USB DAC
            0
            Я сам не знаю, найду ли применение, но мне нравится широкий спектр возможностей.
            В журнале LinuxVoice было полно интересных идей. В одном выпуске они делали пивоварную машину, в другом игровой автомат, в третьем — аварийный радиобуй.
            Для изучения всяческих окружений RPi хорошо подходит — бесплатная Mathematica, теперь ещё Inferno OS можно запустить.
              0
              Кстати, есть открытый журнал themagpi про RPi (уже 23 выпуска). Думаю можно постоянно находить что-то интересное.
            0
            купите cubietruck за 110$ и применений будет намного больше
            +1
            Спасибо, видел ваш комментарий на Linux. org.ru. теперь здесь уже гораздо подробнее. Спасибо за работу.
              +1
              Интересно было бы увидеть результаты тестирования производительности Dis на Raspberry Pi в абсолютных величинах, в сравнении с аналогичным кодом на С. Если система не даёт выраженных лагов, это может быть прорыв в аппаратном обеспечении приборов, работающих в реальном времени.
                +1
                Я общался с разработчиками Inferno по вопросу использовании для задач реального времени. Сейчас ядро не предлагает никаких bounds on operations, interrupt lock-outs. В терминах deadlines и WCET. Хотя многие из real-time систем сегодня дают не там много гарантий. Но опять же, кода там не так много, можно просто адаптировать ядро под нужную задачу, включая real-time.

                Более интересный подход это реализация 9p/Styx прямо в железе (на FPGA). Протокол несложен, но когда сенсоры итд отдают данные прямо через 9p коммуникации это отлично упрощает систему. (пример реализации)
                +1
                FAQ: Что такое OS Inferno и зачем она нужна?

                К сожалению, разобраться с установкой Inferno на свой телефон с андроидом пока что руки не дошли. Вроде бы там ничего сложного, если кто делал — поделитесь впечатлениями. :)
                  +1
                  Имею rpi, хотелось бы получить руководство по установке и решению возможных проблем
                  +2
                  На тему «всё есть файл» очень понравился недавний твит Роба Пайка:
                  In Plan 9, it's not «everything is a file», it's «everything has the same interface». And that interface is «file *system*». Very different.
                    +1
                    Да, можно сказать это более современная формулировка. Берём на вооружение.

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

                  Самое читаемое