Прошлое и настоящее
Опубликовано 2024-10-31. Последние изменение 2024-11-05.
С момента разработки **UNIX**, программисты **Bell Labs** не сидели сложа руки.
Их следующим детищем стала распределенная операционная система **Plan 9**.
К середине 80-х годов наметилась тенденция отхода от больших централизованных компьютеров, работающих в режиме разделения времени, на сети из небольших персональных машин **[как правило, из рабочих UNIX-станций]**.
Пользователи стремились перейти на небольшие системы, которые могли поддерживать сами не смотря потерю в вычислительной мощности.
Микрокомпьютеры становились быстрее и дешевле, и эти потери компенсировались.
Такой стиль вычислений остается достаточно популярным и в наши дни.
При переносе **UNIX** на персональные рабочие станции, однако, не были учтены некоторые имеющиеся недостатки и проблемы.
Операционная система **UNIX** была старой, монолитной и работала в режиме разделения времени.
Возможности ее адаптирования к новым технологиям, появившимся позже, были весьма ограничены.
Графические и сетевые возможности были добавлены к **UNIX** еще в период её расцвета и были плохо интегрированными архитектурно и, как следствие, ими было трудно управлять.
И самое важное, ранняя ориентация на персональные машины сделала невозможной беспроблемную работу сетей, характерную для старых монолитных систем с разделением времени.
Разделение времени и централизация управления позволяли амортизировать затраты для больших машин.
Но при появлении персональных вычислений до предела обострились проблемы администрирования.
Выбор старой операционной системы с разделением времени для работы на этих персональных машинах был бы неоправдан.
Было решено создать ОС, более приспособленную к вызовам времени.
При этом преследовались две цели:
- система, построенная из дешёвых современных микрокомпьютеров, должна была управляться централизованно;
- и при этом быть недорогой.
Идея заключалась в том, чтобы при построении вычислительной системы использовать не только рабочие станции.
Компьютеры должны соответствовать своей роли: маленькие дешёвые машины в офисах могли бы служить терминалами, обеспечивая доступ к большим, центральным, совместно используемым ресурсам, таким как вычислительные и файловые серверы.
Очевидными кандидатами на роль центральных машин представлялись появившиеся недавно многопроцессорные системы.
Проектом занялось специализированное подразделение **Bell Labs**, известное как **"Исследовательский центр компьютерных наук" (CSRC)**.
Фактически разработку вела та же команда, которая изначально трудилась над **UNIX** и языком программирования **С**: Кен Томпсон, Деннис Ритчи, Роб Пайк, Дэйв Пресотто и Фил Уинтерботт.
Да и концепцию было решено оставить прежнюю, максимально развив её.
Название ОС её создателям навеял трешёвый фильм ужасов **"План 9 из открытого космоса"** режиссёра Эдварда Вуда.
Маскот ОС - зайчиха **Гленда** - была названа в честь киноленты **"Глен или Гленда"** того же режиссёра.
Этим же именем в **Plan 9** нарекли пользователя по умолчанию.
"“Смотрите, у этого кролика злобный нрав шириной в милю! Это убийца!” – Тим Чародей" Гленда
К 1989 году система стала настолько устойчивой, что ее начали использовать в качестве единственной среды вычислений в лаборатории.
Это означало необходимость перенести многие службы и приложения, которые ранее применялись в **UNIX**.
Исследователи использовали эту возможность, чтобы пересмотреть многое в архитектуре ОС.
Многие из старых утилит были опущены, а те, что оставлены, написаны заново или отлажены.
Почему было необходимо пересмотреть всё до основания?
Различия между операционной системой, библиотекой и приложением важны для исследователей операционных систем, но неинтересны для пользователей.
Для них значение имеет только функциональность.
Создавая полностью новую систему, они смогли решить многие проблемы, которые должны были быть решены.
Например, в ядре отсутствует драйвер **tty**.
Он является результатом работы оконной системы в пространстве пользователя.
В современном мире вычислительные системы, в силу необходимости, являются многоархитектурными и составлены из продуктов разных поставщиков.
Однако обычные компиляторы и утилиты предполагают, что программа должна быть построена для работы в локальной среде.
Важнее, однако, то, что определенным тестом для системы служит операционная среда, которую она предоставляет.
Обеспечение большей эффективности при работе старых программ - "рабочих лошадок" **UNIX** - было только делом техники.
Гораздо более исследователи были заинтересованы в том, чтобы новые идеи, предлагаемые архитектурой новой системы, способствовали повышению эффективности работы.
Таким образом, хотя **Plan 9** обеспечивает среду эмуляции для выполнения команд **POSIX**, это не главное в системе.
Большая часть системного ПО разработана в нативной среде **Plan 9**.
Полностью обновленная система, безусловно, обладала определенными преимуществами.
Лаборатория имела опыт разработки контроллеров экспериментальных периферийных устройств.
Для того чтобы облегчить написание их драйверов, они хотели иметь систему, которая была бы доступна в виде исходных текстов **[чего уже не могла гарантировать UNIX, даже в лаборатории, где она родилась]**.
Кроме того, они хотели перераспределить работу.
ПО должно было создаваться децентрализованно. **[напомню, git со товарищи ещё даже не задумывался, не говоря уже про CI/CD]**
Например, они могли бы использовать для системы компиляторы **С** некоторых поставщиков.
Но, даже если бы они преодолели проблемы с кросс-компиляцией, у них возникли бы трудности с перераспределением результата этой работы.
Базовая концепция **Plan 9** в том, что это - распределенная операционная система, не похожая на **UNIX**.
В ней сетевая функциональность расширена такими механизмами, как удаленный вход в систему и сетевая файловая система.
В **Plan 9** сетевая поддержка встроена в функционал ОС.
Например, все ресурсы, теоретически, могут быть прозрачно распределены в сети **Plan 9**.
Система скрывает от пользователя, что ресурсы не являются локальными.
Система была построена на трех принципах:
- Во-первых, ресурсы именуются и к ним можно получить доступ как к файлам в иерархической файловой системе;
- Во-вторых, имеется стандартный протокол, называемый **9Р**, для доступа к этим ресурсам;
- И, наконец, несвязанные иерархии, обеспечиваемые различными службами, соединяются вместе в единое личное иерархическое пространство имен файлов.
Необычные свойства **Plan 9** обусловлены целенаправленным последовательным применением этих принципов.
Опираясь на огромную коллекцию дополнений, **UNIX** впитывал в себя все больше изменений, которые шли вразрез с с этим исходным, основополагающим принципом.
Примером этого является ужасный механизм сокетов, используемый для функций чтения и записи сетевых ресурсов, отличный от обычных файлов.
Например, `/net/tcp` и `/net/udp` для сетевых интерфейсов.
Большинство системных служб также следуют серверному принципу.
В **Plan 9**, например, нет обычной программы `ftp`.
Вместо этого `ftpfs` монтирует **FTP-сервер** в каталог `/n/ftp`.
Сервер `9660fs` ответственен за монтирование CD дисков.
Хотя **Plan 9** изначально предназначалась для работы с традиционными файлами, ее идеи были распространены и на многие другие ресурсы.
Службы по экспорту иерархий файлов включают устройства ввода/вывода, резервного копирования, оконную систему, сетевые интерфейсы и многое другое.
Модель файловой системы хорошо понятна как разработчикам систем, так и обычным пользователям, так что службы, имеющие файлово-подобные интерфейсы легко построить, понять и использовать.
Файлы поступают со знакомыми, унифицированными правилами защиты, именования и доступа (как локального, так и удаленного).
Поэтому службы, построенные таким образом, готовы для использования в распределенных системах.
В этом заключается отличие от объектно-ориентированных моделей, где с этими аспектами приходится заново иметь дело для каждого класса объектов.
В последующих статьях будут приведены примеры, иллюстрирующие эти идеи на практике.
Одним из примеров может быть команда файловой системы `/proc`, которая обеспечивает ясный способ исследования текущих процессов и управления ими.
Прекурсорные системы имеют в основе подобную же идею[^3], однако в **Plan 9** метафора файлов развита много дальше[^4].
П��зже `/proc` была интегрирована и в **GNU/Linux**.
В **Plan 9** основную сетевую функциональность осуществляет протокол **9P**, в состав которого входит около 30 управляющий сообщений.
Реализация **9P** в **GNU/Linux** была добавлена в основное ядро начиная с версии **2.6.14**, этим были устранены любые препятствия во взаимодействии **GNU/Linux** и **Plan 9**.
Протокол **9Р** структурирован как набор транзакций, каждая из которых посылает запрос от процесса клиента локальному или удаленному серверу и возвращает результат.
Он включает процедуры для различения имен файлов и преобразования иерархии имен файловой системы, предоставляемой сервером.
С другой стороны, в отличие от таких систем, как Sprite[^5], пространство имен пользователя поддерживается только системой клиента, а не на сервере или с его помощью.
Кроме того, доступ к файлам происходит на уровне байтов, а не блоков, что отличает **9Р** от таких протоколов, как **NFS** и **RFS**.
Обычная инсталляция **Plan 9** состоит из ряда компьютеров, соединенных в сеть и предоставляющих каждый услуги определенного класса.
Совместно используемые многопроцессорные серверы обеспечивают выполнение вычислительных циклов.
Другие большие машины служат хранилищами файлов.
Эти машины были расположены в помещении с кондиционированием воздуха и соединены высокопроизводительной сетью.
Сети с меньшей пропускной способностью, такие как **Ethernet**, соединяют эти серверы с офисными или домашними рабочими станциями или ПК, называемыми в терминологии **Plan 9** терминалами.
Современный стиль вычислений предполагает наличие для каждого пользователя выделенной рабочей станции или ПК.
Хотя она может функционировать и на рабочей станции с файлами, хранящимися на локальном диске, такая конфигурация не является канонической.
Вместо этого машины с мониторами, клавиатурами и мышами получают доступ к большинству вычислительных ресурсов и систем хранения по сети, становясь терминалами системы, подобно терминалам старой системы с разделением времени.
При использовании **Plan 9** терминал временно персонализируется этим пользователем.
Принцип построения аппаратуры под пользователя здесь не работает.
Эта подстройка сопровождается приданием публично видимым ресурсам в сети локальных персональных имен.
Так как наиболее важными ресурсами сети являются файлы, модель этого представления ориентирована на файлы.
Локальные пространства имен предоставляют способ реализации представления сети "под себя".
Все службы, доступные в сети, экспортируют иерархии файлов.
Те из них, которые важны для пользователя, собираются вместе в личное пространство имен.
Не представляющие в данное время интереса игнорируются **[этот подход тяжело осознать, но он это одна из важнейших концепций, реализованных в системе]**.
Этот стиль использования отличается от однородного глобального пространства имен в **UNIX**.
В **Plan 9** имеются известные имена для служб и унифицированные имена для файлов, экспортированных этими службами, однако их представление полностью локально.
Примером может служить разница между словосочетанием "мой дом" и четко сформулированным точным адресом.
Последний может быть использован каждым, тогда как первое используется только в разговорной речи: смысл фразы меняется в зависимости от того, кто и когда ее произносит, однако она считается понятной.
Подобным образом в **Plan 9** имя `/dev/mouse` всегда относится к мыши, а `/bin/date` - это команда вывода даты, но то, какие файлы эти имена представляют, зависит от обстоятельств, например, от архитектуры машины, исполняющей команду `date`.
Именно эти соглашения гарантируют разумное поведение при наличии локальных имен.
Но до недавнего времени исходный код находился под коммерческой лицензией, связывавшей разработчиков и пользователей.
Лицензия смягчалась из года в год, и в 2003 году **Plan 9** был наконец-то выпущен под первой свободной лицензией.
Коммерческая ветвь, известная как **Inferno**, теперь также доступна под бесплатной лицензией.
Это форк **Plan 9**, над которым с 2011 года трудится коллектив разработчиков из сообщества **NineTimes**.
В нём состоят поклонники оригинальной ОС от **Bell Labs**.
Одной из главных проблем оригинальной **Plan 9**, тормозившей развитие системы, было отсутствие драйверов и слабая поддержка периферийного оборудования.
Это было обусловленно однородностью оборудования в лаборатории.
Именно эту проблему постарались решить разработчики **9front**.
Они написали для ОС драйверы **USB**, **Wi-Fi**, аудиокарт, игровые эмуляторы **[можно запустить DOOM]**.
Форк распространялся под той же открытой лицензией **Lucent Public License**, что и **Plan 9**.
На данный момент распространение ведётся под лицензией **MIT**.
Создатели **9front** разместили в сети репозиторий пакетов, значительно облегчающий установку компонентов системы.
В форке был полностью переписан загрузчик.
Он называется **9boot** и отличается использованием **rc**-скриптов, которые позволяют получить доступ к **shell** на любом этапе загрузки **[что может пригодиться, если что-то пошло не так]**.
В **9front** основной ФС является **cwfs (cwfs64x)** - это тоже файловая система из **Plan 9**, которая поддерживает шифрование дисковых разделов, а также позволяет безопасно хранить резервные копии компонентов ОС и пользовательских данных.
В **9front** добавлен компилятор языка программирования **Go**.
Также в комплект поставки был добавлен простой текстовый редактор **hold**.
Для обновления ОС используется распределённая система контроля версий **Git**.
С целью более гибкой поддержки оборудования была внедрена подсистема инициируемых сообщениями прерываний **MSI (message signalled interrupts)**.
Система регулярно обновляется, последняя актуальная версия вышла 28 апреля 2024 года[^6].
Попробовать **9front** можно на виртуальной машине, либо установив на ПК или одноплатный компьютер.
Да, для повседневного использования она, конечно, мало пригодна.
Как и **Plan 9**, **9front** - это всё ещё экспериментальная, исследовательская ОС.
Основная цель создания была воплотить в жизнь некоторые первоначальные задумки **UNIX** и реализовать их на более совершенной и современной аппаратной платформе.
Это в целом удалось.
В исследовательских лабораториях **Plan 9** довольно эффективно использовался в качестве платформы для распределённых вычислений.
Как минимум, **Plan 9** и **9front** доказали, что базовая концепция **UNIX** - каждый системный интерфейс может быть представлен в виде набора файлов - вполне успешно реализуется и в современной ОС.
Как и другие форки **Plan 9**, среди которых следует отметить **9atom**, **Harvey OS** и **Jehanne OS**, **9front** - это ОС для программистов и инженеров.
Для тех, кому больше по душе копаться в конфигах и писать собственный код, чем запускать чужой.
Создатели форка непрерывно работают над улучшением аппаратной поддержки и разработкой новых драйверов.
Имеют их усилия и практическое применение: например, на принципах, схожих с архитектурой **Plan 9**, работает протокол **ATA over Ethernet**, созданный для кластеров **NAS**.
С появлением и развитием интернета вещей и одноплатных компьютеров, имеющих ограниченную производительность, востребованность распределённых ОС, которые позволяют гибко перераспределять вычислительные ресурсы в сети и обеспечивать их балансировку, наверняка будет расти.
А значит, у этого проекта есть будущее.
[2] Plan 9 Inferno-like registry server
[6] 9FRONT “DO NOT INSTALL” RELEASED
© 2024 POLYSERV BY MODERN HOME