The GNU/Hurd FAQ <author>Edited by Stephen L. Favor (<htmlurl url="mailto:sfavor@corridor.com" name="sfavor@corridor.com">) <date>$Date: 2001/09/26 21:00:08 $ <abstract> This document contains frequently asks questions concerning the GNU Hurd operating system. Please direct your questions concerning this document to <htmlurl url="mailto:gnu-hurd-faq@fig.org" name="FAQ Maintainer">. </abstract> </titlepag> <toc> <sect>Meta-questions <sect1>In what format is this document written?<p> The Linuxdoc-SGML DTD (which is part of SGML-Tools) was used to write this document. It is also available as: <itemize> <item><url url="gnu-hurd-faq.sgml" name="SGML source"> <item><url url="gnu-hurd-faq.tex" name="LaTeX"> <item><url url="gnu-hurd-faq.ps" name="PostScript"> <item><url url="gnu-hurd-faq.txt" name="Plain Text"> </itemize> <sect1>Where do I get the latest version of this document?<p> The latest copy may be found at <url url="http://www.corridor.com/~sfavor/hurd-faq/gnu-hurd-faq.html"> and <url url="http://rampages.onramp.net/~sfavor/hurd-faq/gnu-hurd-faq.html">. <sect1>Where do I send questions, corrections, etc. about?<p> Please send all corrections, suggestions, comments, etc. to the <htmlurl url="mailto:gnu-hurd-faq@fig.org" name="FAQ Maintainer">. <sect1>(How) Can I redistribute this file?<p> This document is copyright 1998 Stephen L. Favor. This document is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. <sect>Definitions and Overview <sect1>What is the Hurd?<p> The GNU Hurd is the GNU project's replacement for the Unix kernel. The Hurd is a collection of servers that run on the Mach micro-kernel to implement file systems, network protocols, file access control, and other features that are implemented by the Unix kernel or similar kernels (such as Linux).<p> <sect1>What does "Hurd" stand for?<p> "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. --Thomas Bushnell <sect1>Why bother writing a new OS when we have Linux and 386/BSD?<p> For one thing, Linux and BSD don't scale well. Hardware designers are shifting more and more toward multiprocessor machines for performance, and standard Unix kernels do not provide much multiprocessor support. The Hurd, on the other hand, runs on top of the Mach 3.0 micro-kernel from CMU. Mach was designed precisely for multiprocessing machines, so its portability should carry over nicely to the Hurd. In addition, the Hurd will be considerably more flexible and robust than generic Unix. Wherever possible, Unix kernel features have been moved into unprivileged space. Once there, anyone who desires can develop custom replacements for them. Users will be able to write and use their own file systems, their own `exec' servers, or their own network protocols if they like, all without disturbing other users. The Linux kernel has now been modified to allow user-level file systems, so there is proof that people will actually use features such as these. It will be much easier to do under the Hurd, however, because the Hurd is almost entirely run in user space and because the various servers are designed for this sort of modification. <sect1>What is Mach 3.0/4.0?<p> Mach 4.0 is an enhanced version of Mach 3.0, put out by the people at the University of Utah. They are working on another free operating system, and part of it includes an enhanced, more flexible version of Mach. The Hurd has moved to Mach 4.0, which is good, because it is a lot easier to build than 3.0 was. You can find more information on Mach by browsing the Hurd pages given in the next answer, or by looking at the Mach Project and Flux home-pages at: See <url url="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/www/mach.html" name="The Mach Project Home Page"> and <url url="http://www.cs.utah.edu/projects/flux/mach4/html" name="The Mach 4 Project"> for more information. <sect1>What is a micro-kernel?<p> A more descriptive term might be a greatest-common-factor kernel, since it provides facilities common to all ``real'' operating systems, such as memory management, interprocess communication, processes, and a bunch of other stuff. Unfortunately, the system calls used to access these facilities are only vaguely related to the familiar and cherished Unix system calls. There are no "fork", "wait", or "sleep" system-calls, no SIGHUPs, nothing like that. All this makes it rather difficult to, say, port GNU Emacs to a Mach box. <sect1>How does GNU Hurd use a micro-kernel?<p> One way to make a micro-kernel usable is to make it emulate Unix. Unix programs can then use (what they think are) POSIX system calls and facilities while they are really using the micro-kernel's system calls and facilities. The simplest way of going about this is to take an ordinary Unix kernel, open it up, and rip out all the machine-specific guts; any time the Unix kernel talks to the machine, replace the code with calls to the Mach micro-kernel. Run this fake kernel on a Mach machine and you end up with something that looks and acts just like Unix (even to GNU Emacs). Note that the Unix kernel we have implemented is just one Really Big Mach program (called a single-server). The Hurd, on the other hand, breaks the giant Unix kernel down into various Mach programs running as daemons. Working in concert with facilities placed in the C library, these daemons provide all of the POSIX system-calls and features; from the outside they look just like a standard Unix kernel. This means that, for practical purposes, anything that you can port to Linux will also port to the Hurd. Of course, if a user wishes to run his own daemons, he can do that as well.... <sect1>Could the Hurd run on top of Linux?<p> Maybe. Currently, Linux is not a micro-kernel, so the pat answer at present is that this is not possible. On the other hand, there is support for the idea. The real question here is "Could Linux be a micro-kernel?" which isn't really in the scope of this document. For further information on this topic, you should consult the <url name="Linux FAQ" url="http://www.li.org/Resources/linux-faq/index.html"> for an appropriate mailing list or newsgroup for your questions. You might also find the <url name="Apple/Open Group's MkLinux" url="http://www.mklinux.apple.com"> of interest. This is a version of Linux which is Mach (micro-kernel) based. <sect1>Where can I get more information?<p> You can check out the FSF's <url url="http://www.gnu.org/software/hurd/hurd.html" name="GNU Hurd Information"> page, <url url="http://www.fig.org/software/hurd/hurd.html" name="Unofficial GNU Hurd Page">, and <url url="http://www.cs.pdx.edu/~trent/gnu/hurd" name="Trent Fisher's Hurd Page"> (which he is transferring to the GNU site). You may also wish to subscribe to and/or send questions one of the following mailing lists:<p> <descrip> <tag/<htmlurl url="mailto:debian-hurd@lists.debian.org" name="debian-hurd@lists.debian.org">/ This is a discussion list for the Debian release of GNU/Hurd. Send comments and questions concerning this distribution here. Subscribe to this list by asking <htmlurl url="mailto:debian-hurd-request@lists.debian.org" name="debian-hurd-request@lists.debian.org">. <tag/<htmlurl url="mailto:help-hurd@gnu.org" name="help-hurd@gnu.org">/ This is a discussion list for the GNU Hurd kernel. Send comments and questions concerning the GNU Hurd kernel to this list. Subscribe to the list by asking <htmlurl url="mailto:help-hurd-request@gnu.org" name="help-hurd-request@gnu.org">. <tag/<htmlurl url="mailto:bug-hurd@gnu.org" name="bug-hurd@gnu.org">/ This is the GNU Hurd bug list. Send bug reports for the GNU Hurd kernel to this list. Subscribe to this list by asking <htmlurl url="mailto:bug-hurd-request@gnu.org" name="bug-hurd-request@gnu.org">. <tag/hurd-announce@gnu.org/ This is where GNU Hurd announcements are sent. Subscribe to this list by asking <htmlurl url="mailto:hurd-announce-request@gnu.org" name="hurd-announce-request@gnu.org">. </descrip> <sect1>I think this is cool! How do I help?<p> The best way to get involved is to join in the discussions on one or more of the mailing lists mentioned above. If you've decided to code/port/hack some part of the Hurd and/or Debian distribution of it, please post to the lists what you intend to work on so there is some record of who is working on what. <sect>Hardware Requirements <sect1>On what architectures/systems does GNU Hurd run?<p> The current goal of Debian GNU/Hurd is to create a binary distribution for the i386 architecture; this covers PCs based on Intel-compatible processors, including Intel's80386, 80486, Pentium, and Pentium Pro, and compatible processors by AMD, Cyrix and others. <sect1>What sort of machines will run Hurd in the future?<p> The first thing a prospective Hurd machine needs is a Mach 3.0 port. According to the most recent "comp.os.mach" FAQ (which hasn't been updated since February 1994), the following chips have redistributable Mach micro-kernels and device drivers: <itemize> <item>Intel 80x86 (ISA and PS/2 buses) <item>Motorola 68000 (Sun 3) <item>Motorola 88000 (Omron Luna) <item>DEC Vax <item>DEC Pmax (DECstation 3100) <item>DEC Alpha <item>MIPS R4000 (DECstation 5000 et al.) <item>IBM RS/6000 <item>Apple Macintosh </itemize> IBM is planning to run WorkplaceOS (the OS/2 successor) over Mach 3.0 on the PowerPC chip (closely related to the RS/6000), so the PowerPC will likely be added to this list soon. The University of Utah has ported Mach 4.0 to the HP700, but it is not yet stable. Sun Sparc machines have a redistributable Mach micro-kernel, but the device drivers require a SunOS 4.1.1 source license. In addition, any prospective Hurd machine needs a port of the GNU C library. Version 1.07.4 of the library can handle the following chips: <itemize> <item>Intel 80x86 (BSD, Dynix, Hurd, SCO, SysV) <item>Motorola 68000 (HP BSD, NEWS, Sun 4) <item>MIPS R4000 (Ultrix) <item>Sun Sparc (Solaris 2, Sun 4) <item>DEC Alpha (OSF/1, mostly finished) </itemize> So if the next Hurd snapshot is self-hosting, we will be able to run it (in theory) on Intel 80x86s, Motorola 68000s, MIPS R4000s and DEC Alphas. People who can port the Mach micro-kernel to new architectures are encouraged to do so. People who can port the GNU C library to new chips (a much larger group) are also encouraged to do so. You can help out here without knowing anything about Mach or having any special machine. Note that once the GNU C library exists for a new chip, for _any_ OS, making a Hurd port later is simple (and making ports to other chips becomes easier as well---the effects are cumulative). By current indications, the other hardware requirements (RAM, disk space, and the like) will be about the same as those of BSD 4.4. <sect>Software <sect1>Can I run Linux binaries on GNU Hurd?<p> Currently, this is not possible. On the other hand, there are quite a few people who really want to make this work, so it is likely to happen in the near future. <sect1>Can I run the X Window System on GNU Hurd?<p> UCHIYAMA Yasushi <htmlurl url="mailto:uch@nop.or.jp" name="uch@nop.or.jp"> has written patches to make X work with the Hurd. These may be found at <url url="ftp://ftp.nop.or.jp/pub/gnu-0.2/XFree86/3.3.2">. <sect>Getting, Installing and Working on GNU Hurd<p> <sect1>Where do I get it?<p> Look at the <url name="Debian/GNU Hurd FAQ" url="debian-gnu-hurd-faq.html"> under the same question. <sect1>What is GRUB?<p> GRUB is an attempt to produce a bootloader for IBM PC-compatible machines that has both the capability to be friendly to beginning or otherwise non-technically interested users and the flexibility to help experts in diverse environments. It is currently most useful for users of at least one of the various free UNIX-like operating systems, though it can be used with most any PC operating system. For more information, see <url url="http://www.gnu.org/software/grub/" name="GRUB -- GRand Unified Bootloader"> by Gordon Matzigkeit. <sect1>How do I configure GRUB to boot my machine?<p> There are many variations within this realm. You should read through the <url name="GRUB FAQ" url="http://www.uruk.org/grub/faq.html"> for general information on this topic. <sect1>How to I make GRUB boot from the floppy but run from the hard disk?<p> The GRUB needs four arguments to start the HURD. It's best to enter these interactively using the c, command line option at first. When you are sure you know the right arguments, edit the /boot/grub/menu.lst file to automate this. root=(fd0) This is the root file system for the files GRUB is looking for. Since we are booting off the floppy, we use the GRUB disk name of (fd0). Note the brackets are important. Please note this is different from the root argument on the following line. kernel= /boot/gnumach.gz root=sd0s4 The mach kernel takes arguments much as the linux kernel does. It lives on the device specified above, but we want it to use a root partition on the hard disk after it starts. root=sd0s4 tells it to use the fourth partition on the first scsi disk. This is a Mach disk name as it is a argument passed to the mach kernel. Your root may be different, for example it could be root=hd0s2 for the second partition on the first IDE drive. module= /boot/serverboot.gz This file is on the floppy disk. And is loaded by the GRUB. boot This command starts the boot process. <sect1>How can I better understand the source code?<p> There are indexes of the source code for both GNU Hurd 0.2 and GNU Mach 1.1.3 available from the <url url="http://wafu.netgate.net/tama/unix/indexe.html" name="GLOBAL Project">. Also, <url name="Andrew Archibald" url="mailto:aarchiba@calum.csclub.uwaterloo.ca"> was working on applying the <url name="Linux Cross-Reference Project" url="http://lxr.linux.no/">'s tools to the Hurd source code at one time. <sect>Miscellaneous Sources of Information <p> <sect1>Partitioning nomenclature<p> <url name="Partitioning nomenclature" url="http://www.serv.net/~sand/hurd/partitions.html"> This page discusses the hard disk partitioning schemes used by Linux and Net-BSD. It includes information on how to make the Mach micro-kernel deal with either system, or with both simultaneously. Any person who wants to use the Hurd alongside Linux should read this page. <sect1>The Extended 2 filesystem on the Hurd<p> <url name="The Extended 2 filesystem on the Hurd" url="http://www.serv.net/~sand/hurd/e2fsck.html">/ The Hurd implements a superset of the Extended 2 file-system, originally designed for Linux. On the whole, this is a Good Thing, but there are some trouble spots to keep in mind. If you are sharing disk space between Linux and the Hurd you must read this page. <sect1>Installing from a Linux Box<p> <url name="Installing from a Linux Box" url="http://www.serv.net/~sand/hurd/install.html">/ The installation document that comes with the Hurd gives instructions for bootstrapping from a Net-BSD system. It is possible to bootstrap the Hurd from a Linux box, and this page describes how. Read this page after you have read sections one and two. <sect1>GRUB is complaining about a Disk Geometry Error<p> <url name="GRUB is complaining about a Disk Geometry Error" url="http://www.serv.net/~sand/hurd/geometry.html">/ Like LILO, GRUB has problems understanding all disk geometries. This page give a bit more info. <sect1>The Mach console<p> <url name="The Mach console" url="http://www.serv.net/~sand/hurd/console.html">/ The Mach console is what you interact with when running the Hurd in single user mode. It is both the keyboard and the monitor. At the present time, the console has some bugs and some missing features. This page talks about how to fix them. <sect1>Emacs crashing?<p> <url name="Emacs crashing?" url="http://www.serv.net/~sand/hurd/emacsbug.html">/ If Emacs is crashing when you attempt to run it, and you are not connected to a network, then you have probably encountered a known, and fixable bug. Read this page to find the solution. <sect>Contributors<p> <itemize> <item><url name="Erich Boleyn" url="http://www.uruk.org/~erich"> <item><url name="Thomas Bushnell" url="mailto:mib@gnu.ai.mit.edu"> <item><url name="Remy Card" url="mailto:Remy.Card@masi.ibp.fr"> <item><url name="Louis-Dominique Dubeau" url="hallu@info.polymtl.ca"> <item><url name="Trent Fisher" url="mailto:trent@gnurd.uu.pdx.edu"> <item><htmlurl name="jlr@usoft.spb.su" url="mailto:jlr@usoft.spb.su"> <item><url name="Michael F. Maggard" url="mailto:mbear@spdcc.com"> <item><url name="David Maslen" url="mailto:david@binary.net.au"> <item><url name="Gordon Matzigkeit" url="mailto:gord@fig.org"> <item><url name="Len Tower" url="mailto:tower@gnu.ai.mit.edu"> <item><url name="Derek Upham" url="sand@celia.serv.net"> </itemize> </article>