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

Поверхностный обзор OS Inferno

Софт
OS Inferno
Итак, начнём с главного — где же место под Солнцем для Inferno, где и как имеет смысл применять Inferno. Нет, на роль десктопа или сервера я Inferno не предлагаю, эти теплые места в данный момент заняты. :) Но есть минимум три задачи, с которыми Inferno справится лучше других.

  • Распределённые вычисления и Grid (благодаря протоколу Styx доступ к локальным и удалённым ресурсам ничем не отличается, что позволяет очень просто писать распределённые системы).
  • Гомогенная среда (приложение написанное на Limbo будет гарантированно одинаково работать и под виндой, и под юниксом, и на встроенных устройствах).
  • Встроенные устройства (Inferno поддерживает множество процессоров и устройств… возможно Inferno уже работает внутри Вашего гаджета, просто вы об этом не подозреваете :)).

Но лично меня Inferno в первую очередь привлекает не этими возможностями, а элегантностью и простотой архитектуры, которая позволяет решать мои задачи значительно проще и элегантнее чем в других системах/языках. Причём я здесь имею в виду самые обычные задачи, никак не связанные ни с распределёнными вычислениями, ни с прочими основными возможностями Inferno!

Простота


  • Вся существующая документация по системе в общем и по программированию на Limbo была мной прочитана за 4 дня, включая почти полностью аналог секций 2 (системные вызовы) и 3 (библиотечные функции) man-документации! Правда, читал я часов по 18 в день. :) И это связано не с плохой документированностью системы, а с её простотой!
  • Inferno содержит очень немного кода, по сравнению с другими системами. Причём код полностью открыт. Это даёт реальную возможность детально разобраться в системе и изменять/исправлять её самостоятельно, если авторы откажутся вносить какие-то изменения/исправления. (Я сейчас посчитал через find и wc объём всех .c и .h-файлов: соответственно 750000 строк в 15MB и 100000 строк в 3.5MB — это код самой OS под все платформы (и native и hosted!), драйверов, виртуальной машины и компилятора Limbo — для сравнения, только ядро линуха занимает на порядок больше. Весь прикладной софт и библиотеки написаны на Limbo, и занимают 500000 строк в 10MB.)
  • Для запуска вашего Limbo-приложения на, например, linux-сервере потребуется скопировать на сервер 3 файла Inferno общим размером 1.1MB, :) ваше приложение и необходимые ему библиотеки (если используются).
  • Ну и самое главное — архитектурная простота. Но эту тему я хочу раскрыть отдельно, она этого заслуживает!

Эффективность


  • Очень лёгкие нити: можно создавать нити тысячами и десятками тысяч и система при этом отлично и быстро работает (если я ничего не путаю, они для экономии памяти сделали динамическое выделение памяти для стека нитей а-ля heap).
  • JIT. Вообще Dis (виртуальная машина) работает достаточно шустро. Но для достижения максимальной эффективности в Inferno есть поддержка JIT, т.е. байт-код на лету компилируется в native-коды того процессора, на котором исполняется. Причём байт-код Dis изначально проектировался так, чтобы упростить JIT-компиляцию для большинства существующих процессоров.

Переносимость


  • Байт-код. Компилируем один раз, дальше запускаем под любой Inferno — не важно, native или hosted и на каком процессоре всё это запущено. Авторы Inferno гарантируют одинаковую работу приложений на любой системе.
  • В hosted режиме поддерживаются все популярные OS.
  • В native режиме поддерживается множество процессоров.

Язык Limbo


  • Параллельное программирование (concurrent programming).
  • Для синхронизации потоков используется развитая идея Hoare's Communicating Sequential Processes (CSP), что очень сильно упростило программирование. (Кстати, на эту тему можно посмотреть Google TechTalk Роба Пайка.)
  • Сильнотипизированный.
  • Поддержка кучи высокоуровневых фич (tuples, alt, etc.). Эту тему я тоже буду раскрывать отдельно. :)

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


  • Доступ ко ВСЕМ ресурсам, и локальным и удалённым осуществляется через протокол Styx. А в Styx встроена поддержка авторизации, аутентификации и шифрования в стиле SSL-сертификатов. Таким образом безопасность обеспечивается на этапе администрирования системы и выдачи сертификатов, в приложении, как правило, ничего специально для безопасности уже программировать не приходится.

Возможные ограничения (мои личные наблюдения)


  • Пока нет поддержки unix socket, но есть шанс что скоро её добавят. Update: поддержку добавили 20110329.
  • Каждый блокирующий syscall в host OS (линух/винду/etc.) выполняется в отдельной нити, чтобы не блокировать работу всего Inferno. При большом кол-ве блокирующих сисколов одновременно (напр. сервер на котором одновременно висит и делает I/O 10000+ клиентов) могут быть проблемы.
  • Нет поддержки полу-закрытых сокетов (т.е. нельзя послать на удалённую сторону EOF с помощью shutdown(SHUT_WR) не закрывая сокет. И не будет. Потому, что это, как мне объяснили, идеологически неправильная вещь. :)
  • Я не уверен, но возможно SSLv3 поддерживается не полностью. Т.е. он есть, по https:// на сайты заходить можно, но возможно не все фичи реализованы.

Надо отметить, что большинство этих ограничений можно обойти благодаря одной фиче Inferno: есть возможность запускать процессы host OS и взаимодействовать с ними. Т.е. я могу, например, из приложения на Limbo вызвать линуховый perl-скрипт, передать ему данные и считать от него данные. Я с помощью этой фичи уже обеспечил себе доступ из Limbo к unix socket-ам (очень хотелось из Limbo писать в syslog).

Ссылки


citforum.ru/operating_systems/inferno_programming
(плюс в конце этой статьи ещё куча полезных ссылок)
powerman.name/Inferno
(мой сайт, там есть русская дока по Limbo)
habrahabr.ru/search/?q=%5Binferno%5D&target_type=posts
(остальные статьи по OS Inferno на хабре)
Теги:
Хабы:
Всего голосов 26: ↑22 и ↓4 +18
Просмотры 5.2K
Комментарии Комментарии 14