Inferno (операционная система). внутреннее окружение приложений Inferno. Версии OS Inferno

As a demonstration, Inferno also ran as a plug-in under Internet Explorer version 4.

Each Inferno system presents an identical environment to the applications, irrespective of the underlying host OS or architecture, allowing the developer to work with a truly homogeneous environment across multiple different platforms.

Portable Applications
Inferno applications are written in Limbo® , a modern, safe, modular, concurrent programming language with C-like syntax. It is more powerful than C but considerably easier to understand and debug than C++ or Java. It is easy to express the concurrency in the physical world directly in Limbo"s syntax. Any Inferno application will run identically on all Inferno platforms.

Portable Code
Limbo code is compiled into architecture independent code for the Dis® Virtual Machine , with a compact representation. Dis can be interpreted directly (saving space), or compiled on the fly for a given target processor (saving time). The choice can be made at run-time, per module. The Dis architecture was carefully designed to make on-the-fly code generation straightforward. Its instructions are easy to implement.

Transparent Resources
Inferno offers complete transparency of resources and data using a simple but powerful "namespace" system. By representing resources as files and having one standard communication protocol — 9P (Styx®) — resources such as data stores, services and external devices can easily be shared between Inferno systems. A resource interface may be imported to the local system and used by the applications without them knowing, or needing to know, whether it is local or remote.

Security
High level security is an important part of the Inferno system. By using one standard protocol for all network communication, security can be focused on one point and provided at a system level. Inferno offers full support for authenticated, encrypted connections using a certificate based user identification scheme and variety of algorithms including:

  • IDEA, 56 bit DES, 40, 128 and 256 bit RC4 encryption algorithms
  • MD4, MD5 and SHA secure hash algorithms

A Complete Solution
Inferno is not only an operating system, it is also a complete development environment, providing all the tools necessary for creating, testing and debugging the applications that run within it.

  • Acme IDE: includes editor, shell, advanced pattern matching tools & more
  • Fast Compiler: with full syntax and compile time type checking
  • Graphical Debugger: with full stack trace for currently executing threads
  • Powerful Shell: with sophisticated scripting capabilities
  • UNIX like commands: including bind, grep, gzip, mount, ps, tar, yacc...
To see how Vita Nuova and Inferno can provide a solution for you, contact us or select one of the links below.

Информация в предыдущем посте устарела почти на 4 года, и меня попросили её обновить. Так же попросили не смешивать в одном посте установку с настройкой, поэтому здесь будет только установка, а настройка инферно описана в отдельном посте. Update: Описание установки для Windows обновлено в июне 2014.

Итак, мы будем устанавливать распределённую ОС Inferno . На официальном сайте есть инструкции по установке , но они не совсем корректны и тоже немного устарели. Inferno может работать в двух режимах - native (на голом железе или в qemu/etc. как все обычные ОС) и hosted (как обычное приложение под *NIX/Win). Инструкции по установке native Inferno можно найти в русской вики . Помимо этого существуют и другие варианты - например, установка Inferno на Android (англ.) . Лично я смысла в использовании native Inferno на обычных компах не вижу, поэтому буду описывать установку hosted Inferno под Gentoo, Ubuntu, FreeBSD, MacOSX и Windows.

Особенности установки

Версии OS Inferno
Теоретически, последняя официальная версия «Fourth Edition» вышла примерно в 2004 году. Текущая версия находится в Mercurial репозитории на Google Code, и называет себя «New Edition». Практически, использовать что либо кроме текущей версии из репозитория нет смысла - она абсолютно стабильна, и всегда была стабильна. Её и будем ставить.
Одно- или много- пользовательский стиль установки
Инферно можно установить общесистемно (напр. в /usr/inferno/), чтобы все пользователи могли ей пользоваться. Инферно поддерживает всё, что для этого требуется - работу с правами пользователей, отдельные домашние каталоги, etc. С другой стороны, инферно можно поставить просто в свой домашний каталог (напр. в ~/inferno/), что даже удобнее. Прошлую статью я немного переусложнил описывая одновременно оба способа, но сейчас решил, что проще будет описать только однопользовательский вариант установки. Если у кого-то из читателей этой статьи есть сервер, на котором больше одного пользователя инферно - он вряд ли нуждается в моих инструкциях по установке инферно. ;-) Так что ставить будем в ~/inferno/ на *NIX системах, и в C:\inferno\ на винде.
32/64 бита
OS Inferno 32-битная. Поэтому для установки и запуска в 64-битных OS необходима поддержка 32-битных приложений в этих OS. К сожалению, под 64-битной FreeBSD-9.0 мне так и не удалось запустить инферно.
Hardened/PaX/SeLinux/etc.
Инферно выполняет код в виртуальной машине, плюс поддерживает JIT, поэтому у неё те же проблемы с разнообразными защитами что и у Java, etc. В предыдущей статье я уделил этой теме больше внимания, если возникнут вопросы - посмотрите там.
Время и место
Установленная инферно занимает примерно 200MB. А вот на установку компиляторов может потребоваться до 3-х с лишним гигабайт (например на Xcode или Visual Studio). Компилируется инферно буквально за пару минут на средней системе.
Расположение
При установке инферно в домашний каталог следует иметь в виду, что инферно не любит спец. символы в именах файлов/каталогов, так что если путь к домашнему каталогу содержит, например, пробел - могут возникнуть не учтённые мной сложности.

Установка

В (Hardened) Gentoo Linux 32/64-bit всё тривиально - есть пакет, который ставит инферно общесистемно в /usr/inferno/ :
layman -a powerman emerge inferno
А с остальными операционками сейчас будем разбираться.
Mercurial, компиляторы и все все все
… Ubuntu 12.04 32-bit
sudo apt-get install -y mercurial sudo apt-get install -y libxext-dev
… Ubuntu 12.04 64-bit
sudo apt-get install -y mercurial sudo apt-get install -y libc6-dev-i386 sudo apt-get install -y libxext-dev:i386
… FreeBSD 8.0 32-bit
pkg_add -r mercurial
… Mac OS X 10.6.8 Snow Leopard 32-bit
У меня уже были установлены Xcode (3.2.2) и Mercurial (1.7.1).
… Mac OS X 10.7.4 Lion 64-bit
Устанавливаем Xcode (4.3.2) через App Store.
Запускаем Xcode, идём в меню Xcode - Preferences - Downloads и нажимаем Install для Command Line Tools.
Идём на mercurial.berkwood.com и качаем/ставим текущую версию (Mercurial 2.2.2 for OS X 10.7).
… Windows (XP 32-bit, Seven 32-bit, Seven 64-bit)
Идём на mercurial.selenic.com/downloads и качаем/ставим текущую версию (3.0.1).

А вот с компилятором есть варианты. Напрашивающийся вариант с установкой Visual Studio Express обойдётся в 3 с лишним гига на винте. Альтернативный вариант - поставить WinSDK - обойдётся примерно в 800 мегабайт. Я опишу оба варианта, выбирайте сами.

Первый вариант. Идём на www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express и качаем/ставим/обновляем (по русскому обычаю - трижды:) иначе не все обновления установятся) «Visual C++ 2010 Express».

Второй вариант. Сначала идём на go.microsoft.com/fwlink/?LinkId=187668 и качаем/ставим полный ".NET Framework 4". Потом идём на www.microsoft.com/en-us/download/details.aspx?id=8279 и качаем/ставим «Windows SDK 7.1». При установке достаточно ограничиться этими пунктами:
# Windows Native Code Development: # Windows Headers and Libraries: # [X] Windows Headers # [X] x86 Libraries # [X] Visual C++ Compilers # Redistributable Packages: # [X] Microsoft Visual C++ 2010 (В 2014 у меня SDK отказывался устанавливаться пока я не снёс все Visual C++ 2010 Redistributable - они оказались для него слишком новой версии.) Потом тоже обновляем. На самом деле обновлять, наверное, не обязательно, просто уже вошло в привычку.

Скачиваем и обновляем исходники инферно
Не смотря на то, что на официальном сайте для винды предлагается отдельный архив, а для мака отдельные бинарники, нам это всё не нужно, и даже вредно (архив для винды не обновляется нормально из репозитория - возникают конфликты). Так что под всеми ОС будем устанавливаться из inferno-20100120.tgz. Смысл использовать этот архив вместо простого клонирования репозитория в том, что в архив включены некоторые файлы (в основном шрифты), которые лицензия запрещает выкладывать на Google Code, поэтому в репозитории их нет.
… *NIX
wget http://www.vitanuova.com/dist/4e/inferno-20100120.tgz tar xzf inferno-20100120.tgz cd inferno/ hg pull -uv
… Win
Скачиваем www.vitanuova.com/dist/4e/inferno.zip (его рекомендуют на сайте, но можно взять и.tgz - у меня без проблем собираются и тот и другой).
Распаковываем в C:\inferno\ . Не знаю, что нужно для распаковки.tgz под виндой - у меня стояли Far и 7Zip, распаковывал Far-ом.
Запускаем cmd .
cd \inferno hg pull -uv # если получаем конфликт вроде: merging libinterp/keyring.h warning: conflicts during merge. merging libinterp/keyring.h incomplete! (edit conflicts, then use "hg resolve --mark") merging libinterp/runt.h warning: conflicts during merge. merging libinterp/runt.h incomplete! (edit conflicts, then use "hg resolve --mark") 3038 files updated, 0 files merged, 106 files removed, 2 files unresolved use "hg resolve" to retry unresolved file merges # то просто восстанавливаем последнюю версию: hg revert -r tip libinterp\keyring.h hg revert -r tip libinterp\runt.h Выходим из cmd .
Настраиваем переменные окружения
Единственная реально необходимая переменная - это PATH . В EMU задаются параметры по умолчанию для запуска инферно, она нужна просто для удобства. Что касается INFERNO_ROOT то инферно про неё вообще не знает, эта переменная нам нужна просто для удобства. Помимо установки переменных в текущем сеансе, пропишем их в стартовые скрипты.
… Ubuntu
export INFERNO_ROOT=$(pwd) export PATH=$INFERNO_ROOT/Linux/386/bin:$PATH export EMU=-r$INFERNO_ROOT echo "export INFERNO_ROOT=$INFERNO_ROOT" >> ~/.bashrc echo "export PATH=\$INFERNO_ROOT/Linux/386/bin:\$PATH" >> ~/.bashrc echo "export EMU=-r\$INFERNO_ROOT" >> ~/.bashrc
… FreeBSD
export INFERNO_ROOT=$(pwd) export PATH=$INFERNO_ROOT/FreeBSD/386/bin:$PATH export EMU=-r$INFERNO_ROOT echo "export INFERNO_ROOT=$INFERNO_ROOT" >> ~/.bash_profile echo "export PATH=\$INFERNO_ROOT/FreeBSD/386/bin:\$PATH" >> ~/.bash_profile echo "export EMU=-r\$INFERNO_ROOT" >> ~/.bash_profile
… Mac OS X
export INFERNO_ROOT=$(pwd) export PATH=$INFERNO_ROOT/MacOSX/386/bin:$PATH export EMU=-r$INFERNO_ROOT echo "export INFERNO_ROOT=$INFERNO_ROOT" >> ~/.bash_profile echo "export PATH=\$INFERNO_ROOT/MacOSX/386/bin:\$PATH" >> ~/.bash_profile echo "export EMU=-r\$INFERNO_ROOT" >> ~/.bash_profile
… Win
Идём в: Панель Управления -> Система -> Дополнительные параметры системы (в XP просто «Дополнительно») -> Переменные среды.
Добавляем в конец Path: ;C:\inferno\Nt\386\bin
Создаём новую переменную: INFERNO_ROOT: C:\inferno
Создаём новую переменную: EMU: -rC:\inferno
Настраиваем параметры сборки
Можно отредактировать файл mkconfig вручную во всех ОС, но для простоты я, где возможно, приведу команды автоматически изменяющие конфиг.
… Ubuntu
perl -i -pe "s/^ROOT=.*/ROOT=$ENV{INFERNO_ROOT}/m" mkconfig perl -i -pe "s/^SYSHOST=.*/SYSHOST=Linux/m" mkconfig perl -i -pe "s/^OBJTYPE=.*/OBJTYPE=386/m" mkconfig
В линухе инферно поддерживает IPv6. Более того, оный IPv6 используется по умолчанию. Подходит это вам или нет - решайте сами. Я лично его выключаю:
perl -i -pe "s/ipif6/ipif/g" emu/Linux/emu emu/Linux/emu-g
… FreeBSD
perl -i -pe "s/^ROOT=.*/ROOT=$ENV{INFERNO_ROOT}/m" mkconfig perl -i -pe "s/^SYSHOST=.*/SYSHOST=FreeBSD/m" mkconfig perl -i -pe "s/^OBJTYPE=.*/OBJTYPE=386/m" mkconfig
… Mac OS X
perl -i -pe "s/^ROOT=.*/ROOT=$ENV{INFERNO_ROOT}/m" mkconfig perl -i -pe "s/^SYSHOST=.*/SYSHOST=MacOSX/m" mkconfig perl -i -pe "s/^OBJTYPE=.*/OBJTYPE=386/m" mkconfig
… Win
Редактируем mkconfig:
ROOT=c:/inferno SYSHOST=Nt OBJTYPE=386
Сборка
… *NIX
sh makemk.sh mk nuke mk install # пропустите эту команду на серверах без X-ов и GUI mk CONF=emu-g install
… Win Seven 64-bit
Если вы ставили WinSDK, то нужно сделать новый ярлык на «Windows SDK 7.1 Command Prompt», зайти в его свойства и дописать параметр /x86 - чтобы получилось вот так:
C:\Windows\System32\cmd.exe /E:ON /V:ON /T:0E /K "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x86
Если вы ставили Visual C++ 2010, то я не знаю, как запустить 32-битный компилятор (но возможно это делается примерно так же).
Что делать дальше - описано в следующем пункте для всех версий винды.
… Win
Запускаем «Windows SDK 7.1 Command Prompt» (ну или «Visual Studio Command Prompt (2010)» - смотря что вы устанавливали).
cd \inferno mk nuke mk install

Запуск

Собственно, это всё. Теперь вы можете запустить инферно командой emu или emu-g (вторая отличается тем, что не поддерживает графический режим, но зато будет работать на серверах без X-ов и очень удобна для запуска разных сетевых сервисов). Графическую среду можно увидеть запустив внутри emu команду wm/wm:
$ emu ; wm/wm

;
3. Установка системы и приложения (Вы читаете данный раздел).
От теории - к практике. Операционная система Inferno поставляется в виде исходных текстов, которые можно скачать с официального сайта (http://www.vitanuova.com/inferno/downloads.html) или получить через систему контроля версий Mercurial (в этом случае вы получите более новую и, вероятно, менее стабильную версию системы).

Короткая инструкция по сборке находится в файле INSTALL, а за более детальным описанием можно обратиться к русскоязычной статье: http://inferno.execbit.ru/wiki.wsgi/Установка. К слову, в другом сетевом материале (http://habrahabr.ru/blogs/os inferno/42998) описан не только процесс инсталляции из исходников, но и некоторые первичные настройки, а сайт производителя предлагает подробную документацию (http://www.vitanuova.com/inferno/docs.html) уже на английском языке: полное руководство пользователя, обзор протокола Styx, описание процесса разработки приложений для ОС, документация по Limbo и т.п.

Доступность исходников позволила энтузиастам скомпилировать и запустить Inferno на платформах, поддержка которых официально не заявлена - например, на Android и Nintendo DS (см. рис. ниже).


Запуск Inferno на Nintendo DS


Готовых приложений для Inferno пока немного - система заняла специфическую нишу. Она выступает как платформа для создания узконаправленных распределенных приложений для решения конкретных задач. Существующего набора софта достаточно для комфортной разработки приложений и взаимодействия с сетью.

Для Inferno созданы текстовые редакторы, ряд серверов, клиент электронной почты, браузеры, полный пакет инструментов для разработки ПО, включающий компилятор языка Limbo и библиотеки для него, ассемблер и дизассемблер кода для виртуальной машины Dis, отладчик, профилировщик, генератор синтаксических анализаторов и прочее. Существуют даже несколько простых игр, таких как «Сапер», «Тетрис» и «Змейка».
С довольно подробным списком существующего для Inferno софта (как системного, так и прикладного) можно ознакомиться в Википедии: http://en.wikipedia.org/wiki/List of Inferno applications.

Централизованного хранилища программ для Inferno не существует, да и вообще отмечу, что сторонние приложения для Inferno - явление редкое. Однако, покопавшись на тематических ресурсах, можно кое-что отыскать.

Например, мне удалось найти VNC-просмотрщик, альтернативный менеджер окон, клиент для СУБД MySQL, клиент и сервер NFS, модули поддержки разных файловых систем, компиляторы и интерпретаторы разных языков программирования.

Некоторые разработчики создали серверы с собственным ПО для Inferno, пример тому -ресурс www.ueber.net/code (автор - Mechiel Lukkien).

Выводы



В операционной системе Inferno реализованы многие интересные идеи. Пусть на сегодня каждая из них уже не является уникальной, другого продукта, объединяющего все эти концепции, попросту нет.

Несмотря на малую популярность, в чисто техническом плане Inferno - это, возможно, одна из самых «правильно» реализованных платформ. Причины низкой распространенности банальны: изначально не нацеленная на массы маркетинговая политика, скудный выбор программного обеспечения (и сложность портирования софта, существующего на других платформах), ограниченная поддержка оборудования и многие другие факторы. Впрочем, все это не мешает компании Vita Nuova продавать решения на основе Inferno производителям электроники, разработчикам кластеров и бизнес-приложений.

В общем, Inferno - это, безусловно, интересный проект, демонстрирующий свой взгляд на многие, казалось бы, привычные вещи. Однако существующее программное обеспечение позволяет воспринимать Inferno скорее как платформу для исполнения некоторых специфичных программ или как среду разработки, но не как ОС для повседневного использования.

Поэтому сегодня Inferno вызывает интерес лишь у компьютерных энтузиастов, программистов и редких компаний. Кроме того, Inferno - ценный источник идей, которые могут быть заимствованы для использования в более масштабных и «прикладных» проектах.

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:50, 18 июня 2017.

Inferno OS

Рабочий стол Inferno OS с запущенными программами

Разработчик Vita Nuova Holdings Ltd
OS линейка Потомок Plan 9
Рабочее состояние Active
Исходный код
Начальная версия 1997; 22 years ago (1997 )
Последний релиз 4th Edition / April 2017; 1 year ago (2017-04 )
Целевой маркетинг Desktop
Доступно в
Метод обновления bitbucket
Платформы ARM (ARM32, Thumb), Intel x86 (386 & higher), PowerPC, SPARC
Лицензия Открытый
Предшествующая Inferno 3th Edition
Официальный веб-сайт vitanuova .com

История

В 1995 году компания Lucent Technologies, новый владелец исследовательских лабораторий Bell Labs, перевела многих разработчиков Plan 9 в другую команду, которая занялась созданием операционной системы Inferno, построенной на базе Plan 9. Руководство компании не без оснований полагало, что Plan 9, способная прозрачно и легко работать на компьютерах, организованных в распределенную вычислительную сеть, отлично покажет себя на маломощных мобильных устройствах и терминалах, которые в то время были просто обязаны перекладывать львиную долю своих функций на другие машины, чтобы обеспечить оптимальную производительность и удобство использования.

В результате родилась Inferno, операционная система, вобравшая в себя все преимущества Plan 9 и обладающая рядом уникальных черт. В основе новой ОС лежало урезанное ядро Plan 9 с переработанной графической подсистемой, выше располагалась высокопроизводительная виртуальная машина Dis, предназначенная для исполнения переносимого процессорно-независимого байткода, а в качестве языка прикладного программирования использовался Limbo, высокоуровневый модульный язык со встроенной поддержкой многопоточного программирования. Кроме того, Inferno обладала способностью работать не только на многих процессорных архитектурах, но и быть приложением внутри существующих ОС, таких как Windows, Linux, Solaris, AIX и других.

Происхождение названия

Следует отметить, что названия протокола «9P|Styx», «Inferno», «Limbo» и т. п., а также название компании-разработчика - «Vita Nuova» выбраны под влиянием Божественной комедии Дантe, которую читал Роб Пайк во время работы над оригинальным проектом Inferno в Bell Labs.

Особенности

Простота

  • Наглядная и исчерпывающая документация
  • Малые размеры кода системы
  • Быстро и просто помещается и запускается на различных целевых платформах или операционных системах

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

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

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

  • Байт-код. Один раз компилируем и можем запускать на любой платформе с установленной Inferno, причем приложение будет везде выполняться абсолютно одинаково.
  • В hosted режиме (Inferno запущена поверх другой системы) поддерживаются все популярные OS.
  • В native режиме (Inferno запущена как основная система) поддерживается множество процессоров.

Язык Limbo

  • Параллельное программирование (concurrent programming).
  • Для синхронизации потоков используется развитая идея Hoare"s Communicating Sequential Processes (CSP), что очень сильно упростило программирование.
  • Сильнотипизированный.

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

Видео установки


знакомство с ОС Inferno

Давно мы не расказывали вам о новых операционных системах. А ведь мир не стоит на месте, и рынок ОС вовсе не ограничивается Linux, Windows и *BSD, о которых информация – как в СР, так и в других бумажных и электронных изданиях – появляется с завидной регулярностью.
А тут как раз и повод хороший появился: в новостных лентах промелькнуло сообщение о выходе (и доступности для бесплатного скачивания) 4-й версии ОС с адским (в таком контексте обычно говорят «инфернальным», но в нашем случае выйдет тавтология:) названием Inferno. Но поскольку мы уверены, что по крайней мере половина наших читателей отродясь не слышала об этой ОС, и по сему не знают – радоваться такой новости или нет, мы решили посвятить Inferno целый «полноформатный» материал, за основу которого была взята статья разработчиков этой системы. Кстати, посмотрите на список авторов в конце статьи, уверены -- вы будете приятно удивлены;)

вступление

Операционная система Inferno разработана Центром по Компьютерным Исследованиям Bell Labs, научно-исследовательским подразделением Lucent Technologies. В дальнейшем ее разработку продолжили другие подразделения Lucent, а на сегодняшний день эксклюзивные права на эту систему принадлежат английской софтверной компании Vita Nuova.
Основное назначение системы - создание аппаратно-независимых распределенных вычислительных систем и использование во встраиваемых устройствах.
Inferno предназначена для использования в различном сетевом окружении, например, смартфоны, наладонные КПК, системы кабельного и спутникового телевидения, недорогие интернет-терминалы и, конечно, традиционные компьютерные системы.
Где может с успехом применяться Inferno? В сетях кабельного телевидения, прямого спутникового вещания, Интернет и любых других сетях передачи данных (и мультисервисных, конечно же).
В отличие от телефонных систем с их стандартными терминалами и сигналами, компьютерные сети разрабатываются в мире различных терминалов, сетевого оборудования и протоколов. Только хорошо разработанная, экономичная операционная система может объединить различных провайдеров контента и сервиса на различных транспортных и презентационных платформах. Как вы могли догадаться, Inferno – именно такая операционная система;)
Преимущества Inferno основываются на портируемости и гибкости в следующих направлениях:
- поддержка процессоров: в настоящее время поддерживаются Intel, Sparc, MIPS, ARM, HP PA, PowerPC, готовится поддержка других процессоров.
- поддержка различного окружения: Inferno работает как отдельная система на малых терминалах, также запускается как пользовательский процесс на Windows NT, Windows 95, Unix (Irix, Solaris, FreeBSD, Linux, AIX, HP/UX)и Plan 9. Во всех этих случаях приложения Inferno имеют одинаковый интерфейс.
- распределенная структура: идентичные окружения устанавливаются на пользовательском терминале и на сервере, каждый может импортировать ресурсы (например, доступные устройства ввода/вывода или сети) другого. Благодаря коммуникационным возможностям системы приложения могут быть легко разделены (даже динамически) между клиентом и сервером.
- минимальные требования к оборудованию: самостоятельные приложения работают на компьютере с 1 МВ памяти и не нуждаются в контроллере памяти.
- портируемость приложений: Inferno приложения написаны на типизированном языке Лимбо, и двоичное представление, генерируемое компилятором, идентично для всех платформ.
- динамическая адаптация: приложения могут, в зависимости от оборудования или других доступных ресурсов, использовать различные программные модули для выполнения специфических функций. Например, видеоплеер может использовать различные модули декодера.
В основе структуры Inferno лежит модель, предполагающая большое различие области приложений, которые должны использоваться. Многие провайдеры заинтересованы в предоставлении медиа и других сервисов: телефонный сервис, www-сервис, кабельное телевидение, торговля, различные информационные службы. Также существует много технологий связи: обычные телефонные модемы, ISDN, АТМ, Интернет, аналоговое эфирное или кабельное телевидение, кабельные модемы, цифровое видео и интерактивное телевидение.
Приложения, отвечающие текущим и будущим потребностями Lucent, связаны с управлением свитчами и маршрутизаторами. Также отметим, что внутреннюю сеть и серверы Bell Labs защищают файрволлы, основанные на Inferno.
Inferno очень бережно относится к ресурсам, что позволяет поддерживать достаточно сложные приложения на сегодняшнем оборудовании. В частности, система позволит разработчикам создавать прикладные приложения, работающие на разных устройствах. Возьмем, для примера, интерактивный покупательский каталог: возможность работы в текстовом режиме через аналоговый модем, показ картинок (возможно даже с аудио) товаров через ISDN и показ видеоклипов через цифровой канал.
Конечно, никто не заставляет вас как разработчика использовать все возможности и функции Inferno, но следует помнить - архитектура системы ограничена только требованиями и фантазиями заказчика, доступными сетевыми каналами и серверными технологиями, но не софтом.

интерфейсы Inferno

Роль системы Inferno заключается в создании нескольких стандартных интерфейсов для своих приложений:
1. Приложения используют различные внутренние ресурсы системы, такие, как виртуальная машина, которая запускает программы и модули библиотек для выполнения различных действий от простых, таких как манипуляция строками, до более сложных (работы с текстом, изображениями, высокоуровневыми библиотеками или видео).
2. Приложения существуют во внешнем окружении, которое содержит такие ресурсы, как файлы с данными, которыми можно манипулировать, и именованными объектами, которыми можно манипулировать подобно файлам, но более интенсивно. Устройства (пульт дистанционного управления, MPEG-декодер или сетевой интерфейс) представлены для приложений, как файлы.
3. Существуют стандартные коммуникационные протоколы для взаимодействия приложений как в рамках одного хоста, так и между разными хостами, на которых запущена Inferno. Таким образом Inferno-приложения могут эффективно кооперироваться.
В то же время Inferno использует интерфейсы, предоставляемые существующим окружением, таким как имеющееся оборудование или протоколы и системные вызовы операционной системы.
Типичный сервис, основанный на Inferno, состоит из множества относительно дешевых терминалов, на которых запущена Inferno как родная ОС и меньшего количества больших машин (серверов), где Inferno работает в качестве гостевой системы. На таких серверных машинах Inferno может предоставлять доступ к базе данных, транзакционной системе или другим ресурсам, предоставляемым родной операционной системой. Inferno-приложения могут быть запущены на клиентской системе, или на сервере, или на обоих.

внешнее окружение Inferno-приложений

Назначение большинства приложений Inferno - это предоставление информации или медиа данных пользователю. Такие приложения должны обнаружить местонахождение ресурса в сети и конструировать локальное представление этих данных на пользовательском устройстве. Однако большинство информационных потоков не являются односторонними: пользовательский терминал (будь то сетевой компьютер, телевизор, персональный компьютер или видеофон) также является источником некоторой информации и должен предоставлять эту информацию приложениям. Inferno во многом повторяет структуру Plan9 (родственная операционная система, также разработанная Bell Labs) в способе представления ресурсов приложениям. Эта структура следует трем принципам:
1. Все ресурсы являются именоваными и доступны в виде файлов в дереве иерархической файловой системы;
2. Раздельные иерархии ресурсов, предоставляемые различными сервисами, объединяются в одно локальное именованое пространство;
3. Коммуникационный протокол Styx используется для унификации доступа к ресурсам, локальным или удаленным.
На практике большинство приложений видят набор файлов, организованных в дерево директорий. Некоторые файлы содержат обычные данные, другие представляют собой более активные ресурсы. Устройства представлены как файлы, драйверы устройств (таких, как модем, MPEG-декодер, сетевой интерфейс или телевизионный экран) присоединенных к системе, представлены как малые директории. Эти директории обычно содержат два файла:data и ctl, которые, соответственно, определяют операции ввода/вывода и управления устройством. Системные сервисы также доступны через именованные файлы. Например, нэймсервер может быть доступен с помощью определенного имени, скажем /net/dns; после записи в этот файл доменного имени хоста, последующее чтение возвращает соответствующий IP-адрес в цифровой нотации.
Клей, который соединяет отдельные части именованого пространства имен, - это протокол Styx. В Inferno все драйверы устройств и другие внутренние ресурсы отвечают процедурной версии Styx.
Ядро Inferno содержит так называемый «драйвер монтирования», который преобразует операции файловой системы в удаленные вызовы процедур для передачи их по сети. На другом конце соединения, сервер считывает сообщения протокола Styx и реализует соответсвующие вызовы, используя локальные ресурсы. Таким образом, становится возможным импортировать часть именованого пространства (то есть доступные ресурсы)с других машин.
Расширяя приведенный выше пример: маловероятно, чтобы конечное устройство хранило код сервера имен у себя. Вместо этого, интернет браузер импортирует ресурс /net/dns прямо в собственное пространство имен с сервеpной машины в сети.
Протокол Styx находится уровнем выше и независит от транспортного протокола; он работает поверх ТСР, РРР, АТМ или различных модемных про токолов.

внутреннее окружение приложений Inferno

Inferno-программы написаны на новом языке Limbo, который создан специально для работы в Inferno. Его синтаксис навеян С и Pascal, и он поддерживает общие для этих языков стандартные типы данных и несколько высокоуровневых типов данных, таких, как списки, кортежи, строки, динамические массивы и простые абстрактные типы данных.
Кроме того, Limbo поддерживает несколько сложных конструкций, внедренных в виртуальную машину Inferno. В частности, коммуникационный механизм, channel (канал), который используется для взаимодействия различных задач Limbo на локальной машине или через сеть. Через канал передаются данные машинонезависимым способом, таким образом сложные структуры данных, включая сами каналы, могутбыть переданы между задачами Limbo или присоединены к файлам именованого пространства для взаимодействия между компьютерами на уровне языка.
Многозадачность поддерживается непосредственно языком Limbo: могут порождаться независимые потоки и для координации канального соединения между задачами используется выражение alt (т. е. alt используется для выбора одного из нескольких каналов, готовых для взаимодействия). Путем встраивания каналов и задач в язык и его виртуальную машину, Inferno представляет легкий для использования и безопасный способ взаимодействия.
Программы Limbo состоят из модулей, которые являются упакованными контейнерами с определенным интерфейсом в виде функций/методов, абстрактных типов данных и констант, определяемых внутри модуля и доступных извне. Модули доступны динамически, то есть если один модуль хочет использовать другой, то динамически вызвается load с именем вызваемого модуля и возвращается указатель на новый модуль. Когда новый модуль больше не используется, его окружение и код будут выгружены.
Гибкостью модульной структуры обусловлены небольшие рзмеры типичного Inferno-приложения. Например, в торговом каталоге, описанном выше, основной модуль приложения динамически проверяет наличие видеоресурса, и если ресурс недоступен, то видеодекодер не подгружается.
Limbo полностью проверяет правильность типов данных во время компиляции и исполнения, например, указатели (кстати более строгие, чем в С) проверяются перед использованием. Соответствие типов подгружаемого динамически модуля проверяется при загрузке. Limbo-приложения стабильно работают на машине без аппаратной защиты памяти.
Более того, все объекты системных данных и программные объекты контролируются "мусороуборщиком", жестко встроенным в Limbo. Все такие объекты отслеживаются виртуальной машиной и выгружаются после использования. Например, если приложение создает графическое окно и заканчивает свою задачу, то такое окно автоматически закрывается после того, как будут удалены все ссылки на этот объект.
Программы Limbo скомпилированны в байт-код, который содержит инструкции для виртуальной машины Dis. Архитектура арифметической части Dis представляется собой простую 3-адресную машину, обеспеченную несколькими специализированными операциями для работы с некоторыми высокоуровневыми типами данных, такими как массивы и строки. Сбор мусора выполняется ehjdytv ниже, аналогично скрыта и планировка задач. Когда байт код подгружается в память, то он разворачивается в более эффективный для исполнения формат. Существующий компилятор на лету преобразует поток инструкций Dis в машинные инструкции для аппаратного обеспечения. Такое преобразование эффективно благодаря тому, что команды Dis очень хорошо соответствуют наборам инструкций современных архитектур. Результирующий код выполняется со скоростью, сравнимой со скоростью компилированных программ С.
Уровнем ниже, чем Dis, находится ядро Inferno, которое содержит интерпретатор и компилятор реального времени, также как менеджер памяти, планировщик, драйверы устройств, стеки протоколов и тому подобное. Ядро также содержит основу файловой системы (обработчик имен и код, преобразующий операции файловой системы в удаленные вызовы процедур через существующие коммуникационные каналы).
Наконец, виртуальная машина Inferno реализует внутри себя несколько стандартных модулей. Модуль Sys, который обеспечивает системные вызовы и небольшую библиотеку подпрограмм (создание сетевых соединений, строковые операции). Модуль Draw - это основная графическая библиотека, которая работает с растрировой графикой, шрифтами и окнами. Модуль Prefab построен на Draw для поддержки структурированных комплексов, содержащих изображения и текст внутри окна. Эти объекты могут быть прокручены, выбраны, изменены с использованием методов Prefab. Модуль Тk - это новая реализация графической библиотеки Тk и интерфейсом Limbo. Модуль Math содержит процедуры программирования математических операций.

среда Inferno

Inferno создает стандартное окружение для приложений. Одно и то же приложение может быть запущено в различных типах окружения, в том числе распределенном, и увидеть идентичные ресурсы. В зависимости от окружения, в котором запущена сама Inferno, существует несколько версий ядра, Dis/Limbo-интерпретатора, наборов драйверов устройств.
Когда Inferno запущена в качестве единственной операционной системы, ядро включает в себя все необходимые низкоуровневые части (обработчики прерываний, графические и другие драйверы), которые необходимы для воплощения высокоуровневых абстракций для приложений.
В качестве гостевой системы, например под Unix или Windows, Inferno работает, как набор обычных процессов. Вместо использования собственных возможностей для управления оборудованием, Inferno использует ресурсы, предоставляемые операционной системой, под которой работает. Например, под Unix, графическая библиотека может быть реализована с использованием ХWindow, а сетевая поддержка с использованием библиотеки сокетов. В Windows Inferno использует родную графическую систему и вызовы Winsock.
Inferno написа на на стандартном языке С и большинство ее компонентов независимы от операционных систем, которые могут хостить Inferno.

безопасность в Inferno

Inferno обеспечивает безопасность коммуникаций, использования ресурсов и системной целостности.
Через каждый внешний канал данные передаются в открытом виде вместе с цифровым дайджестом для предотвращения порчи, либо зашифроваными, для предотвращения порчи и перехвата данных. Обмен ключами происходит через стандартный механизм публичных ключей. После обмена ключами шифрование и цифровые подписи используют стандартный симметричный механизм.
Inferno обеспечивает защиту от плохо написанных приложений (с ошибками или злонамеренными «отклонениями») и предоставляет возможность защищенного взаимодействия между «подозрительными» сервис-провайдерами и клиентами. Ресурсы, необходимые программе, предоставляются эксклюзивно, только в пространстве имен программы, также доступны стандартные механизмы защиты. Это относится к данным, коммуникационным каналам и собственно исполняемым файлам и библиотекам. Критические ресурсы системы доступны только через вызов модуля, который их предоставляет, в частности, добавление новых файлов и сервисов в именованое пространство контролируется и возможно только после аутентификации. Например, если сетевой ресурс удален из именованого пространства приложения, то для него становится невозможным установить сетевое соединение.
Объектные модули могут быть подписаны для подтверждения их подлинности и действительности, эти подписи могут быть проверены системой при доступе к таким модулям.
Хотя Inferno обеспечивает большое количество механизмов аутентификации и защиты, подробно описанных ниже, немного приложений требуют их реализации, по крайней мере требовать какого-то программирования для использования их.
Чаще доступ к ограниченым ресурсам через безопасный канал заранее организуется системой, в которой запущено приложение. Например, когда клиентская система использует серверную систему и проверка доступа и шифрование доступны, серверные ресурсы будут предоставлены, как часть именованого пространства приложения. Коммуникационный канал, который предоставляет протокол Styx, может быть установлен для аутентификации или шифрования. Таким образом, использование всех ресурсов автоматически защищено.

механизмы безопасности

Аутентификация и цифровые подписи представлены шифрованием с использованием открытых ключей. Публичные ключи сертифицирваны и подписаны приватными ключами организации, выдавшей сертификат.
Inferno использует шифрование для:
- постоянной аутентификации сторон;
- аутентификации сообщений между сторонами;
- шифрования сообщений.
Алгоритмы шифрования, предоставляемые Inferno, включают SHA, MD4, и MD5-хеши. публичные подписи и подтверждение подписей Elgamal, RC4- и DES-шифрование. Обмен пуб личными ключами основан на схеме Diffie Hellman. Подписи публичных ключей могут иметь длину до 4096 бит, по умолчанию 512 бит.
Не существует всеобщих национальных или международной организации для хранения или генерации публичных или приватных ключей шифрования. Поэтому Inferno включает инструмент для использования или создания доверенной организации, но не предоставляет такой организации самостоятельно, потому что это административная функция. Таким образом, организация используящая Inferno (или другую систему для защиты и обмена ключами) должна создать собственную систему для своих нужд и, в частности, решить, кому доверить сертификацию. Однако структура Inferno достаточно гибка и модульна для применения протоколов, используемых на практике.
Сертификационная организация, которая подписывает пользовательские публичные ключи, определяет размер ключа и алгоритм. Средства, предоставляемые Inferno, используют эти подписи для аутентификации. Для подписи и верификации Limbo-приложениям предоставляется библиотека интерфейсов.
Когда стороны обмениваются данными, они используют протокол Station to Station для идентификации сторон и для создания секретного ключа. Station to Station протокол использует алгоритм Diffie-Hellman для создания такого совместного секретного ключа. Протокол защищен от повторных атак выбором новых значений для каждого взаимодействия. Протокол безопасен для атак "man in the middle" за счет обмена сторонами сертификатами и затем подписанными ключевыми частями протокола. Для маскировки в качестве другой стороны атакующему необходимо имитировать подпись этой стороны.

безопасность линии

Сетевое взаимодействие может быть защищено от модификации или модификации и прослушивания. Для защиты от модификации Inferno может применять MD5- или SHA-хеш (называемый дайджест) -

hash(secret, message, messageid)

для каждого сообщения. Messageid - это 32 номер, который начинается с 0 и увеличивается на 1 для каждого следующего сообщения. То есть сообщение не может быть ни изменено, ни удалено, не может быть изменена очередность сообщений в потоке, только при условии наличия ключа или взлома алгоритма хеша.
Для защиты от прослушивания Inferno использует шифрование всего сеанса используя RC4 или DES (DESCBC, DESECB).
Inferno использует тот же формат инкапсуляции, что и Netscape"s Secure Sockets Layer. Возможна множественная инкапсуляция потока сообщений для предоставления различных уровней защиты.

случайные числа

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