GNU Hurd - это мультисерверное микроядро, написанное как часть GNU . Он находится в разработке с 1990 года проекта GNU в Фонд свободного программного обеспечения , разработанного в качестве замены для Unix ядра, [3] и выпущен в свободное программное обеспечение под GNU General Public License . Когда ядро Linux оказалось жизнеспособным решением, разработка GNU Hurd замедлилась, временами переходя между застоем и возобновлением активности и интереса. [4]
Разработчик | Проект GNU Томас Бушнелл Роланд МакГрат Маркус Бринкманн Нил Уолфилд Сэмюэл Тибо |
---|---|
Написано в | Сборка , C |
Семейство ОС | Unix-подобный |
Рабочее состояние | Текущий |
Исходная модель | Свободное программное обеспечение |
Первый выпуск | 1990 |
Последний релиз | 0.9 / 7 июля 2019 [1] |
Платформы | IA-32 , i686 |
Тип ядра | Мультисерверное микроядро |
Лицензия | GPLv2 + [2] |
Официальный веб-сайт | www |
Дизайн Hurd состоит из набора протоколов и серверных процессов (или демонов в терминологии Unix ), которые работают на микроядре GNU Mach . [3] Hurd стремится превзойти ядро Unix по функциональности, безопасности и стабильности, оставаясь при этом в значительной степени совместимым с ним. Проект GNU выбрал в качестве операционной системы мультисерверное микроядро [5] из-за очевидных преимуществ по сравнению с традиционной архитектурой монолитного ядра Unix [6], точка зрения, которую отстаивали некоторые разработчики в 1980-х годах. [4]
Название и логотип
В декабре 1991 года главный архитектор Hurd описал это имя как взаимно рекурсивную аббревиатуру : [7]
Пришло время объяснить значение слова «Херд». «Hurd» означает «Hird демонов, заменяющих Unix». И, кроме того, «Hird» означает «Hurd of Interfaces, представляющие глубину». Насколько мне известно, у нас есть первая программа, названная парой взаимно рекурсивных сокращений.
Поскольку и hurd, и hird являются омофонами английского слова herd , полное название GNU Hurd также является игрой слов herd of gnus , отражающей принцип работы ядра. [8]
Логотип называется коробками Hurd, и он также отражает архитектуру. Логотип представляет собой граф, в котором узлы представляют серверы ядра Hurd, а направленные ребра - это сообщения IPC . [7]
История развития
Ричард Столмен основал проект GNU в сентябре 1983 года с целью создания свободной операционной системы GNU . Первоначально были написаны компоненты, необходимые для разработки ядра: редакторы , оболочка , компилятор , отладчик и т. Д. К 1989 году появилась GNU GPL , и единственным основным недостающим компонентом было ядро. [9] [10]
Разработка Hurd началась в 1990 году после попытки отказа от ядра в 1986 году на основе исследовательской операционной системы TRIX, разработанной профессором Стивом Уордом и его группой в Лаборатории компьютерных наук Массачусетского технологического института (LCS). [11] По словам Томаса Бушнелла , первоначального архитектора Hurd, их ранний план состоял в адаптации ядра 4.4BSD- Lite, и, оглядываясь назад, «теперь для меня совершенно очевидно, что это было бы великолепно, и мир стал бы совсем другое место сегодня ". [12] В 1987 году Ричард Столмен предложил использовать микроядро Маха, разработанное Ричардом Рашидом в Университете Карнеги-Меллона . Работа над этим была отложена на три года из-за неуверенности в том, выпустит ли CMU код Маха под подходящей лицензией. [11]
С выпуском ядра Linux в 1991 году, основной пользователь ГНУ пользовательских компонентов вскоре стал операционными системы на основе Linux ядре ( дистрибутивов Linux ), побуждая чеканки термина GNU / Linux .
Разработка Hurd шла медленно. Несмотря на оптимистичное заявление Столлмана в 2002 г., предсказывающего выпуск GNU / Hurd в конце того же года [13], Hurd все еще не считается подходящим для производственных сред. В целом разработка не оправдала ожиданий, и все еще существует значительное количество ошибок и недостающих функций. [14] Результатом стал более плохой продукт, чем ожидали многие (включая Столлмана). [15] В 2010 году, после двадцати лет разработки, Столлман сказал, что он «не очень оптимистичен в отношении GNU Hurd. В нем есть некоторые успехи, но для того, чтобы стать действительно лучше, потребуется решить множество глубоких проблем», но добавил, что «завершение не критично» для системы GNU, потому что свободное ядро уже существует ( Linux ), и завершение Hurd не решит основную остающуюся проблему для свободной операционной системы: поддержку устройств. [16]
Проект Debian , среди прочего, работал над проектом Hurd для создания двоичных дистрибутивов операционных систем GNU на основе Hurd для систем, совместимых с IBM PC .
После нескольких лет застоя в 2015 и 2016 годах разработка возобновилась, и за эти два года было выпущено четыре релиза. [17]
20 августа 2015 года, в разгар Google Summer of Code , было объявлено, что GNU Guix перенесен на GNU Hurd. [18]
Архитектура
В отличие от большинства Unix-подобных ядер, Hurd использует архитектуру сервер-клиент , построенную на микроядре , которое отвечает за предоставление самых основных служб ядра - координацию доступа к оборудованию : ЦП (посредством управления процессами и планирования ), ОЗУ (через управление памятью ) и другие различные устройства ввода / вывода (через планирование ввода / вывода ) для звука, графики, запоминающих устройств и т. д. Теоретически конструкция микроядра позволяет создавать все драйверы устройств как серверы, работающие в пространстве пользователя , но сегодня большинство драйверов этого типа все еще содержится в пространстве ядра GNU Mach . [19]
По словам разработчиков Hurd, основным преимуществом дизайна на основе микроядра является возможность расширения системы: разработка нового модуля не потребует глубоких знаний остальной части ядра, а ошибка в одном модуле не приведет к сбою всей системы. . Hurd предлагает концепцию переводчиков , структуру модулей, используемых для расширения функциональности файловой системы. [20]
С самого начала Hurd разрабатывался для использования GNU Mach в качестве микроядра. Это было техническое решение Ричарда Столлмана , который думал, что это ускорит работу, сохранив большую ее часть. Он признал, что ошибался в этом. [21] Другие Unix-подобные системы, работающие на микроядре Mach, включают OSF / 1 , Lites и MkLinux . macOS и NeXTSTEP используют гибридные ядра на основе Mach.
Другие микроядра
Начиная с 2004 года, были предприняты различные усилия по переносу Hurd на более современные микроядра. Микроядра L4 был первоначальный выбор в 2004 году, но прогресс замедлился до остановки. Тем не менее, в 2005 году разработчик Hurd Нил Уолфилд завершил начальную структуру управления памятью для порта L4 / Hurd, а Маркус Бринкманн перенес основные части glibc ; а именно, заставить работать код запуска процесса, позволяя запускать программы, тем самым позволяя запускать первые пользовательские программы (такие как программа hello world ) на C.
С 2005 года Бринкманн и Уолфилд начали исследовать Coyotos как новое ядро для HURD. [22] [23] В 2006 году Бринкманн встретился с Джонатаном Шапиро (основным архитектором операционной системы Coyotos), чтобы помочь и обсудить использование ядра Coyotos для GNU / Hurd. В ходе дальнейшего обсуждения разработчики HURD поняли, что Coyotos (как и другие подобные ядра) не подходят для HURD. [24]
В 2007 году разработчики Hurd Нил Уолфилд и Маркус Бринкманн подвергли критике архитектуру Hurd, известную как «критика» [25], и предложили, как можно спроектировать будущую систему, известное как «документ с изложением позиции». [26] В 2008 году Нил Уолфилд начал работу над микроядром Viengoos как современным собственным ядром для HURD. По состоянию на 2009 год[Обновить], разработка Viengoos приостановлена из-за того, что Уолфилду не хватает времени на работу. [27]
Тем временем другие продолжали работать над вариантом Херда Маха. [28]
Расширения Unix
В Hurd заменены или расширены некоторые традиционные концепции Unix.
В Unix каждая запущенная программа имеет связанный идентификатор пользователя , который обычно соответствует пользователю, запустившему процесс . Этот идентификатор в значительной степени определяет действия, разрешенные программе. Никакой внешний процесс не может изменить идентификатор пользователя запущенной программы. С другой стороны, процесс Hurd работает под набором идентификаторов пользователей, которые могут содержать несколько идентификаторов, один или ни одного. Достаточно привилегированный процесс может добавлять и удалять идентификаторы другого процесса. Например, есть сервер паролей, который будет выдавать идентификаторы в обмен на правильный пароль для входа.
Что касается файловой системы , подходящая программа может быть обозначена как переводчик для отдельного файла или всей иерархии каталогов. Каждый доступ к переведенному файлу или файлам ниже иерархии во втором случае фактически обрабатывается программой. Например, транслятор файлов может просто перенаправить операции чтения и записи в другой файл, например символьную ссылку Unix . Эффект монтирования Unix достигается настройкой транслятора файловой системы (с помощью команды "settrans"). Переводчики также могут использоваться для оказания услуг пользователю. Например, переводчик ftpfs позволяет пользователю инкапсулировать удаленные FTP-сайты в каталог. Затем для управления файлами в удаленной системе можно использовать стандартные инструменты, такие как ls , cp и rm . Еще более мощными трансляторами являются такие, как UnionFS , которая позволяет пользователю объединять несколько каталогов в один; таким образом, перечисление единого каталога показывает содержимое всех каталогов.
Hurd требует мультизагрузочного -совместимого загрузчика , например, GRUB .
Архитектура серверов
Согласно документации Debian, существует 24 сервера (18 основных серверов и 6 серверов файловой системы), названные следующим образом: [29]
Основные серверы
- auth ( сервер аутентификации ): получает запросы и пароли от программ и выдает им идентификатор, который изменяет привилегии программы.
- сбой ( аварийный сервер): обрабатывает все фатальные ошибки.
- eieio (сервер перевода): TODO (см. Компьютер купил ферму )
- exec (сервер выполнения): переводит исполняемый образ (в настоящее время поддерживаются ELF и a.out ) в исполняемый образ в памяти.
- fifo ( переводчик FIFO ): реализует именованные каналы.
- new-fifo (новый сервер FIFO): альтернативный сервер для именованных каналов.
- firmlink (firmlink переводчик): Реализует firmlinks - « на полпути между символической ссылкой и жесткой ссылкой ». [30]
- fwd (прямой сервер): перенаправляет запросы на другие серверы, используемые серверами fifo и символическими ссылками.
- hostmux (сервер мультиплексора хоста)
- ifsock (сервер для интерфейса сокетов): помогает с адресами сокетов домена UNIX.
- init ( сервер инициализации ): базовая загрузка и настройка системы.
- magic ( magic server): сигнализирует о том, что поиск имени должен быть разрешен внутри процесса, если результат включает состояние процесса.
- null (нулевой сервер): реализует / dev / null и / dev / zero.
- pfinet (сервер pfinet): реализует семейство протоколов PF_INET.
- pflocal (сервер pflocal): реализует сокеты домена UNIX .
- proc (сервер процессов): назначает PID и управляет действиями на уровне процесса.
- символическая ссылка ( переводчик символических ссылок ): реализует символические ссылки для файловых систем, которые их не поддерживают.
- термин (терминальный сервер): терминал POSIX .
- usermux (пользовательский мультиплексорный сервер): вызывает пользовательские переводчики.
Серверы файловой системы
- ext2fs
- Ext2 файловой системы США. Он получает блоки диска от микроядра и передает приложениям файлы и каталоги.
- isofs
- Переводчик файловой системы ISO 9660 . Преобразует блоки CD или DVD в файлы и каталоги приложений.
- нфс
- См. Сетевая файловая система .
- ufs
- Транслятор одноименной файловой системы BSD, UFS .
- ftpfs
- Транслятор файловой системы протокола передачи файлов .
- storeio
- Переводчик памяти.
Серверы совместно реализуют POSIX API , причем каждый сервер реализует часть интерфейса. Например, каждый сервер файловой системы реализует вызовы файловой системы. Сервер хранения будет работать как слой оболочки, аналогичный блочному уровню Linux. Эквивалент VFS в Linux достигается за счет библиотек libdiskfs и libpager.
Дистрибутивы GNU, работающие под управлением Hurd
Дистрибутивы GNU на основе Hurd включают:
- Арч Херд
- Bee GNU / Hurd (снято с производства) [31]
- Debian GNU / Hurd
- Gentoo GNU Hurd (снято с производства)
- GNU / Hurd Live CD [32] (снято с производства) [ неудачная проверка ]
- Guix System (в разработке)
Смотрите также
- Дистрибутивы GNU
- GNU Mach
- GNU Linux-libre - бесплатная версия ядра Linux
- Сравнение ядер операционных систем
- Свободное программное обеспечение
- Виртуальная машина на основе ядра (KVM)
- Спецификация мультизагрузки
Рекомендации
- ^ "2019-07-07-debian gnu hurd 2019" . GNU Hurd . Проверено 19 мая 2021 .
- ^ «КОПИРОВАНИЕ - hurd / hurd.git - Hurd» . Git.savannah.gnu.org . Проверено 25 февраля 2019 .
- ^ а б "Что такое GNU Hurd?" . GNU . Проверено 4 марта 2010 .
- ^ а б Тоцци, Кристофер (2015-04-20). «30 лет спустя HURD живет: GNU обновляет ядро Unix с открытым исходным кодом» . Архивировано из оригинала на 2015-04-24.
- ^ "Что такое мультисерверное микроядро?" . Gnu.org. 2013-04-13 . Проверено 11 августа 2015 .
- ^ «преимущества» . GNU . Проверено 7 декабря 2011 .
- ^ а б Вервлосем, Коэн (7 июля 2010 г.). "The Hurd: GNU в поисках идеального ядра" . LWN.net . Проверено 5 октября 2012 года .
- ^ «GNU Hurd: Происхождение имени» . GNU . Проверено 4 марта 2010 .
- ^ Хиллесли, Ричард (30 июня 2010 г.). «GNU HURD: изменившееся видение и потерянное обещание» . Проверено 1 октября 2012 года .
- ^ «Linux и проект GNU» . GNU . 2010-01-26 . Проверено 4 марта 2010 .
- ^ а б «История GNU Hurd,« Как это начиналось » » . GNU . Проверено 27 августа 2006 .
- ^ Салус, Питер . «Демон, GNU и пингвин» . Проверено 8 августа 2006 .
- ^ Рибейро, Джон (11 марта 2002 г.). «Свободное программное обеспечение видит GNU свободным от Linux» . Мир ПК . Архивировано из оригинала на 2016-09-22 . Проверено 5 октября 2012 .
- ^ «Статус» . GNU . Проверено 4 марта 2010 .
- ^ Столмен, Ричард (2009-03-09). «Движение за свободное программное обеспечение и будущее свободы» (ogg) . Фонд свободного программного обеспечения . Загреб . Выложите резюме .
Это тот способ, который люди считали наиболее чистым из возможных способов разработки ядер еще в 1990 году. Что ж, потребовалось много-много лет, чтобы заставить это ядро вообще работать, и оно все еще плохо работает, и оно Похоже, с этой конструкцией могут быть фундаментальные проблемы, о которых еще в 1990 году никто не знал.
- ^ Столмен, Ричард (29 июля 2010 г.). «РМС АМА» . Reddit . Проверено 7 декабря 2011 .
- ^ «Фонд свободного программного обеспечения меняет приоритеты - SD Times» . SD Times . 2017-01-17 . Проверено 17 апреля 2017 .
- ^ Рагкусис, Манолис (20 августа 2015 г.). «[Обновление GSoC] Перенос Guix на GNU / Hurd» (список рассылки). guix-devel . Проверено 20 августа 2015 года .
- ^ Кусулос, Константин (21 марта 2007 г.). "Re: Драйверы устройств в Mach?" . bug-hurd (список рассылки).
- ^ Доппнер, Томас В. (20 декабря 2010 г.). Операционные системы в глубине: дизайн и программирование . Джон Вили и сыновья. п. 160. ISBN 978-0-471-68723-8. Проверено 29 ноября 2012 года .
- ^ Столмен , Ричард (2000-10-12). «В защиту Red Hat» . Linux сегодня . Проверено 7 декабря 2011 .
Я беру на себя полную ответственность за техническое решение о разработке ядра GNU на основе Mach, решение, которое, кажется, привело к медлительности разработки. Я думал, что использование Mach ускорит работу, сэкономив нам большую часть работы, но я ошибался.
- ^ Шапиро, Джонатан С. (27 октября 2005 г.). «Re: Комментарий по поводу смены ядер» . l4-hurd (Список рассылки).
- ^ Бахманн, Том (2007-07-07). "Re: seL4, L4.sec и беспорядок койотов" . l4-hurd (Список рассылки).
- ^ «Перенос Hurd на другое микроядро» . GNU Hurd . Фонд свободного программного обеспечения . Проверено 6 мая 2017 .
- ^ Walfield, Neal H .; Бринкманн, Маркус (июль 2007 г.). «Критика многосерверной операционной системы GNU Hurd» (PDF) . GNU . Проверено 7 декабря 2011 .
- ^ Walfield, Neal H .; Бринкманн, Маркус (2007-01-04). «Повышение удобства использования с помощью декомпозиции доступа и уточнения политик» (PDF) . GNU . Проверено 7 декабря 2011 .
- ^ "viengoos" . GNU . Проверено 4 марта 2010 .
- ^ «Что случилось с микроядрами L4 / Coyotos / viengoos?» . GNU . Проверено 7 января 2011 .
- ^ «Предварительное описание пользовательского интерфейса GNU / Hurd» . Debian . 1996-10-10 . Проверено 4 марта 2010 .
- ^ «GNU / Hurd - Документация» . Debian. 1996-10-10 . Проверено 12 июля 2012 .
- ^ "GNU Hurd / hurd / running / distrib" . Gnu.org . 2015-05-03 . Проверено 21 сентября 2017 .
- ^ "GNU Hurd / hurd / running / live cd" . Gnu.org . 2013-04-09 . Проверено 21 сентября 2017 .
Внешние ссылки
- Официальный веб-сайт