Идею создания распределённой UNIX-подобной операционной системы компания Bell Labs успешно реализовала в рамках проекта Plan 9, однако в 1996 году дальнейшее развитие этой ОС было приостановлено. Ей на смену пришла платформа с кодовым названием Inferno, опиравшаяся на наработки Plan 9, но использовавшая в своей основе принципы виртуализации. Этому крайне интересному проекту Bell Labs, дожившему до наших дней и превратившемуся в бесплатную ОС со свободной лицензией, посвящена сегодняшняя статья.
Когда в Bell Labs только задумывали Plan 9, в её основу был заложен принцип, похожий на архитектуру современных «облачных» операционных систем. В середине восьмидесятых годов прошлого века «железо» рабочих станций ещё не отличалось высокой производительностью, поэтому все ресурсоёмкие задачи было решено перенести на удалённые серверы, как и большие файлы, доступ к которым должен осуществляться по сети. Рабочим станциям отводилась роль терминалов, пользователь которых взаимодействует с сетевыми ресурсами и файлохранилищами посредством графической оконной среды RIO. Для реализации этой задумки в Bell Labs создали универсальный протокол 9P, позволявший обращаться к любым объектам, в том числе — устройствам, как к файлам, вне зависимости от того, где именно они расположены: на локальной машине или на сервере. Достигалось это путём использования общего изменяемого пространства имён для каждого выполняющегося в Plan 9 процесса. В результате вся сеть с подключёнными к ней серверами и рабочими станциями под управлением Plan 9 превращались в один большой «распределённый компьютер», файлы и устройства которого доступны каждому узлу этой сети.
Такая схема оказалась вполне жизнеспособной и даже успешно использовалась в нескольких университетах, где в качестве серверов Plan 9 применялись Sun Sparcstation, SGI Power и SGI Magnum, а в качестве рабочих станций — NeXTstations и обычные IBM-совместимые персоналки. Но ближе к середине 90-х получила активное развитие технология, одним из пионеров которой стала компания Sun Microsystems со своим проектом под названием Stealth, превратившемся позже в Java: виртуализация и виртуальные машины. Цели, которые ставили перед собой специалисты из Sun, были весьма благородными: переносимость приложений и кода, универсальность и кросс-платформенность. В Bell Labs подумали: а почему бы не совместить распределённую операционную систему Plan 9 с возможностями виртуализации, разрабатываемыми в Sun? Так на свет появился проект операционной системы Inferno.
▍ Под капотом
В основе архитектуры Inferno лежит тот же принцип, что и у Plan 9 — «всё есть файл на любом устройстве». За его реализацию отвечает схожий с 9P стандартный протокол Styx, обеспечивающий доступ к локальным и удалённым ресурсам. В этом протоколе реализованы довольно мощные механизмы безопасности: авторизация и шифрование на основе цифровых подписей, встроенная система аутентификации. Основное отличие Inferno от Plan 9 состоит в том, что в ядро этой ОС интегрирована регистровая виртуальная машина Dis, позволяющая повысить совместимость платформы с различными сетевыми средами и аппаратными архитектурами. Виртуальная машина в Inferno обеспечивает управление памятью и может работать на устройствах с доступным объёмом RAM в 1 Мбайт. Помимо гипервизора ядро Inferno содержит оперативный (on-the-fly) компилятор, стеки протоколов, средства взаимодействия с пространством имён процессов, а также корень иерархии файловой системы. Кроме того, в ядре содержатся модули интерфейсов виртуальной операционной системы, отвечающие за операции ввода-вывода, системные вызовы, безопасность самого ядра и т. д.
Благодаря виртуализации Inferno могла работать на устройствах с архитектурой Intel x86, PowerPC, Sun SPARC, ARM, RISC и MIPS. Разработчики предполагали, что Inferno может запускаться как самодостаточная операционная система (так называемый режим native), или как приложение-сервер (режим hosted) под управлением Microsoft Windows, Mac OS X, Linux, Plan 9, а также в различных реализациях Unix (таких как SGI Irix, Sun Solaris, FreeBSD). При этом работающие в Inferno программы во всех случаях будут «видеть» одинаковое окружение и иметь доступ к одинаковым интерфейсам. Сами приложения для Inferno написаны на языке Limbo и скомпилированы в исполняемый код виртуальной машины Dis, который можно без каких-либо изменений запускать на всех платформах, совместимых с Inferno.
Limbo — основной язык программирования в Inferno. Это типобезопасный язык, ориентированный на многопоточность, синтаксис которого немного напоминает С. Жизнь разработчиков заметно облегчает наличие большого количества стандартных библиотек: для работы с базами данных, для математических вычислений, вывода графики и т. д. Limbo позволяет писать многозадачные приложения, поддерживающие несколько процессов (в терминологии Inferno — «нитей») и обладает высокоуровневым сборщиком мусора, отвечающим за освобождение памяти.
Возможности Inferno в целом аналогичны таковым в Plan 9: на компьютере, работающем под управлением этой ОС, можно использовать аппаратные, файловые и программные ресурсы всех остальных доступных в сети устройств с Inferno. К ним относятся, в частности, общие файловые хранилища, периферия и подключённые устройства, приложения и файловые системы. Можно локально подмонтировать файловую систему, физически размещающуюся на удалённой машине, при этом ОС сама позаботится об исключении конфликтов и разграничении доступа. Для работы в сети, совместного использования приложений и файлов не требуется настраивать какой-либо дополнительный инструментарий вроде средств авторизации, шифрования, туннелирования трафика: всё необходимое есть в самой Inferno.
▍ Система
Поскольку Inferno в значительной степени опиралась на Plan 9, множество компонентов ОС было позаимствовано именно оттуда. Так, большинство утилит командной строки в Inferno — это утилиты из Plan 9, переписанные на Limbo. Протокол Styx также практически идентичен протоколу 9P (в версии 9P2000). Да и первая версия графического интерфейса очень напоминала интерфейс оконного менеджера RIO из предыдущего детища Bell Labs.
Создатели ОС предполагали, что таким образом они сумеют построить универсальную кросс-платформенную инфраструктуру, в которой различные устройства и приложения смогут свободно обмениваться данными по сети, не обращая внимания на вопросы совместимости. Так, мобильные телефоны и КПК могли бы подключаться к серверам электронной почты без программных шлюзов и прочих «костылей», голосовая почта стала бы доступна пользователям бытовых телевизоров, а игровые приставки получили бы возможность обмениваться данными с персональными компьютерами и ноутбуками. Фактически в рамках проекта Inferno в Bell Labs ещё в 1996 году придумали концепцию «одна универсальная ОС на разных устройствах», которую спустя 12 лет успешно реализовала корпорация Google со своей платформой Android.
Но тогда, что называется, «не взлетело». 30 сентября 1996 года подразделение Bell Labs, занимавшееся разработкой софта и развитием перспективных операционных систем, превратилось в самостоятельную телекоммуникационную компанию Lucent Technologies, Inc. Ей и перешли все права на Inferno. Новый владелец начал продавать лицензии на эту систему, но так и не нашёл покупателей. На основе Inferno работало всего лишь два устройства: Lucent VPN Firewall Brick и телефонный коммутатор Lucent Pathstar, но этими девайсами всё и ограничилось.
В Lucent не занимались маркетинговыми исследованиями и продвижением своего детища, в то время как Sun Microsystems активно пиарила технологию Java, ориентированную, по большому счёту, на тот же рынок, встраивала поддержку языка в популярные браузеры и всячески старалась внедрить его в мобильные устройства. Почувствовав, что поезд уже трогается, набирает ход и вот-вот покинет перрон, Lucent купили у Sun лицензию на JVM и написали транслятор байт-кода Java в байт-код Dis, чтобы обеспечить совместимость Inferno и Java. Но и это не помогло — коммерческих клиентов, готовых лицензировать и использовать Inferno на своих устройствах, так и не нашлось. Это стало отправной точкой к скорому закату проекта.
Существует только 32-разрядная версия Inferno, соответственно, для запуска её на других ОС в hosted-режиме требуется поддержка 32-битных приложений. Операционка использует собственную графическую среду — если лет 20 назад вы ставили Linux с XFree86, то при виде оконного менеджера Inferno наверняка испытаете приступ ностальгии, хотя по современным меркам интерфейс, конечно, выглядит слегка архаично.
Среди стандартных приложений в Inferno имеется простой текстовый редактор, среда разработки ACME и браузер Charon с поддержкой JavaScript. Есть и несколько игр: «Змейка», «Сапёр», Polyhedra и Bounce. Поскольку все приложения Inferno работают внутри виртуальной машины Dis, в системе можно запустить любую программу, скомпилированную в байт-код этой ВМ.
Безусловно, для повседневной работы базового набора софта Inferno определённо недостаточно, но эта ОС, в общем-то, и не предназначена для повседневной работы. Скорее, это полигон для экспериментов в области распределённых вычислений, а также для разработки сетевого ПО и всевозможных клиент-серверных решений. Кроме того, эта ОС обеспечивает высокую производительность на устройствах с ограниченными ресурсами — то есть летает там, где другие операционки «ползают». Это даёт ей шанс найти применение, например, на одноплатных компьютерах, хотя реализации Inferno для одноплатников в настоящее время нет, в то время как версия форка Plan 9 — 9Front — для Raspberry Pi наоборот, существует.
▍ Конец истории… Или продолжение следует?
Бизнес-подразделение Inferno закрылось через три года после коммерческого запуска проекта и было продано компании Vita Nuova Holdings. Та снова попыталась наладить продажу коммерческих лицензий Inferno, но никакого успеха на этом поприще не добилась. Вскоре значительная часть компонентов ОС (за исключением ядра, виртуальной машины и нескольких проприетарных шрифтов) была лицензирована для бесплатной загрузки и использования, а в 2021 году всю ОС перелицензировали под свободной лицензией MIT.
Сейчас Inferno доступна для бесплатного использования, вместе с тем последняя версия этой ОС появилась 7 лет назад — 28 марта 2015 года. Широкого применения эта платформа так и не нашла, но, вместе с тем, заложенные в её архитектуру принципы сегодня как нельзя актуальны. В современном мире, где каждый человек использует несколько устройств (смартфон, ноутбук, рабочий компьютер, различные компоненты «умного дома»), очень важно обеспечить прозрачное взаимодействие всех этих девайсов и обмен данными между ними. Inferno позволяет организовать такой обмен без всевозможных «костылей» вроде SSH, VPN и прочих ухищрений, поскольку протокол Styx поддерживает это «из коробки», обеспечивая достаточно высокий уровень безопасности.
Пожалуй, дальше всего в строительстве единой экосистемы для разных типов устройств сейчас продвинулась Apple — можно начать редактировать документ на iPhone или iPad и продолжить работу с того же места на MacBook, перекинуть нужные файлы с одного устройства на другое через AirDrop или синхронизировать их с помощью iCloud. Google и Microsoft идут по тому же пути. Тем не менее, многим из нас всё ещё приходится использовать для передачи и хранения больших объёмов файлов облачные сервисы вроде Dropbox или «Яндекс.Диск», сторонние приложения для подключения смартфона к принтеру, а «умного телевизора» — к медиасерверу, где лежат скачанные с торрента сериалы. Согласитесь, это не слишком удобно. Специалисты из Bell Labs придумали решение этой проблемы ещё в середине 90-х, создав Inferno. Тогда эта ОС значительно опередила своё время и не нашла широкого применения. Зато теперь, кажется, у неё появился неплохой шанс обрести второе рождение. Хочется надеяться, что она его не упустит.
Автор: Валентин Холмогоров