История Plan 9
[UPD: ]Прошлое и настоящее
С момента разработки UNIX, программисты Bell Labs не сидели сложа руки. Их следующим детищем стала распределенная операционная система Plan 9.
Предпосылки
К середине 80-х годов наметилась тенденция отхода от больших централизованных компьютеров, работающих в режиме разделения времени, на сети из небольших персональных машин [как правило, из рабочих UNIX-станций]. Пользователи стремились перейти на небольшие системы, которые могли поддерживать сами не смотря потерю в вычислительной мощности. Микрокомпьютеры становились быстрее и дешевле, и эти потери компенсировались. Такой стиль вычислений остается достаточно популярным и в наши дни.
При переносе UNIX на персональные рабочие станции, однако, не были учтены некоторые имеющиеся недостатки и проблемы. Операционная система UNIX была старой, монолитной и работала в режиме разделения времени. Возможности ее адаптирования к новым технологиям, появившимся позже, были весьма ограничены. Графические и сетевые возможности были добавлены к UNIX еще в период её расцвета и были плохо интегрированными архитектурно и, как следствие, ими было трудно управлять.
И самое важное, ранняя ориентация на персональные машины сделала невозможной беспроблемную работу сетей, характерную для старых монолитных систем с разделением времени. Разделение времени и централизация управления позволяли амортизировать затраты для больших машин. Но при появлении персональных вычислений до предела обострились проблемы администрирования. Выбор старой операционной системы с разделением времени для работы на этих персональных машинах был бы неоправдан.
Начало
Было решено создать ОС, более приспособленную к вызовам времени. Plan 9 зародилась в конце 1980-х годов, как новая система, призванная решить проблемы UNIX, которые разработчики посчитали “слишком глубокими для того, чтобы исправлять”. При этом преследовались две цели:
- система, построенная из дешёвых современных микрокомпьютеров, должна была управляться централизованно;
- и при этом быть недорогой.
Идея заключалась в том, чтобы при построении вычислительной системы использовать не только рабочие станции. Компьютеры должны соответствовать своей роли: маленькие дешёвые машины в офисах могли бы служить терминалами, обеспечивая доступ к большим, центральным, совместно используемым ресурсам, таким как вычислительные и файловые серверы. Очевидными кандидатами на роль центральных машин представлялись появившиеся недавно многопроцессорные системы.
Проектом занялось специализированное подразделение Bell Labs, известное как “Исследовательский центр компьютерных наук” (CSRC). Фактически разработку вела та же команда, которая изначально трудилась над UNIX и языком программирования С: Кен Томпсон, Деннис Ритчи, Роб Пайк, Дэйв Пресотто и Фил Уинтерботт. Да и концепцию было решено оставить прежнюю, максимально развив её.
Название ОС её создателям навеял трешёвый фильм ужасов “План 9 из открытого космоса” режиссёра Эдварда Вуда. Маскот ОС - зайчиха Гленда - была названа в честь киноленты “Глен или Гленда” того же режиссёра. Этим же именем в Plan 9 нарекли пользователя по умолчанию.
К 1989 году система стала настолько устойчивой, что ее начали использовать в качестве единственной среды вычислений в лаборатории. Это означало необходимость перенести многие службы и приложения, которые ранее применялись в UNIX. Исследователи использовали эту возможность, чтобы пересмотреть многое в архитектуре ОС. Plan 9 имела новые компиляторы, языки, библиотеки, оконные системы и разнообразные новые приложения. Многие из старых утилит были опущены, а те, что оставлены, написаны заново или отлажены.
Почему было необходимо пересмотреть всё до основания? Различия между операционной системой, библиотекой и приложением важны для исследователей операционных систем, но неинтересны для пользователей. Для них значение имеет только функциональность. Создавая полностью новую систему, они смогли решить многие проблемы, которые должны были быть решены. Например, в ядре отсутствует драйвер tty. Он является результатом работы оконной системы в пространстве пользователя. В современном мире вычислительные системы, в силу необходимости, являются многоархитектурными и составлены из продуктов разных поставщиков. Однако обычные компиляторы и утилиты предполагают, что программа должна быть построена для работы в локальной среде. Важнее, однако, то, что определенным тестом для системы служит операционная среда, которую она предоставляет. Обеспечение большей эффективности при работе старых программ - “рабочих лошадок” UNIX - было только делом техники. Гораздо более исследователи были заинтересованы в том, чтобы новые идеи, предлагаемые архитектурой новой системы, способствовали повышению эффективности работы. Таким образом, хотя Plan 9 обеспечивает среду эмуляции для выполнения команд POSIX, это не главное в системе. Большая часть системного ПО разработана в нативной среде Plan 9.
Полностью обновленная система, безусловно, обладала определенными преимуществами. Лаборатория имела опыт разработки контроллеров экспериментальных периферийных устройств. Для того чтобы облегчить написание их драйверов, они хотели иметь систему, которая была бы доступна в виде исходных текстов [чего уже не могла гарантировать UNIX, даже в лаборатории, где она родилась]. Кроме того, они хотели перераспределить работу. ПО должно было создаваться децентрализованно. [напомню, git со товарищи ещё даже не задумывался, не говоря уже про CI/CD] Например, они могли бы использовать для системы компиляторы С некоторых поставщиков. Но, даже если бы они преодолели проблемы с кросс-компиляцией, у них возникли бы трудности с перераспределением результата этой работы.
Результат
Базовая концепция Plan 9 в том, что это - распределенная операционная система, не похожая на UNIX. В ней сетевая функциональность расширена такими механизмами, как удаленный вход в систему и сетевая файловая система. В Plan 9 сетевая поддержка встроена в функционал ОС. Например, все ресурсы, теоретически, могут быть прозрачно распределены в сети Plan 9. Система скрывает от пользователя, что ресурсы не являются локальными. Plan 9 поддерживает не только файловые серверы, но также серверы авторизации, вычислений и этот список может быть расширен12.
Система была построена на трех принципах:
- Во-первых, ресурсы именуются и к ним можно получить доступ как к файлам в иерархической файловой системе;
- Во-вторых, имеется стандартный протокол, называемый 9Р, для доступа к этим ресурсам;
- И, наконец, несвязанные иерархии, обеспечиваемые различными службами, соединяются вместе в единое личное иерархическое пространство имен файлов.
Необычные свойства Plan 9 обусловлены целенаправленным последовательным применением этих принципов.
Plan 9 основан на парадигме UNIX о том, что “все является файлом”.
Опираясь на огромную коллекцию дополнений, UNIX впитывал в себя все больше изменений, которые шли вразрез с с этим исходным, основополагающим принципом.
Примером этого является ужасный механизм сокетов, используемый для функций чтения и записи сетевых ресурсов, отличный от обычных файлов.
Plan 9 кладет этому конец, предоставляя файлово-ориентированный интерфейс системы.
Например, /net/tcp
и /net/udp
для сетевых интерфейсов.
Большинство системных служб также следуют серверному принципу.
В Plan 9, например, нет обычной программы ftp
.
Вместо этого ftpfs
монтирует FTP-сервер в каталог /n/ftp
.
Сервер 9660fs
ответственен за монтирование CD дисков.
Хотя Plan 9 изначально предназначалась для работы с традиционными файлами, ее идеи были распространены и на многие другие ресурсы. Службы по экспорту иерархий файлов включают устройства ввода/вывода, резервного копирования, оконную систему, сетевые интерфейсы и многое другое. Модель файловой системы хорошо понятна как разработчикам систем, так и обычным пользователям, так что службы, имеющие файлово-подобные интерфейсы легко построить, понять и использовать. Файлы поступают со знакомыми, унифицированными правилами защиты, именования и доступа (как локального, так и удаленного). Поэтому службы, построенные таким образом, готовы для использования в распределенных системах. В этом заключается отличие от объектно-ориентированных моделей, где с этими аспектами приходится заново иметь дело для каждого класса объектов. В последующих статьях будут приведены примеры, иллюстрирующие эти идеи на практике.
Одним из примеров может быть команда файловой системы /proc
, которая обеспечивает ясный способ исследования текущих процессов и управления ими.
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Р структурирован как набор транзакций, каждая из которых посылает запрос от процесса клиента локальному или удаленному серверу и возвращает результат. 9Р контролирует файловую систему, а не только файлы. Он включает процедуры для различения имен файлов и преобразования иерархии имен файловой системы, предоставляемой сервером. С другой стороны, в отличие от таких систем, как Sprite5, пространство имен пользователя поддерживается только системой клиента, а не на сервере или с его помощью. Кроме того, доступ к файлам происходит на уровне байтов, а не блоков, что отличает 9Р от таких протоколов, как NFS и RFS.
Обычная инсталляция Plan 9 состоит из ряда компьютеров, соединенных в сеть и предоставляющих каждый услуги определенного класса. Совместно используемые многопроцессорные серверы обеспечивают выполнение вычислительных циклов. Другие большие машины служат хранилищами файлов. Эти машины были расположены в помещении с кондиционированием воздуха и соединены высокопроизводительной сетью. Сети с меньшей пропускной способностью, такие как Ethernet, соединяют эти серверы с офисными или домашними рабочими станциями или ПК, называемыми в терминологии Plan 9 терминалами.
Современный стиль вычислений предполагает наличие для каждого пользователя выделенной рабочей станции или ПК. Plan 9 использует принципиально другой подход. Хотя она может функционировать и на рабочей станции с файлами, хранящимися на локальном диске, такая конфигурация не является канонической. Вместо этого машины с мониторами, клавиатурами и мышами получают доступ к большинству вычислительных ресурсов и систем хранения по сети, становясь терминалами системы, подобно терминалам старой системы с разделением времени. При использовании Plan 9 терминал временно персонализируется этим пользователем.
Принцип построения аппаратуры под пользователя здесь не работает. Plan 9 предлагает возможность программными средствами изменить то, как она пользователем воспринимается. Эта подстройка сопровождается приданием публично видимым ресурсам в сети локальных персональных имен. Plan 9 обеспечивает механизм организации персонального представления общего пространства с локальными именами глобально доступных ресурсов. Так как наиболее важными ресурсами сети являются файлы, модель этого представления ориентирована на файлы.
Локальные пространства имен предоставляют способ реализации представления сети “под себя”.
Все службы, доступные в сети, экспортируют иерархии файлов.
Те из них, которые важны для пользователя, собираются вместе в личное пространство имен.
Не представляющие в данное время интереса игнорируются [этот подход тяжело осознать, но он это одна из важнейших концепций, реализованных в системе].
Этот стиль использования отличается от однородного глобального пространства имен в UNIX.
В Plan 9 имеются известные имена для служб и унифицированные имена для файлов, экспортированных этими службами, однако их представление полностью локально.
Примером может служить разница между словосочетанием “мой дом” и четко сформулированным точным адресом.
Последний может быть использован каждым, тогда как первое используется только в разговорной речи: смысл фразы меняется в зависимости от того, кто и когда ее произносит, однако она считается понятной.
Подобным образом в Plan 9 имя /dev/mouse
всегда относится к мыши, а /bin/date
- это команда вывода даты, но то, какие файлы эти имена представляют, зависит от обстоятельств, например, от архитектуры машины, исполняющей команду date
.
Plan 9, таким образом, имеет локальные пространства имен, которые подчиняются глобальным соглашениям.
Именно эти соглашения гарантируют разумное поведение при наличии локальных имен.
Наши дни
Plan 9 несла в себе несколько инноваций, оказавших влияние на многие последующие системы. Но до недавнего времени исходный код находился под коммерческой лицензией, связывавшей разработчиков и пользователей. Bell Labs и небольшое сообщество программистов продолжали улучшать и развивать Plan 9.
Лицензия смягчалась из года в год, и в 2003 году Plan 9 был наконец-то выпущен под первой свободной лицензией. Коммерческая ветвь, известная как Inferno, теперь также доступна под бесплатной лицензией.
9front
Это форк Plan 9, над которым с 2011 года трудится коллектив разработчиков из сообщества NineTimes. В нём состоят поклонники оригинальной ОС от Bell Labs. Одной из главных проблем оригинальной Plan 9, тормозившей развитие системы, было отсутствие драйверов и слабая поддержка периферийного оборудования. Это было обусловленно однородностью оборудования в лаборатории. Именно эту проблему постарались решить разработчики 9front. Они написали для ОС драйверы USB, Wi-Fi, аудиокарт, игровые эмуляторы [можно запустить DOOM]. Форк распространялся под той же открытой лицензией Lucent Public License, что и Plan 9. На данный момент распространение ведётся под лицензией MIT.
Создатели 9front разместили в сети репозиторий пакетов, значительно облегчающий установку компонентов системы. В форке был полностью переписан загрузчик. Он называется 9boot и отличается использованием rc-скриптов, которые позволяют получить доступ к shell на любом этапе загрузки [что может пригодиться, если что-то пошло не так].
Plan 9 поддерживала несколько файловых систем: во-первых, нативную Fossil, разработанную в Bell Labs именно для этой платформы, а также Kfs, Paq, cwfs и FAT [куда без неё]. В 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 - это ОС для программистов и инженеров. Для тех, кому больше по душе копаться в конфигах и писать собственный код, чем запускать чужой. 9front можно назвать наиболее активным ответвлением от “классической” Plan 9. Создатели форка непрерывно работают над улучшением аппаратной поддержки и разработкой новых драйверов. Имеют их усилия и практическое применение: например, на принципах, схожих с архитектурой Plan 9, работает протокол ATA over Ethernet, созданный для кластеров NAS.
С появлением и развитием интернета вещей и одноплатных компьютеров, имеющих ограниченную производительность, востребованность распределённых ОС, которые позволяют гибко перераспределять вычислительные ресурсы в сети и обеспечивать их балансировку, наверняка будет расти.
А значит, у этого проекта есть будущее.
-
https://powerman.name/Inferno/man/4/registry.html Inferno Registry ↩︎
-
https://github.com/doytsujin/registry Plan 9 Inferno-like registry server ↩︎
-
. T.J. Killian, Processes as Files, USENlX, Summer 1984 Conf. Proc., June 1984, Salt Lake City, UT. ↩︎
-
. Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom, The Use of Name Spaces in Plan 9, Ор. Sys. Rev., Vol. 27, No. 2, April 1993, рр. 72-76. ↩︎
-
. John Ousterhout, Andrew Cherenson, Fred Douglis, Mike Nelson, and Brent Welch, The Sprite Network Operating Systems Operating System, IEEE Computer, 21(2), 23-38, Feb. 1988. ↩︎
-
http://9front.org/releases/2024/04/28/0/ 9FRONT “DO NOT INSTALL” RELEASED ↩︎