GNU Hurd — это набор серверов микроядер , написанных как часть GNU , для микроядра GNU Mach . Он разрабатывался с 1990 года проектом GNU из Free Software Foundation , был разработан как замена ядру Unix , [4] и выпущен как свободное программное обеспечение под лицензией GNU General Public License . Когда ядро Linux оказалось жизнеспособным решением, разработка GNU Hurd замедлилась, временами переходя от застоя к возобновлению активности и интереса. [5]
Проект Hurd состоит из набора протоколов и серверных процессов (или демонов , в терминологии Unix), которые работают на микроядре GNU Mach. [4] Hurd стремится превзойти ядро Unix по функциональности, безопасности и стабильности, оставаясь в значительной степени совместимым с ним. Проект GNU выбрал многосерверное микроядро [6] для операционной системы из-за предполагаемых преимуществ по сравнению с традиционной архитектурой монолитного ядра Unix , [7] точка зрения, которая отстаивалась некоторыми разработчиками в 1980-х годах. [5]
В декабре 1991 года главный архитектор Hurd описал название как взаимно рекурсивную аббревиатуру : [8]
Пришло время [объяснить] значение "Hurd". "Hurd" означает "Hird of Unix-Replacing Daemons". И, затем, "Hird" означает "Hurd of Interfaces Representing Depth". Насколько мне известно, здесь мы имеем первое программное обеспечение, названное парой взаимно рекурсивных аббревиатур.
Поскольку и hurd, и hird являются омофонами английского слова herd , полное название GNU Hurd также является игрой слов herd от gnus , отражая принцип работы ядра. [9]
Логотип называется Hurd boxs и также отражает архитектуру. Логотип представляет собой граф, где узлы представляют серверы ядра Hurd, а направленные ребра — сообщения IPC . [8]
Ричард Столлман основал проект GNU в сентябре 1983 года с целью создания свободной операционной системы GNU . [10] Первоначально были написаны компоненты, необходимые для разработки ядра: редакторы , оболочка , компилятор , отладчик и т. д. К 1989 году появилась GPL , и единственным основным компонентом, в котором не хватало ядра, было ядро. [11] [12]
Разработка Hurd началась в 1990 году после заброшенной попытки создания ядра в 1986 году на основе исследовательской операционной системы TRIX , разработанной профессором Стивом Уордом и его группой в Лаборатории компьютерных наук Массачусетского технологического института (LCS). [13] По словам Томаса Бушнелла , первоначального архитектора Hurd, их первоначальный план состоял в том, чтобы адаптировать ядро 4.4BSD -Lite, и, оглядываясь назад, «теперь мне совершенно очевидно, что это бы блестяще удалось, и мир был бы сегодня совсем другим». [14] В 1987 году Ричард Столлман предложил использовать микроядро Mach, разработанное Ричардом Рашидом в Университете Карнеги-Меллона . Работа над этим была отложена на три года из-за неопределенности относительно того, выпустит ли CMU код Mach под подходящей лицензией. [13]
С выпуском ядра Linux в 1991 году основным пользователем пользовательских компонентов GNU вскоре стали операционные системы на основе ядра Linux ( дистрибутивы Linux ), что привело к появлению термина GNU/Linux .
Разработка Hurd продвигалась медленно. Несмотря на оптимистичное заявление Столлмана в 2002 году о том, что он предсказывает выпуск GNU/Hurd в том же году, [15] Hurd по-прежнему не считается подходящим для производственных сред. Разработка в целом не оправдала ожиданий, и все еще есть значительное количество ошибок и отсутствующих функций. [16] Это привело к более плохому продукту, чем ожидали многие, включая Столлмана. [17] В 2010 году, после двадцати лет разработки, Столлман сказал, что он «не очень оптимистичен в отношении GNU Hurd. Он делает определенный прогресс, но чтобы стать действительно лучшим, ему потребуется решить множество глубоких проблем», но добавил, что «завершение его не имеет решающего значения» для системы GNU, поскольку свободное ядро уже существует ( Linux ), а завершение Hurd не решит главную оставшуюся проблему для свободной операционной системы: поддержку устройств. [18]
Проект Debian , среди прочих, работал над проектом Hurd по созданию бинарных дистрибутивов операционных систем GNU на базе Hurd для систем, совместимых с IBM PC .
После многих лет застоя разработка возобновилась в 2015 и 2016 годах, за эти два года было выпущено четыре игры [19] , но с тех пор больше их не было.
20 августа 2015 года в ходе Google Summer of Code было объявлено, что GNU Guix был портирован на GNU Hurd. [20]
В отличие от большинства Unix-подобных ядер, Hurd использует архитектуру сервер-клиент , построенную на микроядре , которое отвечает за предоставление самых базовых служб ядра — координацию доступа к оборудованию : ЦП (через управление процессами и планирование ), ОЗУ (через управление памятью ) и другим различным устройствам ввода-вывода (через планирование ввода-вывода ) для звука, графики, массового хранения и т. д. Теоретически, конструкция микроядра позволила бы построить все драйверы устройств как серверы, работающие в пространстве пользователя , но сегодня большинство драйверов такого рода по-прежнему содержатся в пространстве ядра GNU Mach . [21]
По словам разработчиков Hurd, главным преимуществом микроядерного дизайна является возможность расширения системы: разработка нового модуля не потребует глубоких знаний остальной части ядра, а ошибка в одном модуле не приведет к краху всей системы. Hurd предоставляет концепцию трансляторов , фреймворк модулей, используемых для расширения функциональности файловой системы. [22]
С самого начала Hurd разрабатывался с использованием GNU Mach в качестве микроядра. Это было техническое решение, принятое Ричардом Столлманом , который считал, что это ускорит работу, сэкономив большую ее часть. Он признал, что ошибался. [23] Другие Unix-подобные системы, работающие на микроядре Mach, включают OSF/1 , Lites и MkLinux . macOS и NeXTSTEP используют гибридные ядра на основе Mach.
Начиная с 2004 года, предпринимались различные попытки перенести Hurd на более современные микроядра. Микроядро L4 было первоначальным выбором в 2004 году, но прогресс замедлился и остановился. Тем не менее, в 2005 году разработчик Hurd Нил Уолфилд закончил начальную структуру управления памятью для порта L4/Hurd, а Маркус Бринкманн перенес основные части glibc ; а именно, заставил работать код запуска процесса, позволяя программам запускаться, тем самым позволяя запускать первые пользовательские программы (тривиальные, такие как программа hello world ) на языке C.
С 2005 года Бринкманн и Уолфилд начали исследовать Coyotos как новое ядро для HURD. [24] [25] В 2006 году Бринкманн встретился с Джонатаном Шапиро (главным архитектором операционной системы Coyotos), чтобы помочь и обсудить использование ядра Coyotos для GNU/Hurd. В ходе дальнейшего обсуждения разработчики HURD поняли, что Coyotos (а также другие подобные ядра) не подходят для HURD. [26]
В 2007 году разработчики Hurd Нил Уолфилд и Маркус Бринкманн дали критику архитектуры Hurd, известную как «критика», [27] и предложение о том, как может быть спроектирована будущая система, известное как «позиционный документ». [28] В 2008 году Нил Уолфилд начал работать над микроядром Viengoos как современным собственным ядром для HURD. По состоянию на 2009 год [обновлять]разработка Viengoos приостановлена из-за нехватки времени у Уолфилда для работы над ним. [29]
В то же время другие продолжали работать над вариантом Hurd на основе Маха. [30]
В Hurd заменены или расширены ряд традиционных концепций Unix.
В Unix каждая запущенная программа имеет связанный с ней идентификатор пользователя , который обычно соответствует пользователю, запустившему процесс . Этот идентификатор в значительной степени определяет действия, разрешенные программе. Никакой внешний процесс не может изменить идентификатор пользователя запущенной программы. С другой стороны, процесс Hurd работает под набором идентификаторов пользователей, который может содержать несколько идентификаторов, один или ни одного. Достаточно привилегированный процесс может добавлять и удалять идентификаторы другого процесса. Например, есть сервер паролей, который выдает идентификаторы в обмен на правильный пароль для входа.
Что касается файловой системы , то подходящую программу можно назначить в качестве транслятора для одного файла или целой иерархии каталогов. Каждый доступ к переведенному файлу или файлам ниже иерархии во втором случае фактически обрабатывается программой. Например, транслятор файлов может просто перенаправить операции чтения и записи в другой файл, например, символическую ссылку Unix . Эффект монтирования Unix достигается путем настройки транслятора файловой системы (с помощью команды "settrans"). Трансляторы также могут использоваться для предоставления услуг пользователю. Например, транслятор ftpfs позволяет пользователю инкапсулировать удаленные FTP-сайты в каталог. Затем можно использовать стандартные инструменты, такие как ls , cp и rm, для управления файлами на удаленной системе. Еще более мощными трансляторами являются такие, как UnionFS , который позволяет пользователю объединять несколько каталогов в один; таким образом, перечисление объединенного каталога раскрывает содержимое всех каталогов.
Для Hurd требуется загрузчик , совместимый с мультизагрузкой , например GRUB .
Согласно документации Debian, существует 24 сервера (18 основных серверов и 6 серверов файловой системы), названных следующим образом: [31]
Серверы совместно реализуют API POSIX , причем каждый сервер реализует часть интерфейса. Например, различные серверы файловой системы реализуют вызовы файловой системы. Сервер хранения будет работать как слой-обертка, аналогичный блочному слою Linux. Эквивалент VFS Linux достигается библиотеками libdiskfs и libpager.
Дистрибутивы GNU на базе Hurd включают в себя:
Это также тот способ, который люди считали самым чистым из возможных способов проектирования ядер в 1990 году. Что ж, потребовалось много-много лет, чтобы заставить это ядро работать вообще, и оно до сих пор работает не очень хорошо, и похоже, что в этой конструкции могут быть фундаментальные проблемы, о которых никто не знал в 1990 году.
Я беру на себя полную ответственность за техническое решение разработать ядро GNU на основе Mach, решение, которое, по-видимому, и стало причиной медленной разработки. Я думал, что использование Mach ускорит работу, сэкономив нам большую часть работы, но я ошибался.