'GNU Hurd' (usually referred to as 'the Hurd') is a
free software computer
operating system kernel, released under the
GNU General Public License. It has been under development since
1990 by the
GNU Project of the
Free Software Foundation. It consists of a set of
servers (or
daemons, in
Unix terminology) that work on top of a
microkernel; together they form the
kernel of
GNU. The Hurd aims to surpass
Unix kernels in functionality, security, and stability, while remaining largely compatible with them.
''HURD'' is a co-
recursive acronym, standing for ''HIRD of Unix-Replacing Daemons'', where ''HIRD'' stands for ''HURD of Interfaces Representing Depth''. It is also a play on the words ''
herd of
gnus'', reflecting how it works.
[1]
Development history
Development on the GNU operating system began in 1984 and progressed rapidly. By the early 1990s, the only major component missing was the kernel.
[2]
Development on the Hurd began in
1990, after an abandoned kernel attempt started from the finished research
Trix operating system developed by Professor
Steve Ward and his group at
MIT's
Laboratory for Computer Science (LCS).
[3] According to
Thomas Bushnell, the initial Hurd architect, their early plan was to adapt the
BSD 4.4-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".
[4] However, due to a lack of cooperation from the
Berkeley programmers,
Richard Stallman decided instead to use the
Mach microkernel, which subsequently proved unexpectedly difficult, and the Hurd's development proceeded slowly. With the release of the
Linux kernel, the primary consumer of GNU's
userland components became the
Linux operating system, prompting the coining of the
controversial term ''GNU/Linux''.
Despite an optimistic announcement by Stallman in
2002[5] predicting a release of GNU/Hurd, there are still problems with the code, and some design elements remain unfinished. The latest builds of the Hurd are suitable for use in non-critical applications, but not yet suitable for production environments. Development in general has not met expectations, and there are still bugs and missing features
[6]. This has resulted in a poorer product than many (including Stallman) had anticipated.
[7]
The
Debian project, among others, have started work on the HURD project to speed up development.
[8]
Architecture
Unlike the majority of
Unix-like kernels, the Hurd builds on top of a
microkernel which is responsible for providing the most basic kernel services — coordinating access to the
hardware: the
CPU (through
multiprocessing),
RAM (via
memory management), and other various devices 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 inside
GNU Mach, the currently used microkernel. That is because initially user-space drivers would have suffered from performance loss, due to the overhead of the Mach interprocess communication. With the performance of today's machines, it is possible that this overhead would no longer cause a significant performance problem.
[9]
Choice of microkernel
From early on, the Hurd was developed to use
GNU Mach as the microkernel. This was a technical decision made by Richard Stallman, and one that he later saw as a mistake.
[10]
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. In 2005, there was a discussion of whether to change to L4.sec (a different L4 microkernel) or to
Coyotos (
EROS successor).
[11] Although no formal decision was made, most of the Hurd developers' time has gone into thinking about Coyotos,
[12] especially since 2006.
Other Unix-like systems working on top of the
Mach microkernel include
OSF/1,
Lites, and
MkLinux. These are implemented as a single Unix ''server'' which, together with the microkernel, replaces the
monolithic kernel of a traditional Unix system.
Mac OS X and
NEXTSTEP use monolithic kernels based on Mach, often incorrectly believed to be microkernels. Instead, in the Hurd, each of these is handled by a separate server process.
Such a "set of servers" was one of the main design goals of
Mach, but Hurd appears to be the first Mach-based system to be implemented in this way. (
QNX and
Minix-3 are similar but based on their own microkernels.) It is not entirely clear why this happened, but it might have something to do with the high performance hit of Mach IPC. Hurd also aims to be microkernel-independent.
OSKit-Mach began as a branch of the GNU Mach 1.2 kernel, but since the release of GNU Mach 1.3 was merged as the new GNU Mach 2.x mainline.
In
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.
In 2006, Marcus Brinkmann and associates 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. These discussions continued into 2007, but progress is slow.
Unix extensions
A number of traditional Unix concepts are replaced or extended in the Hurd.
Under Unix every program running 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, not unlike 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 (a feature that is missing in many Unices, although available in modern
BSDs).
The Hurd requires a
multiboot-compliant
boot loader, such as
GRUB.
Architecture of the servers
According to the Debian documentation there are 24 servers (18 core servers and 6 file system servers) named as follows:
[1]
Core servers
★ 'auth' (authentication server) : Receives requests and passwords from programs and gives them an ID, which changes the privileges of the program.
★ 'crash' (crash server):
★ 'exec' (execution server): Translates an executable image (currently ELF and a.out are supported) to a runnable image in memory.
★ 'fifo' (
FIFO translator):
★ 'new-fifo' (new
FIFO server)
★ 'firmlink' (the firmlink translator):
★ 'fwd' (forward server)
★ 'hostmux' (host multiplexer server);
★ 'ifsock' (server for sockets interface):
★ 'init' (init server)
★ 'magic' (magic server)
★ 'null' (null server): implements /dev/null and /dev/zero
★ 'pfinet' (pfinet server)
★ 'pflocal' (pflocal server)
★ 'proc' (process server)
★ 'symlink' (symbolic link translator)
★ 'term' (terminal server)
★ 'usermux' (user multiplexer server)
Filesystem servers
;The ext2fs server "ext2fs"
:The
ext2 filesystem translator. It receives disk blocks from the microkernel and gives files and directories to the applications.
;The iso filesystem server "isofs"
:The translator for the
ISO 9660 filesystem. Translates blocks of a CD or DVD to files and directories for the applications.
;The nfs server "nfs"
:See
Network File System.
;The ufs server "ufs"
:Translator for the BSD filesystem of the same name,
UFS.
;The ftp filesystem translator "ftpfs"
:See
File transfer protocol
;"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
VFS of
Linux.
GNU/Hurd-based distributions
:See also
List of LiveDistros#GNU-based
★
Bee GNU/Hurd
★
Debian GNU/Hurd
★
★
Disk image with an installation of the Debian GNU/Hurd
★
Superunprivileged.org GNU/Hurd Live CD
See also
★
Free Software Foundation
★
Hurd User Group
★
GNU
★
Computer bought the farm - an error message
References
1. http://www.gnu.org/software/hurd/hurd.html#name
2. http://www.gnu.org/gnu/linux-and-gnu.html
3. The GNU Hurd History, "How it Started"
4. The Hurd and BSDI Peter H. Salus
5. Free Software Sees Gnu Loose of Linux John Ribeiro
6. http://www.gnu.org/software/hurd/hurd.html#status
7. "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." "The Free Software Movement and the Future of Freedom; March 9th 2006", transcript of a lecture given by Richard Stallman in Zagreb.
8. Debian GNU/HURD project
9. http://lists.gnu.org/archive/html/bug-hurd/2007-03/msg00089.html
10. Richard Stallman: In Defense of Red Hat
11. http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00755.html
12. http://lists.gnu.org/archive/html/l4-hurd/2006-07/msg00004.html
External links
★
The GNU Hurd
★
The GNUFans Wiki - unofficial but current documentation of the Hurd
★
Towards a New Strategy of OS Design
★
Debian GNU/Hurd installation CDs
★
Interview with
Neal Walfield, Hurd and
Hurd/L4 developer. (2001)
★
Interview with
Marcus Brinkmann, Hurd and
Hurd/L4 developer. (2005)
★
A GNU/Hurd on Mach LiveCD, based on Debian GNU/Hurd (
mirror here)
★ http://hurd.gnufans.org/bin/view/Hurd/NextHurd
★ http://www.gnu.org/software/hurd/hurd-l4.html