Jump to content

GNU Hurd: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Asdfugil (talk | contribs)
Fix access date
Tags: Mobile edit Mobile web edit
add x86-64 os category
 
(33 intermediate revisions by 30 users not shown)
Line 2: Line 2:
{{Redirect|Hurd}}
{{Redirect|Hurd}}
{{Infobox OS
{{Infobox OS
| name = GNU Hurd
| name = GNU Hurd
| logo = [[File:Hurd-logo.svg|96px]]
| logo = [[File:Hurd-logo.svg|96px]]
| screenshot = [[File:Screenshot debian-HURD 2019-02-05 17-41-41.png|250px]]
| screenshot = [[File:Debian GNU HURD text mode screenshot.png|250px]]
| developer = [[GNU Project]]<br />[[Thomas Bushnell]]<br />[[Roland McGrath]]<br />[[Marcus Brinkmann]]<br />[[Neal Walfield]]<br />[[Samuel Thibault]]
| developer = [[GNU Project]]<br />[[Thomas Bushnell]]<br />Roland McGrath<br />Marcus Brinkmann<br />Neal Walfield<br />Samuel Thibault
| programmed in = [[Assembly language|Assembly]], [[C (programming language)|C]]
| programmed in = [[Assembly language|Assembly]], [[C (programming language)|C]]
| family = [[Unix-like]]
| family = [[Unix-like]]
| working state = Current
| working state = Current
| source model = [[Free software]] <!-- Shouldn't say this per [[Template:Infobox OS/doc]], but is contentious, see talk page -->
| source model = [[Free software]] <!-- Shouldn't say this per [[Template:Infobox OS/doc]], but is contentious, see talk page -->
| released = {{Start date and age|1990}}
| released = {{Start date and age|1990}}
| latest release version = 0.9
| latest release version = {{wikidata|property|preferred|references|edit|Q48464|P348|P548=Q2804309}}
| latest release date = {{wikidata|qualifier|preferred|single|Q48464|P348|P548=Q2804309|P577}}
| latest release date = {{Start date and age|df=yes|2021|08|14}}<ref>{{cite web|url=https://www.gnu.org/software/hurd/news/2021-08-14-debian_gnu_hurd_2021.html|title= 2021-08-14-debian gnu hurd 2021|publisher=GNU Hurd |access-date=2021-11-20}}</ref>
| latest preview version = {{wikidata|property|preferred|references|edit|Q48464|P348|P548=Q51930650}}
| latest test version =
| latest preview date = {{wikidata|qualifier|preferred|single|Q48464|P348|P548=Q51930650|P577}}
| latest test date =
| supported platforms = [[IA-32]], [[P6 (microarchitecture)|i686]]
| supported platforms = [[x86-64]], [[IA-32]], [[P6 (microarchitecture)|i686]], [[ARM architecture family|ARM]]<ref>{{cite web|url=https://www.osnews.com/story/139255/gnu-hurd-ported-to-aarch64-and-more-hurd-news/|title=GNU Hurd ported to AArch64, and more Hurd news|website=osnews.com|access-date=22 April 2024}}</ref>
| kernel type = {{URL|https://www.gnu.org/software/hurd/faq/multiserver_microkernel.html|Multiserver microkernel}}
| kernel type = {{URL|https://www.gnu.org/software/hurd/faq/multiserver_microkernel.html|Multiserver microkernel}}
| license = [[GNU General Public License|GPL-2.0-or-later]]<ref>{{cite web|url=http://git.savannah.gnu.org/cgit/hurd/hurd.git/tree/COPYING|title=COPYING - hurd/hurd.git - Hurd|website=Git.savannah.gnu.org|access-date=25 February 2019}}</ref>
| license = [[GNU General Public License|GPL-2.0-or-later]]<ref>{{cite web|url=http://git.savannah.gnu.org/cgit/hurd/hurd.git/tree/COPYING|title=COPYING - hurd/hurd.git - Hurd|website=Git.savannah.gnu.org|access-date=25 February 2019}}</ref>
| website = {{URL|https://www.gnu.org/software/hurd/}}
}}
}}
'''GNU Hurd''' is a collection of microkernel servers written as part of [[GNU]]. It has been under development since 1990 by the [[GNU Project]] of the [[Free Software Foundation]], designed as a replacement for the [[Unix]] kernel,<ref name="What Is the GNU Hurd" /> and released as [[free software]] under the [[GNU General Public License]]. When the [[Linux kernel]] proved to be a viable solution, development of GNU Hurd slowed, at times alternating between stasis and renewed activity and interest.<ref name=":0">{{Cite web|url=http://thevarguy.com/open-source-application-software-companies/042015/30-years-hurd-lives-gnu-updates-open-source-|title=30 Years On, HURD Lives: GNU Updates Open Source Unix Kernel|last=Tozzi|first=Christopher|date=2015-04-20|archive-url=https://web.archive.org/web/20150424014208/http://thevarguy.com/open-source-application-software-companies/042015/30-years-hurd-lives-gnu-updates-open-source-|archive-date=2015-04-24|language=en}}</ref>


'''GNU Hurd''' is a collection of [[microkernel]] servers written as part of [[GNU]], for the [[GNU Mach]] microkernel. It has been under development since 1990 by the [[GNU Project]] of the [[Free Software Foundation]], designed as a replacement for the [[Unix]] kernel,<ref name="What Is the GNU Hurd" /> and released as [[free software]] under the [[GNU General Public License]]. When the [[Linux kernel]] proved to be a viable solution, development of GNU Hurd slowed, at times alternating between stasis and renewed activity and interest.<ref name=":0">{{Cite web|url=http://thevarguy.com/open-source-application-software-companies/042015/30-years-hurd-lives-gnu-updates-open-source-|title=30 Years On, HURD Lives: GNU Updates Open Source Unix Kernel|last=Tozzi|first=Christopher|date=2015-04-20|archive-url=https://web.archive.org/web/20150424014208/http://thevarguy.com/open-source-application-software-companies/042015/30-years-hurd-lives-gnu-updates-open-source-|archive-date=2015-04-24|language=en |website=The VAR Guy }}</ref>
The Hurd's design consists of a set of protocols and [[server (computing)|server processes]] (or [[daemon (computer software)|daemons]], in [[Unix]] terminology) that run on the [[GNU Mach]] [[microkernel]].<ref name="What Is the GNU Hurd"/> The Hurd aims to surpass the [[Unix]] kernel in functionality, security, and stability, while remaining largely compatible with it. The GNU Project chose the multiserver microkernel<ref>{{cite web|url=https://www.gnu.org/software/hurd/faq/multiserver_microkernel.html |title=What is a Multiserver Microkernel? |publisher=Gnu.org |date=2013-04-13 |access-date=2015-08-11}}</ref> for the operating system, due to perceived advantages over the traditional Unix [[monolithic kernel]] architecture,<ref name="advantages" /> a view that had been advocated by some developers in the 1980s.<ref name=":0" />

The Hurd's design consists of a set of protocols and [[server (computing)|server processes]] (or [[daemon (computer software)|daemons]], in Unix terminology) that run on the GNU Mach microkernel.<ref name="What Is the GNU Hurd"/> The Hurd aims to surpass the Unix kernel in functionality, security, and stability, while remaining largely compatible with it. The GNU Project chose the multiserver microkernel<ref>{{cite web|url=https://www.gnu.org/software/hurd/faq/multiserver_microkernel.html |title=What is a Multiserver Microkernel? |publisher=GNU |date=2013-04-13 |access-date=2015-08-11}}</ref> for the operating system, due to perceived advantages over the traditional Unix [[monolithic kernel]] architecture,<ref name="advantages" /> a view that had been advocated by some developers in the 1980s.<ref name=":0" />


== Name and logo ==
== Name and logo ==
In December 1991 the primary architect of the Hurd described the name as a [[mutual recursion|mutually]] [[recursive acronym]]:<ref name="Koen Vervloesem, 2010">{{cite web |last=Vervloesem |first=Koen |date=July 7, 2010 |title=The Hurd: GNU's quest for the perfect kernel |publisher=[[LWN.net]] |url=https://lwn.net/Articles/395150/ |access-date=October 5, 2012}}</ref>
In December 1991 the primary architect of the Hurd described the name as a [[mutual recursion|mutually]] [[recursive acronym]]:<ref name="Koen Vervloesem, 2010">{{cite web |last=Vervloesem |first=Koen |date=July 7, 2010 |title=The Hurd: GNU's quest for the perfect kernel |publisher=[[LWN.net]] |url=https://lwn.net/Articles/395150/ |access-date=October 5, 2012}}</ref>
{{quote|text=It's time [to] explain the meaning of "Hurd". "Hurd" stands for "Hird of Unix-Replacing Daemons". And, then, "Hird" stands for "Hurd of Interfaces Representing Depth". We have here, to my knowledge, the first software to be named by a pair of mutually recursive acronyms.|author=[[Thomas Bushnell|Thomas (then Michael) Bushnell]] }}
{{Blockquote|text=It's time [to] explain the meaning of "Hurd". "Hurd" stands for "Hird of Unix-Replacing Daemons". And, then, "Hird" stands for "Hurd of Interfaces Representing Depth". We have here, to my knowledge, the first software to be named by a pair of mutually recursive acronyms.|author=[[Thomas Bushnell|Thomas (then Michael) Bushnell]] }}


As both ''hurd'' and ''hird'' are [[homophones]] of the English word ''herd'', the full name ''GNU Hurd'' is also a play on the words ''[[herd]] of [[wildebeest|gnus]]'', reflecting how the kernel works.<ref name="hurd-name" />
As both ''hurd'' and ''hird'' are [[homophone]]s of the English word ''herd'', the full name ''GNU Hurd'' is also a play on the words ''[[herd]] of [[wildebeest|gnus]]'', reflecting how the kernel works.<ref name="hurd-name" />


The logo is called the ''Hurd boxes'' and it also reflects on architecture. The logo is a graph where nodes represent the Hurd kernel's servers and directed edges are [[Inter-process communication|IPC]] messages.<ref name="Koen Vervloesem, 2010"/>
The logo is called the ''Hurd boxes'' and it also reflects on architecture. The logo is a graph where nodes represent the Hurd kernel's servers and directed edges are [[Inter-process communication|IPC]] messages.<ref name="Koen Vervloesem, 2010"/>


== Development history ==
== Development history ==
[[Richard Stallman]] founded the [[GNU Project]] in September 1983 with an aim to create a [[Free software|free]] [[GNU]] operating system. Initially the components required for kernel development were written: [[Text editor|editors]], [[Unix shell|shell]], [[compiler]], [[debugger]] etc. By 1989, the [[GNU GPL]] came into being and the only major component missing was the kernel.<ref name="Richard Hillesley, 2010">{{cite web |last=Hillesley |first=Richard |title=GNU HURD: Altered visions and lost promise | date=June 30, 2010 |url=http://www.h-online.com/open/features/GNU-HURD-Altered-visions-and-lost-promise-1030942.html |access-date=October 1, 2012}}</ref><ref name="linux-and-gnu" />
[[Richard Stallman]] founded the [[GNU Project]] in September 1983 with an aim to create a [[Free software|free]] [[GNU]] operating system.<ref>{{Cite web |title=GNU History |url=https://cs.stanford.edu/people/eroberts/courses/cs181/projects/2000-01/open-source/gnu.htm#:~:text=In%201983,%20the%20GNU%20Project,up%20by%20proprietary%20software%20vendors. |access-date=2024-09-03 |website=cs.stanford.edu}}</ref> Initially the components required for kernel development were written: [[Text editor|editors]], [[Unix shell|shell]], [[compiler]], [[debugger]] etc. By 1989, the [[GNU General Public License|GPL]] came into being and the only major component missing was the kernel.<ref name="Richard Hillesley, 2010">{{cite web |last=Hillesley |first=Richard |title=GNU HURD: Altered visions and lost promise | date=June 30, 2010 |url=http://www.h-online.com/open/features/GNU-HURD-Altered-visions-and-lost-promise-1030942.html |access-date=October 1, 2012}}</ref><ref name="linux-and-gnu" />


Development on the Hurd began in 1990 after an abandoned kernel attempt in 1986, based on the research [[Trix (operating system)|TRIX]] operating system developed by Professor [[Steve Ward (computer scientist)|Steve Ward]] and his group at [[Massachusetts Institute of Technology|MIT's]] [[Laboratory for Computer Science]] (LCS).<ref name="hurd-hist" /> According to [[Thomas Bushnell]], the initial Hurd architect, their early plan was to adapt the [[4.4BSD]]-Lite kernel and, in hindsight, "It is now perfectly obvious to me that this would have succeeded splendidly and the world would be a very different place today."<ref name="hurd-and-bsdi" /> In 1987 Richard Stallman proposed using the [[Mach (kernel)|Mach microkernel]] developed by [[Richard Rashid]] at [[Carnegie Mellon University]]. Work on this was delayed for three years due to uncertainty over whether CMU would release the Mach code under a suitable license.<ref name="hurd-hist" />
Development on the Hurd began in 1990 after an abandoned kernel attempt in 1986, based on the research [[Trix (operating system)|TRIX]] operating system developed by Professor [[Steve Ward (computer scientist)|Steve Ward]] and his group at [[Massachusetts Institute of Technology|MIT's]] [[Laboratory for Computer Science]] (LCS).<ref name="hurd-hist" /> According to [[Thomas Bushnell]], the initial Hurd architect, their early plan was to adapt the [[4.4BSD]]-Lite kernel and, in hindsight, "It is now perfectly obvious to me that this would have succeeded splendidly and the world would be a very different place today."<ref name="hurd-and-bsdi" /> In 1987 Richard Stallman proposed using the [[Mach (kernel)|Mach microkernel]] developed by [[Richard Rashid]] at [[Carnegie Mellon University]]. Work on this was delayed for three years due to uncertainty over whether CMU would release the Mach code under a suitable license.<ref name="hurd-hist" />
Line 39: Line 39:
With the release of the [[Linux kernel]] in 1991, the primary user of GNU's [[userland (computing)|userland]] components soon became operating systems based on the Linux kernel ([[Linux distribution]]s), prompting the coining of the term [[GNU/Linux naming controversy|''GNU/Linux'']].
With the release of the [[Linux kernel]] in 1991, the primary user of GNU's [[userland (computing)|userland]] components soon became operating systems based on the Linux kernel ([[Linux distribution]]s), prompting the coining of the term [[GNU/Linux naming controversy|''GNU/Linux'']].


Development of the Hurd has proceeded slowly. Despite an optimistic announcement by Stallman in 2002 predicting a release of GNU/Hurd later that year,<ref name="gnu-loose-linux" /> the Hurd is still not considered suitable for production environments. Development in general has not met expectations, and there are still a significant number of bugs and missing features.<ref name="hurd-status" /> This has resulted in a poorer product than many (including Stallman) had expected.<ref name="fsf-future-of-freedom" /> In 2010, after twenty years under development, Stallman said that he was "not very optimistic about the GNU Hurd. It makes some progress, but to be really superior it would require solving a lot of deep problems", but added that "finishing it is not crucial" for the GNU system because a free kernel already existed ([[Linux]]), and completing Hurd would not address the main remaining problem for a free operating system: device support.<ref name="reddit-interview-stallman" />
Development of the Hurd has proceeded slowly. Despite an optimistic announcement by Stallman in 2002 predicting a release of GNU/Hurd later that year,<ref name="gnu-loose-linux" /> the Hurd is still not considered suitable for production environments. Development in general has not met expectations, and there are still a significant number of bugs and missing features.<ref name="hurd-status" /> This has resulted in a poorer product than many, including Stallman, had expected.<ref name="fsf-future-of-freedom" /> In 2010, after twenty years under development, Stallman said that he was "not very optimistic about the GNU Hurd. It makes some progress, but to be really superior it would require solving a lot of deep problems", but added that "finishing it is not crucial" for the GNU system because a free kernel already existed ([[Linux]]), and completing Hurd would not address the main remaining problem for a free operating system: device support.<ref name="reddit-interview-stallman" />


The [[Debian]] project, among others, have worked on the Hurd project to produce binary distributions of [[Debian GNU/Hurd|Hurd-based GNU operating systems]] for [[IBM PC compatible]] systems.
The [[Debian]] project, among others, have worked on the Hurd project to produce binary distributions of [[Debian GNU/Hurd|Hurd-based GNU operating systems]] for [[IBM PC compatible]] systems.


After years of stagnation, development picked up again in 2015 and 2016, with four releases during these two years.<ref>{{Cite news|url=http://sdtimes.com/free-software-foundation-changes-priorities/|title=Free Software Foundation changes priorities - SD Times|date=2017-01-17|work=SD Times|access-date=2017-04-17|language=en-US}}</ref>
After years of stagnation, development picked up again in 2015 and 2016, with four releases during these two years,<ref>{{Cite news|url=http://sdtimes.com/free-software-foundation-changes-priorities/|title=Free Software Foundation changes priorities - SD Times|date=2017-01-17|work=SD Times|access-date=2017-04-17|language=en-US}}</ref> but no more since then.


On August 20, 2015, amid the [[Google Summer of Code]], it was announced that [[GNU Guix]] had been ported to GNU Hurd.<ref name="gsoc">{{cite mailing list|url=https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00379.html|title=[GSoC update] Porting Guix to GNU/Hurd|date=August 20, 2015|access-date=August 20, 2015|first=Manolis|last=Ragkousis|publisher=guix-devel}}</ref>
On August 20, 2015, amid the [[Google Summer of Code]], it was announced that [[GNU Guix]] had been ported to GNU Hurd.<ref name="gsoc">{{cite mailing list|url=https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00379.html|title=[GSoC update] Porting Guix to GNU/Hurd|date=August 20, 2015|access-date=August 20, 2015|first=Manolis|last=Ragkousis|publisher=guix-devel}}</ref>
Line 82: Line 82:
* '''auth''' ([[authentication server]]): Receives requests and passwords from programs and gives them an ID, which changes the privileges of the program.
* '''auth''' ([[authentication server]]): Receives requests and passwords from programs and gives them an ID, which changes the privileges of the program.
* '''crash''' ([[Crash (computing)|crash]] server): Handles all fatal errors.
* '''crash''' ([[Crash (computing)|crash]] server): Handles all fatal errors.
* '''[[Enforce In-order Execution of I/O|eieio]]''' (translation server): TODO (see [[#Computer bought the farm|Computer bought the farm]])
* '''[[Enforce In-order Execution of I/O|eieio]]''' (translation server): TODO
* '''exec''' (execution server): Translates an executable image (currently [[Executable and Linkable Format|ELF]] and [[a.out]] are supported) to a runnable image in memory.
* '''exec''' (execution server): Translates an executable image (currently [[Executable and Linkable Format|ELF]] and [[a.out]] are supported) to a runnable image in memory.
* '''fifo''' ([[FIFO (computing and electronics)|FIFO]] translator): Implements named pipes.
* '''fifo''' ([[FIFO (computing and electronics)|FIFO]] translator): Implements named pipes.
Line 96: Line 96:
* '''pflocal''' (pflocal server): Implements [[UNIX domain sockets]].
* '''pflocal''' (pflocal server): Implements [[UNIX domain sockets]].
* '''proc''' (process server): Assigns [[Process identifier|PIDs]] and manages process-level actions.
* '''proc''' (process server): Assigns [[Process identifier|PIDs]] and manages process-level actions.
* '''symlink''' ([[symbolic link]] translator): Implements symbolic links for filesystems that don't support them.
* '''symlink''' ([[symbolic link]] translator): Implements symbolic links for filesystems that do not support them.
* '''term''' (terminal server): A [[POSIX]] terminal.
* '''term''' (terminal server): A [[POSIX]] terminal.
* '''usermux''' (user multiplexer server): Invokes user-specific translators.
* '''usermux''' (user multiplexer server): Invokes user-specific translators.
Line 107: Line 107:
;nfs
;nfs
:See [[Network File System (protocol)|Network File System]].
:See [[Network File System (protocol)|Network File System]].
;ufs
:Translator for the BSD filesystem of the same name, [[Unix File System|UFS]].
;ftpfs
;ftpfs
: [[File transfer protocol]] filesystem translator.
: [[File transfer protocol]] filesystem translator.
Line 117: Line 115:


==GNU distributions running Hurd==
==GNU distributions running Hurd==
[[File:Gnu hurd debian 1.png|thumbnail|[[Debian GNU/Hurd]] with [[Xfce4]] and web browser [[Midori (web browser)|Midori]]]]
[[File:Debian GNU HURD XFCE desktop screenshot.png|thumbnail|[[Debian GNU/Hurd]] with [[Xfce]]]]


Hurd-based [[GNU variants|GNU distributions]] include:
Hurd-based [[GNU variants|GNU distributions]] include:
* [[Arch Hurd]]
* [[Arch Hurd]]
* Bee GNU/Hurd (discontinued)<ref>{{cite web |url=http://www.gnu.org/software/hurd/hurd/running/distrib.html |title= GNU Hurd/ hurd/ running/ distrib |website=Gnu.org |date=2015-05-03 |access-date=2017-09-21}}</ref>
* Bee GNU/Hurd (discontinued)<ref>{{cite web |url=http://www.gnu.org/software/hurd/hurd/running/distrib.html |title= GNU Hurd/ hurd/ running/ distrib |website=GNU |date=2015-05-03 |access-date=2017-09-21}}</ref>
* [[Debian GNU/Hurd]]
* [[Debian#Debian_GNU/Hurd|Debian GNU/Hurd]]
* [[Gentoo/Alt#Gentoo GNU Hurd|Gentoo GNU Hurd]] (discontinued)
* [[Gentoo/Alt#GNU Hurd|Gentoo GNU Hurd]] (discontinued)
* GNU/Hurd Live CD<ref name="Live CD">{{cite web |title=GNU Hurd/ hurd/ running/ live cd |website=Gnu.org |url=https://www.gnu.org/software/hurd/hurd/running/live_cd.html |date=2013-04-09 |access-date=2017-09-21}}</ref> (discontinued){{not in citation|date=September 2017}}
* GNU/Hurd Live CD<ref name="Live CD">{{cite web |title=GNU Hurd/ hurd/ running/ live cd |website=GNU |url=https://www.gnu.org/software/hurd/hurd/running/live_cd.html |date=2013-04-09 |access-date=2017-09-21}}</ref> (discontinued){{not in citation|date=September 2017}}
* [[GNU Guix System|Guix System]] (under development)
* [[GNU Guix System|Guix System]] (under development)


Line 130: Line 128:
{{Portal|Free and open-source software}}
{{Portal|Free and open-source software}}
<!-- Please keep entries in alphabetical order & add a short description [[WP:SEEALSO]] -->
<!-- Please keep entries in alphabetical order & add a short description [[WP:SEEALSO]] -->
{{div col|colwidth=20em|small=yes}}
* [[Comparison of operating system kernels]]
* [[Comparison of operating system kernels]]
* [[Free Software]]
* [[GNU variants|GNU distributions]]
* [[GNU variants|GNU distributions]]
* [[GNU Mach]]
* [[Linux-libre]] – a [[Free software|free]] version of the [[Linux kernel]]
* [[Kernel-based Virtual Machine]] (KVM)
* [[Kernel-based Virtual Machine]] (KVM)
* [[Linux-libre]] – a [[Free software|free]] version of the [[Linux kernel]]
* [[Multiboot Specification]]
* [[Multiboot Specification]]
{{div col end}}
<!-- please keep entries in alphabetical order -->
<!-- please keep entries in alphabetical order -->


Line 151: Line 145:
<ref name="gnu-loose-linux">{{cite web |last=Ribeiro |first=John |date=2002-03-11 |title=Free Software Sees GNU Loose of Linux |work=[[PC World (magazine)|PC World]] |url=http://www.pcworld.com/article/88464/article.html |access-date=2012-10-05 |archive-url=https://web.archive.org/web/20160922183417/http://www.pcworld.com/article/88464/article.html |archive-date=2016-09-22 |url-status=dead }}</ref>
<ref name="gnu-loose-linux">{{cite web |last=Ribeiro |first=John |date=2002-03-11 |title=Free Software Sees GNU Loose of Linux |work=[[PC World (magazine)|PC World]] |url=http://www.pcworld.com/article/88464/article.html |access-date=2012-10-05 |archive-url=https://web.archive.org/web/20160922183417/http://www.pcworld.com/article/88464/article.html |archive-date=2016-09-22 |url-status=dead }}</ref>
<ref name="hurd-status">{{cite web |title=Status |work=[[GNU]] |url=https://www.gnu.org/software/hurd/hurd/status.html |access-date=2010-03-04}}</ref>
<ref name="hurd-status">{{cite web |title=Status |work=[[GNU]] |url=https://www.gnu.org/software/hurd/hurd/status.html |access-date=2010-03-04}}</ref>
<ref name="fsf-future-of-freedom">{{cite web |last=Stallman |first=Richard |author-link=Richard Stallman |date=2006-03-09 |title=The Free Software Movement and the Future of Freedom |location=[[Zagreb]] |work=[[Free Software Foundation]] |lay-url=http://fsfeurope.org/documents/rms-fs-2006-03-09.en.html |url=http://mjesec.ffzg.hr/~dpavlin/stallman2006/free_software_movement_and_the_future_of_freedom_zagreb_09_march_2006.ogg |format=ogg |quote=This is the way, also, that people thought was the cleanest possible way to design kernels back in 1990. Well, it took many many many years to get this kernel to run at all, and it still doesn't run well, and it looks like there may be fundamental problems with this design, which nobody knew about back in 1990.}}</ref>
<ref name="fsf-future-of-freedom">{{cite web |last=Stallman |first=Richard |author-link=Richard Stallman |date=2006-03-09 |title=The Free Software Movement and the Future of Freedom |location=[[Zagreb]] |work=[[Free Software Foundation]] |url=http://mjesec.ffzg.hr/~dpavlin/stallman2006/free_software_movement_and_the_future_of_freedom_zagreb_09_march_2006.ogg |format=ogg |quote=This is the way, also, that people thought was the cleanest possible way to design kernels back in 1990. Well, it took many many many years to get this kernel to run at all, and it still doesn't run well, and it looks like there may be fundamental problems with this design, which nobody knew about back in 1990.}}
*{{cite web |author=Richard Stallman |title=The Free Software Movement and the Future of Freedom; March 9th 2006 |type=Lecture transcript |url=http://fsfeurope.org/documents/rms-fs-2006-03-09.en.html |archive-url=https://web.archive.org/web/20070112043637/http://fsfeurope.org/documents/rms-fs-2006-03-09.en.html |archive-date=2007-01-12 |website=Free Software Foundation Europe}}</ref>
<ref name="reddit-interview-stallman">{{cite web | url = https://redditblog.com/2010/07/rms-ama.html | title = RMS AMA | first = Richard | last = Stallman | author-link = Richard Stallman | date = 2010-07-29 | publisher = [[Reddit]] | access-date = 2011-12-07 }}</ref><!-- comments are at https://www.reddit.com/tb/cv7sw -->
<ref name="reddit-interview-stallman">{{cite web | url = https://redditblog.com/2010/07/rms-ama.html | title = RMS AMA | first = Richard | last = Stallman | author-link = Richard Stallman | date = 2010-07-29 | publisher = [[Reddit]] | access-date = 2011-12-07 }}</ref><!-- comments are at https://www.reddit.com/tb/cv7sw -->
<ref name="device-drivers-in-mach">{{cite mailing list | url = http://lists.gnu.org/archive/html/bug-hurd/2007-03/msg00089.html | title = Re: Device drivers in Mach? | first = Constantine | last = Kousoulos | mailing-list = bug-hurd | date = 2007-03-21 }}</ref>
<ref name="device-drivers-in-mach">{{cite mailing list | url = http://lists.gnu.org/archive/html/bug-hurd/2007-03/msg00089.html | title = Re: Device drivers in Mach? | first = Constantine | last = Kousoulos | mailing-list = bug-hurd | date = 2007-03-21 }}</ref>
Line 179: Line 174:
[[Category:Operating system distributions bootable from read-only media]]
[[Category:Operating system distributions bootable from read-only media]]
[[Category:Unix variants]]
[[Category:Unix variants]]
[[Category:X86-64 operating systems]]

Latest revision as of 09:41, 20 October 2024

GNU Hurd
DeveloperGNU Project
Thomas Bushnell
Roland McGrath
Marcus Brinkmann
Neal Walfield
Samuel Thibault
Written inAssembly, C
OS familyUnix-like
Working stateCurrent
Source modelFree software
Initial release1990; 34 years ago (1990)
Latest release0.9[1] Edit this on Wikidata / 18 December 2016
Repository
Platformsx86-64, IA-32, i686, ARM[2]
Kernel typeMultiserver microkernel
LicenseGPL-2.0-or-later[3]
Official websitewww.gnu.org/software/hurd/

GNU Hurd is a collection of microkernel servers written as part of GNU, for the GNU Mach microkernel. It has been under development since 1990 by the GNU Project of the Free Software Foundation, designed as a replacement for the Unix kernel,[4] and released as free software under the GNU General Public License. When the Linux kernel proved to be a viable solution, development of GNU Hurd slowed, at times alternating between stasis and renewed activity and interest.[5]

The Hurd's design consists of a set of protocols and server processes (or daemons, in Unix terminology) that run on the GNU Mach microkernel.[4] The Hurd aims to surpass the Unix kernel in functionality, security, and stability, while remaining largely compatible with it. The GNU Project chose the multiserver microkernel[6] for the operating system, due to perceived advantages over the traditional Unix monolithic kernel architecture,[7] a view that had been advocated by some developers in the 1980s.[5]

[edit]

In December 1991 the primary architect of the Hurd described the name as a mutually recursive acronym:[8]

It's time [to] explain the meaning of "Hurd". "Hurd" stands for "Hird of Unix-Replacing Daemons". And, then, "Hird" stands for "Hurd of Interfaces Representing Depth". We have here, to my knowledge, the first software to be named by a pair of mutually recursive acronyms.

As both hurd and hird are homophones of the English word herd, the full name GNU Hurd is also a play on the words herd of gnus, reflecting how the kernel works.[9]

The logo is called the Hurd boxes and it also reflects on architecture. The logo is a graph where nodes represent the Hurd kernel's servers and directed edges are IPC messages.[8]

Development history

[edit]

Richard Stallman founded the GNU Project in September 1983 with an aim to create a free GNU operating system.[10] Initially the components required for kernel development were written: editors, shell, compiler, debugger etc. By 1989, the GPL came into being and the only major component missing was the kernel.[11][12]

Development on the Hurd began in 1990 after an abandoned kernel attempt in 1986, based on the research TRIX operating system developed by Professor Steve Ward and his group at MIT's Laboratory for Computer Science (LCS).[13] According to Thomas Bushnell, the initial Hurd architect, their early plan was to adapt the 4.4BSD-Lite kernel and, in hindsight, "It is now perfectly obvious to me that this would have succeeded splendidly and the world would be a very different place today."[14] In 1987 Richard Stallman proposed using the Mach microkernel developed by Richard Rashid at Carnegie Mellon University. Work on this was delayed for three years due to uncertainty over whether CMU would release the Mach code under a suitable license.[13]

With the release of the Linux kernel in 1991, the primary user of GNU's userland components soon became operating systems based on the Linux kernel (Linux distributions), prompting the coining of the term GNU/Linux.

Development of the Hurd has proceeded slowly. Despite an optimistic announcement by Stallman in 2002 predicting a release of GNU/Hurd later that year,[15] the Hurd is still not considered suitable for production environments. Development in general has not met expectations, and there are still a significant number of bugs and missing features.[16] This has resulted in a poorer product than many, including Stallman, had expected.[17] In 2010, after twenty years under development, Stallman said that he was "not very optimistic about the GNU Hurd. It makes some progress, but to be really superior it would require solving a lot of deep problems", but added that "finishing it is not crucial" for the GNU system because a free kernel already existed (Linux), and completing Hurd would not address the main remaining problem for a free operating system: device support.[18]

The Debian project, among others, have worked on the Hurd project to produce binary distributions of Hurd-based GNU operating systems for IBM PC compatible systems.

After years of stagnation, development picked up again in 2015 and 2016, with four releases during these two years,[19] but no more since then.

On August 20, 2015, amid the Google Summer of Code, it was announced that GNU Guix had been ported to GNU Hurd.[20]

Architecture

[edit]
General structure of monolithic, microkernel and hybrid kernel-based operating systems, respectively.

Unlike most Unix-like kernels, the Hurd uses a server–client architecture, built on a microkernel that is responsible for providing the most basic kernel services – coordinating access to the hardware: the CPU (through process management and scheduling), RAM (via memory management), and other various input/output devices (via I/O scheduling) for sound, graphics, mass storage, etc. In theory, the microkernel design would allow for all device drivers to be built as servers working in user space, but today most drivers of this kind are still contained in the GNU Mach kernel space.[21]

According to Hurd developers, the main advantage of microkernel-based design is the ability to extend the system: developing a new module would not require in depth knowledge of the rest of the kernel, and a bug in one module would not crash the entire system. Hurd provides a concept of translators, a framework of modules used to extend a file system functionality.[22]

From early on, the Hurd was developed to use GNU Mach as the microkernel. This was a technical decision made by Richard Stallman, who thought it would speed up the work by saving a large part of it. He has admitted that he was wrong about that.[23] Other Unix-like systems working on the Mach microkernel include OSF/1, Lites, and MkLinux. macOS and NeXTSTEP use hybrid kernels based on Mach.

Other microkernels

[edit]

From 2004 onward, various efforts were launched to port the Hurd to more modern microkernels. The L4 microkernel was the original choice in 2004, but progress slowed to a halt. Nevertheless, during 2005, Hurd developer Neal Walfield finished the initial memory management framework for the L4/Hurd port, and Marcus Brinkmann ported essential parts of glibc; namely, getting the process startup code working, allowing programs to run, thus allowing the first user programs (trivial ones such as the hello world program) in C to run.

Since 2005, Brinkmann and Walfield started researching Coyotos as a new kernel for HURD.[24][25] In 2006, Brinkmann met with Jonathan Shapiro (a primary architect of the Coyotos Operating System) to aid in and discuss the use of the Coyotos kernel for GNU/Hurd. In further discussion HURD developers realised that Coyotos (as well as other similar kernels) are not suitable for HURD.[26]

In 2007, Hurd developers Neal Walfield and Marcus Brinkmann gave a critique of the Hurd architecture, known as "the critique",[27] and a proposal for how a future system may be designed, known as "the position paper".[28] In 2008, Neal Walfield began working on the Viengoos microkernel as a modern native kernel for HURD. As of 2009, development on Viengoos is paused due to Walfield lacking time to work on it.[29]

In the meantime, others have continued working on the Mach variant of Hurd.[30]

Unix extensions

[edit]

A number of traditional Unix concepts are replaced or extended in the Hurd.

Under Unix, every running program has an associated user id, which normally corresponds to the user that started the process. This id largely dictates the actions permitted to the program. No outside process can change the user id of a running program. A Hurd process, on the other hand, runs under a set of user ids, which can contain multiple ids, one, or none. A sufficiently privileged process can add and remove ids to another process. For example, there is a password server that will hand out ids in return for a correct login password.

Regarding the file system, a suitable program can be designated as a translator for a single file or a whole directory hierarchy. Every access to the translated file, or files below a hierarchy in the second case, is in fact handled by the program. For example, a file translator may simply redirect read and write operations to another file, like a Unix symbolic link. The effect of Unix mounting is achieved by setting up a filesystem translator (using the "settrans" command). Translators can also be used to provide services to the user. For example, the ftpfs translator allows a user to encapsulate remote FTP sites within a directory. Then, standard tools such as ls, cp, and rm can be used to manipulate files on the remote system. Even more powerful translators are ones such as UnionFS, which allows a user to unify multiple directories into one; thus listing the unified directory reveals the contents of all the directories.

The Hurd requires a multiboot-compliant boot loader, such as GRUB.

Architecture of the servers

[edit]

According to the Debian documentation, there are 24 servers (18 core servers and 6 file system servers) named as follows:[31]

Core servers

[edit]
  • auth (authentication server): Receives requests and passwords from programs and gives them an ID, which changes the privileges of the program.
  • crash (crash server): Handles all fatal errors.
  • eieio (translation server): TODO
  • exec (execution server): Translates an executable image (currently ELF and a.out are supported) to a runnable image in memory.
  • fifo (FIFO translator): Implements named pipes.
  • new-fifo (new FIFO server): An alternate server for named pipes.
  • firmlink (the firmlink translator): Implements firmlinks ‒ "half-way between a symbolic link and a hard link".[32]
  • fwd (forward server): Forwards requests to other servers, used by fifo and symlink servers.
  • hostmux (host multiplexer server)
  • ifsock (server for sockets interface): Helps with UNIX domain socket addresses.
  • init (init server): Basic system booting and configuration.
  • magic (magic server): Signals that a name lookup must be resolved internally by a process when the result involves the process's state.
  • null (null server): Implements /dev/null and /dev/zero.
  • pfinet (pfinet server): Implements the PF_INET protocol family.
  • pflocal (pflocal server): Implements UNIX domain sockets.
  • proc (process server): Assigns PIDs and manages process-level actions.
  • symlink (symbolic link translator): Implements symbolic links for filesystems that do not support them.
  • term (terminal server): A POSIX terminal.
  • usermux (user multiplexer server): Invokes user-specific translators.

Filesystem servers

[edit]
ext2fs
The ext2 filesystem translator. It receives disk blocks from the microkernel and gives files and directories to the applications.
isofs
The translator for the ISO 9660 filesystem. Translates blocks of a CD or DVD to files and directories for the applications.
nfs
See Network File System.
ftpfs
File transfer protocol filesystem translator.
storeio
The storage translator.

The servers collectively implement the POSIX API, with each server implementing a part of the interface. For instance, the various filesystem servers each implement the filesystem calls. The storage server will work as a wrapping layer, similar to the block layer of Linux. The equivalent of VFS of Linux is achieved by libdiskfs and libpager libraries.

GNU distributions running Hurd

[edit]
Debian GNU/Hurd with Xfce

Hurd-based GNU distributions include:

See also

[edit]

References

[edit]
  1. ^ "GNU Hurd 0.9, GNU Mach 1.8, GNU MIG 1.8 released". Retrieved 11 May 2018.
  2. ^ "GNU Hurd ported to AArch64, and more Hurd news". osnews.com. Retrieved 22 April 2024.
  3. ^ "COPYING - hurd/hurd.git - Hurd". Git.savannah.gnu.org. Retrieved 25 February 2019.
  4. ^ a b "What Is the GNU Hurd?". GNU. Retrieved 2010-03-04.
  5. ^ a b Tozzi, Christopher (2015-04-20). "30 Years On, HURD Lives: GNU Updates Open Source Unix Kernel". The VAR Guy. Archived from the original on 2015-04-24.
  6. ^ "What is a Multiserver Microkernel?". GNU. 2013-04-13. Retrieved 2015-08-11.
  7. ^ "advantages". GNU. Retrieved 2011-12-07.
  8. ^ a b Vervloesem, Koen (July 7, 2010). "The Hurd: GNU's quest for the perfect kernel". LWN.net. Retrieved October 5, 2012.
  9. ^ "GNU Hurd: Origin of the Name". GNU. Retrieved 2010-03-04.
  10. ^ "GNU History". cs.stanford.edu. Retrieved 2024-09-03.
  11. ^ Hillesley, Richard (June 30, 2010). "GNU HURD: Altered visions and lost promise". Retrieved October 1, 2012.
  12. ^ "Linux and the GNU Project". GNU. 2010-01-26. Retrieved 2010-03-04.
  13. ^ a b "The GNU Hurd History, 'How it Started'". GNU. Retrieved 2006-08-27.
  14. ^ Salus, Peter. "The Daemon, the GNU and the Penguin". Retrieved 2006-08-08.
  15. ^ Ribeiro, John (2002-03-11). "Free Software Sees GNU Loose of Linux". PC World. Archived from the original on 2016-09-22. Retrieved 2012-10-05.
  16. ^ "Status". GNU. Retrieved 2010-03-04.
  17. ^ Stallman, Richard (2006-03-09). "The Free Software Movement and the Future of Freedom" (ogg). Free Software Foundation. Zagreb. This is the way, also, that people thought was the cleanest possible way to design kernels back in 1990. Well, it took many many many years to get this kernel to run at all, and it still doesn't run well, and it looks like there may be fundamental problems with this design, which nobody knew about back in 1990.
  18. ^ Stallman, Richard (2010-07-29). "RMS AMA". Reddit. Retrieved 2011-12-07.
  19. ^ "Free Software Foundation changes priorities - SD Times". SD Times. 2017-01-17. Retrieved 2017-04-17.
  20. ^ Ragkousis, Manolis (August 20, 2015). "[GSoC update] Porting Guix to GNU/Hurd" (Mailing list). guix-devel. Retrieved August 20, 2015.
  21. ^ Kousoulos, Constantine (2007-03-21). "Re: Device drivers in Mach?". bug-hurd (Mailing list).
  22. ^ Doeppner, Thomas W. (20 December 2010). Operating Systems In Depth: Design and Programming. John Wiley & Sons. p. 160. ISBN 978-0-471-68723-8. Retrieved 29 November 2012.
  23. ^ Stallman, Richard (2000-10-12). "In Defense of Red Hat". Linux Today. Retrieved 2011-12-07. I take full responsibility for the technical decision to develop the GNU kernel based on Mach, a decision which seems to have been responsible for the slowness of the development. I thought using Mach would speed the work by saving us a large part of the job, but I was wrong.
  24. ^ Shapiro, Jonathan S. (2005-10-27). "Re: A comment about changing kernels". l4-hurd (Mailing list).
  25. ^ Bachmann, Tom (2006-07-07). "Re: seL4, L4.sec and coyotos mess". l4-hurd (Mailing list).
  26. ^ "Porting the Hurd to another microkernel". GNU Hurd. Free Software Foundation. Retrieved 2017-05-06.
  27. ^ Walfield, Neal H.; Brinkmann, Marcus (July 2007). "A Critique of the GNU Hurd Multi-server Operating System" (PDF). GNU. Retrieved 2011-12-07.
  28. ^ Walfield, Neal H.; Brinkmann, Marcus (2007-01-04). "Improving Usability via Access Decomposition and Policy Refinement" (PDF). GNU. Retrieved 2011-12-07.
  29. ^ "viengoos". GNU. Retrieved 2010-03-04.
  30. ^ "What happened to the L4/Coyotos/viengoos micro-kernels?". GNU. Retrieved 2011-01-07.
  31. ^ "Preliminary GNU/Hurd User Interface Description". Debian. 1996-10-10. Retrieved 2010-03-04.
  32. ^ "GNU/Hurd - Documentation". Debian. 1996-10-10. Retrieved 2012-07-12.
  33. ^ "GNU Hurd/ hurd/ running/ distrib". GNU. 2015-05-03. Retrieved 2017-09-21.
  34. ^ "GNU Hurd/ hurd/ running/ live cd". GNU. 2013-04-09. Retrieved 2017-09-21.
[edit]