POWERMAN
"In each of us sleeps a genius...
and his sleep gets deeper everyday."

Когда не работается, многие читают bash.org.ru или anekdot.ru… а я этой зимой полез от скуки перечитывать сайт OS Inferno. Полез с тоской, потому что хотя меня к Inferno давно тянуло, практической пользы я от чтения доки по Inferno ожидал сколько же, сколько и от вышеупомянутых сайтов.

Но произошло нечто неожиданное - в процессе чтения на меня снизошло озарение: я понял, что OS Inferno это не операционная система, а среда разработки!

Звучит странно? Да. Особенно странно, если учесть что на сайте Inferno первым предложением идёт "Inferno is a compact operating system …". Суть в том, что когда произносится "операционная система" в наше время в головах у людей возникают десктопные винда и линух, и любая другая ОС начинает сравниваться с ними. Немногие подумают помимо десктопных ОС ещё и о серверных. Но Inferno не выглядит достаточной даже для сервера, я уж молчу про десктоп. Таким образом, сравнив Inferno с виндой и линухом мы приходим к напрашивающемуся выводу, что Inferno это, хотя и восхитительная, но "игрушечная" ОС. Возможно, в будущем, когда в Inferno появятся bash, apache, mysql, perl, vi и mplayer она станет более-менее юзабельной… Будущее наступило, в прошлый раз я ковырял Inferno примерно 5 лет назад… и что же? А ничего не изменилось, в Inferno по прежнему нет bash, apache, mysql, perl, vi и mplayer!

Моё озарение можно описать так: Inferno больше похожа не на ОС, а на обычный сервис, который расшаривает ресурсы компа на котором запущен в сеть по протоколу Styx.

Да, это, мягко говоря, не совсем точное описание Inferno… ;-) но оно моментально изменило ВСЕ: я перестал испытывать дискомфорт из-за отсутствия в Inferno привычного софта - я отлично могу продолжать работать в линухе используя привычный Vim (с подсветкой синтаксиса для Limbo!), bash, mc для разработки софта под Inferno!

Более того, после нескольких дней плотной работы с Inferno я вообще начал склоняться к тому, чтобы рассматривать Inferno не как ОС, а как … язык программирования! :) Например, можно сравнить Inferno/Limbo и мой любимый Perl. В обоих случаях я пишу программу, она компилируется в байт-код, и потом выполняется внутри виртуальной машины. Моя программа имеет доступ к некоторым высокоуровневым абстракциям, и низкоуровневым системным вызовам (syscall). Так что в обоих случаях можно реализовать практически любую задачу, и работать они, скорее всего, будут со сравнимой скоростью (кстати, я провёл несколько тестов, которые это подтвердили). Единственное серьёзное отличие это среда, с которой взаимодействует моя программа:

  • Perl предоставляет "more than one way to do it", множество высокоуровневых вещей типа структурного, объектно-ориентированного и функционального (map, grep, sort, …) стилей программирования; скалярные переменные, отсутствие проверки типов и множество других вещей делающих программирование комфортным.

  • Inferno предоставляет очень простую и элегантную среду, пряча от меня кошмары архитектуры и реализации POSIX/ядра Linux/Glibc. Так же она предоставляет гораздо больший контроль над используемыми ресурсами (perl не просто использует много памяти, он её просто пожирает!), не вынуждая меня при этом программировать на слишком низком уровне: вызывать free(), ручками создавать строки из массивов символов, вызывать функцию каждый раз когда мне нужно сравнить или скопировать строки, etc.

Все эти определения "что такое Inferno" на самом деле, конечно, не являются определениями Inferno - ибо Inferno это "compact operating system". Эти определения просто пытаются описать отношение к Inferno, т.е. не "что такое Inferno", а "как использовать Inferno". К примеру, когда я начинаю сравнивать Inferno и Perl это вызвано тем, что когда мне нужно разработать некое приложение я могу использовать либо Inferno/Limbo, либо Linux/Perl. С большой вероятностью размер кода, скорость разработки и выполнения окажутся сравнимы. И когда мне нужно будет выбрать наиболее подходящую платформу для реализации этой задачи я буду выбирать между очень богатым и гибким Perl на уродливой архитектуре Linux, или между не столь богатым и гибким, но зато очень простым Limbo на изумительной архитектуре Inferno.

Например, если нужно будет писать парзер веб-страничек, анализатор логов, и другие приложения для обработки текста - лучше Perl для этих задач ничего нет. Но если нужно что-то более низкоуровневое, например сложный сервер с асинхронным I/O, то на Inferno/Limbo такие вещи писать будет на порядок проще и приятнее.

Что касается существующих приложений в Inferno (браузера, например), то, насколько я понимаю, это примеры приложений, и не более того. Это просто демонстрация возможностей системы, и для демок они более чем впечатляющие!

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