what are the advantages with the Hurd over Linux, in general of course, nothing in depth
Flexibility for the user:
transparent ftp
$ cd /ftp://ftp.debian.org/debian $ lspersonnal filesystem
$ dd < /dev/zero > myspace.img bs=1M count=1024 $ mke2fs myspace.img $ settrans myspace /hurd/ext2fs myspace.img $ cd myspaceJust curious, but I keep seeing these (and other similar) concepts being brought up as the amazing selling points of the Hurd, but all of this is entirely doable now in Linux with FUSE or things like it.
Nowadays, at LAST, yes, partly.
I'm not sure if an ftp filesystem has been implemented for FUSE yet, but its definately doable; and loopback filesystems like in your second example have been supported for years.
As a normal user? And establish a tap interface connected through ppp over ssh or whatever you could want to imagine?
What, then, are the major selling points or benefits?
These were just examples, Linux is trying to catch up in ugly ways indeed (yes, have a look at the details of fuse, it's deemed to be inefficient). In the Hurd, it's that way from the ground and there is no limitation like having to be root or ask for root to add magic lines, etc.
The distinction between / and /usr has historical reasons. Back when Unix
systems were booted from two tapes, a small root tape and a big user tape.
Today, we like to use different partitions for these two spaces. The Hurd
throws this historical garbage away. We think that we have found a more
flexible solution called union filesystems, which allow to create virtual
filesystems which are the union of several other filesystems. However, support
for union filesystems is still in early development.
Next year.
Save that, read about the Hurd's status.
In addition to the general FAQ there are the following typical newbie questions. (There is an updated version which is not official yet.)
If you still have problems, do not hesitate to make use of the mailing lists or the IRC.
You say GNU, don't you mean GNU/Hurd?
- Yes and no. GNU refers to the system as a whole, while GNU/Hurd is more specific, saying that it is the GNU system running on the Hurd -- to differentiate it from the GNU system running on Linux, GNU/Linux. Also see ?GnuNames
What editor can I use?
nanois the default editor on a fresh install, notae.
Why can't I get the answers I need from Hurd hackers?
- This document may help you understand some developers attitudes and social norms.
Where are the virtual consoles I use when running Linux?
- You need to use screen instead, also available when running GNU/Linux.
- The new console by Marcus Brinkmann could also be used. It supports the Alt-Fn keys for switching like in Linux. NOTE: that message has an error in the configuration steps, it says
/dev/vtswhen it means/dev/vcs. A more up-to-date howto is console.
What is a translator?
- The official FAQ answers this question by a reference to hurd-doc-translator.
Where's the sauce?
- It's on Savannah. See also the GNU Development Resources, for more information.
What is this "libio" stuff?
- There was an ABI change for glibc0.3. It's recommended you reinstall your GNU/Hurd system if you run a system installed before the summer of 2002. This is a similar cause for the various Linux distributions who changed from libc5 to libc6 or glibc2 around 1998.
What is GNU Mach vs. oskit-mach?
- These are different versions of the Mach microkernel that supports the Hurd that runs on top of it. For more info, see ?Mach
What software is available for GNU?
- Most packages from Debian GNU/Linux which aren't linux-specific (Packages That Won't Be Ported) are expected to work on GNU/Hurd too. See the database in http://packages.debian.org/. Programs which need pthreads, including GNOME, KDE, Mozilla, OpenOffice, SDL, etc. are being worked on currently using Neal Walfields libpthreads. See the guidelines document for some common build problems and their solutions.
- If you can't fetch a package with "apt-get install ", try building it from source: "apt-get source && cd <package_dir> && debian/rules binary".
- As of January 2007, 50% of Debian packages have been ported on the Hurd. Of course, bug testing is welcome.
How do I initialize a serial console on the Hurd?
- You can try out the Serial Howto at http://www.nongnu.org/thug/serial-howto.txt
- For a real serial console at boot time you need to rebuild your GNUmach 1.x kernel. For more info see the Utah release notes at http://www.cs.utah.edu/flux/mach4-i386/html/mach4-UK22.html#serial_console
Will GNU work in Vmware?
- It's highly recommended and easier to get a full image for Bochs. See ?Distrib
- It didn't use to, Hurd bootstrap fails. Vmware is not free software and it is ?VmWare. We recommend to use free alternatives, like ?BochsEmulator.
- A faster, more widespread and free recent alternative is [QEMU]QEMU. You can find more informations on QEMU.
- If someone prefers using VMWare:
- It works with VMWare Workstation 4.0.5 build-6030.
- Running Debian GNU/HURD in VMWare works for me -- ?MichaelAblassmeier - 03 Mar 2004
Frequently Asked Questions about the GNU Hurd
This document attempts to answer the questions that most often plague
users when they are talking about, installing, using, compiling and
developing the GNU Hurd as well as its binary distribution Debian
GNU/Hurd. Be sure to read this before asking for help.
The GNU Hurd is under active development and a stable version has not
yet been released. Be aware that: there is a lot of work yet to be
completed; you will find bugs; your system will crash. That said, there
is a lot of room for contributions at all levels: development of the
Hurd and Mach proper, porting applications, writing documentation and,
most importantly, user feedback.
Should you have a question that is not answered by this document and you
feel that it should be, submit it and, if possible, with an answer.
Each section is copyright its respective author(s). Permission is
granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version
published by the Free Software Foundation; with no Invariant Sections,
with no Front-Cover Texts and with no Back-Cover Texts. A copy of the
license is included in the file COPYRIGHT.
Neal H Walfield
neal@cs.uml.edu
? Installation
?? What partition type should I use for my GNU/Hurd partitions?
{MB} You should use an ext2 filesystem. Alternatively, you may use BSD
style ufs. The partition type number for ext2fs is 0x83 (this is the
same as in Linux), not 0x63 (GNU HURD). Thomas explains why 0x63 is the
wrong choice:
One day we may have a new filesystem format, which would
probably be called the GNU Hurd filesystem format, and might
well use that partition code.
Regardless, as Roland points out, it is always an error to use that code
for an ext2fs partition,
?? How do I name partitions?
{MB,NHW} I knew you would ask this. If I had to reduce this FAQ to only
one question, I'd choose this one. It is pretty easy, but you have to
know that there are actually several incompatibly naming convention.
First, the Hurd: if the disk is question is a SCSI disk, you must know
the SCSI device number; if it is an IDE disk, you must know what
controller the disk is on and whether it is a master or a slave. The
Hurd uses the BSD naming convention which, is to say, disks are ordered
according to their physical location, numerically, starting from zero.
This naming scheme is quite similar to that found in Linux. There, the
master disk on the primary controller is designated as `hda' and the
slave as `hdb'. On the secondary controller, the master and the slave
are designated by `hdc' and `hdd' respectively. Under the Hurd, `hda'
would become `hd0', `hdb' would be referred to as `hd1', etc.
In the Hurd, like in BSD, partitions are called `slices' and are
numbered starting from one. Thus, to name a particular partition, we
take the disk name, append a `s' and the partition number. Again, this
is similar to Linux except, there is no `s'. For instance, `hda1' would
become `hd0s1'.
GRUB, the boot loader, uses a completely different nomenclature: it
probes the BIOS and appends each disk in turn to an array. Both disks
and partitions are enumerated using zero based arrays. The format is:
`hd (<disk>, <partition>)'. Thus, `hd (0, 1)' refers to the second
partition on the first drive detected by the BIOS. As Grub now has tab
completion, there is not a lot of guess work.
?? Can I use partitions larger than 2GB?
{MB} No, not currently. The filesystem servers need to be changed to
not map the whole store into memory, which is not too difficult. For
large files, some interfaces need to be changed, which is a bit harder
but still doable.
?? How much swap do I need?
{NHW} Generally, a lot; once you run out, Mach panics. I have at least
128MB of ram and 256MB of swap on all of machines running GNU/Hurd.
?? Can I share swap space between GNU/Linux and GNU/Hurd?
{NHW} Yes. The default pager recognises and respects Linux swap
partitions. It will also swap to a raw partition, i.e. anything that it
does not recognize as Linux swap. Therefore: BE CAREFUL.
?? Why do I get ``Operation not permitted error''?
{MB} You forgot to set the file system owner of the GNU/Hurd partition to
``hurd''. The Hurd uses additional information in the inodes to set
translators. To make this work, the partition must be marked as ``owned
by the Hurd''. This is normally done by passing the `-o hurd' option to
`mke2fs' when creating ext2 system from other operating systems
(filesystems created in GNU/Hurd automatically enable this option).
If you failed to do this, you can still use the `e2os' script.
?? After `native-install' is finished, I had to write tthhiiss
wwaayy. In particular, I had to type `rreebboooott' to reboot.
{MB} Funny, isn't it? In addition to the rescue `term' server in
`/tmp/console', another `term' server got started and is clobbing the
keyboard input. After a reboot this problem vanishes as only one `term'
server will remain. If `tar' would support translator, we would not
have this problem... Even if you don't experience this problem right
after the installation, reboot immediately so you don't hit this bug by
accident.
? Setup
?? How do I add a swap partition?
{MB} A swap partition is also called a paging file. Usually, it is
sufficient to add the swap partition to `/etc/fstab', just as you would
under Linux. You can swap to a Linux swap partition and the Hurd will
honour the Linux swap signature (both versions). The Hurd will just as
happily swap to any other raw disk space and overwrite anything it
finds. So, be careful!
If you want to swap to a file or make sure that it checks the Linux swap
signature before, you need to edit `/boot/servers.boot'. The syntax is
the partition device file name plus, optionally, the swap file inside an
ext2fs partition, followed by a space and then one of:
`$(add-raw-paging-file)', `$(add-linux-paging-file)',
`$(add-paging-file)'. The first works with any partition or file and
does not honour any swap signature or other data. The second has a
safety check and only uses the file if a Linux swap signature is found.
The third looks for a swap signature first and falls back to raw paging
if it failed to find one. This is also the default for entries in
`/etc/fstab'.
?? How do I set up a network?
How do I set up a loopback device?
{MB} In the former case, be sure that GNU Mach detected your network
card. Either way, you need to setup `pfinet'. Documentation can be
found at:
http://www.debian.org/ports/hurd/hurd-doc-server#pfinet
Don't forget to fill in `/etc/resolv.conf', `/etc/hosts', etc.
Of course, you only need to do this if the installation routine didn't
do it for you.
?? Can I use the GNU/Linux version of `e2fsck' on a GNU/Hurd partition?
{MB} Yes, at least since `e2fsprogs-1.05'. Check this with `e2fsck -V'
first.
{NHW} Do not try to defrag your partition as this utility does not know
about translators.
?? Why are pipes not working?
{MB} `settrans -fgc /servers/socket/1 /hurd/pflocal' should help.
? Usage
?? Where is the documentation?
{NHW,MM} There are neither man pages nor info nodes for the Hurd
translators and commands. Documentation lives inside of the binaries
and can be found by passing the `--help' option to a given command.
For instance:
# /hurd/ext2fs --help
will tell you what types of options the ext2fs translator accepts.
The GNU/Hurd User's Guide and the GNU Hurd Reference Manual both
provide some help about the usage of and concepts behind the GNU Hurd.
You can find them, among others, at:
http://www.gnu.org/software/hurd/docs.html
?? What is a translator?
{MB} There is a text about translators available at:
http://www.debian.org/ports/hurd/hurd-doc-translator
Read this and ask further questions on the mailing lists.
?? What is the login shell?
{MB} The Hurd has the concept of a not-logged in user. This user has
neither user ids nor groups ids. This stems from the fact that the Hurd
supports uid and gid sets and one possibility is, of course, the empty
set. Rather than deny access in this case, filesystems in the Hurd offer a
fourth permission triplet (i.e. rwx) which is used to determine the
privileges for users with no credentials. This, however, needs to be
enabled on a file by file basis. By default, the `other' permission
triplet is used.
The Hurd login shell is a shell running with neither uids nor gids. To
restrict access to your files, either enable and change the fourth
permission triplet or change the login shell of the `login' user in the
password file to `/bin/loginpr' which implements the standard login
prompt.
?? How do I use non-US keyboard bindings?
{NHW,FH} Take a look at:
http://www.xs4all.nl/~mgerards/xkb8.tar.gz
If you want a Debian package, you can add to your
'etc/apt/sources.list'
deb http://debian.duckcorp.org/unstable/binary-hurd-i386/ ./
and then run
apt-get install console-driver-xkb.
?? How do I enable color on the console?
{NHW} If you are using the GNU Mach microkernel, you can set your
terminal to `mach-color'. For instance:
# export TERM=mach-color
?? How can I enable virtual consoles?
{AMS} This can be done by running the following command:
console -d vga -d pc_kbd -d generic_speaker /dev/vcs
If something went wrong, or if you just wish to exit the Hurd console
then hitting C-A-<backspace> will exit it.
?? What is the status of X?
{MB} It works! The packages are available at any Debian ftp mirror.
XFree86 4.0.2 is available, as are some of the v3 servers. Instructions
on how to use the packages are in the mailing list archive (link follow
later).
?? Why does X not work?
{MB} Try `export LD_LIBRARY_PATH=/usr/X11R6/lib'. This is a linker
issue. GNU/Hurd expects that `RPATH' is used, however, Debian takes
certain measures to avoid this. Note that this does not cut it for suid
binaries because of security implications. We expect to rectify this
by using `RUNPATH', which is specified in the new ELF standard.
?? What are these strange pids `2' and `3'?
{MB} Two is the kernel, three is the default pager and four is the root
filesystem.
?? Why does `ps aux' give me strange output?
{MB,MM} Try `ps Aux'. Indeed, under GNU/Hurd, `ps aux' doesn't list
all processes: it omits the session and group leaders, and the
processes without parent.
?? I have a hung process that I want to kill, however, `ps' is now
hanging too.
{MB} Interrupt it and pass it the `-M' option.
{NHW} By default, `ps' gathers information from both the proc server and
the processes themselves (via their message port). If a process it
hung, it will not be able respond to its message port and thus, ps will
wait forever. The `-M' option instructs ps to not gather information
that would require use of the message port.
?? Where are ...
{MB} `fdisk' and `dmesg' are not yet ported.
Instead of `free', use `vmstat' and `vminfo'.
For kernel messages, read `/dev/klog' directly. Note, once you read
this, it is gone forever.
?? Is there a `/proc' filesystem?
{MB} No. Maybe there will be an emulation filesystem someday for
programs that rely it. If you are wondering about the empty `/proc'
directory, this is a relict from a Debian GNU/Linux package
(specifically, `base-files').
You can probe for existing hardware devices with the devprobe utility.
?? Why does the command `df' not work?
{NHW} It does, you just have to tell it what filesystem to query. E.g.
# df /
?? Why are my translators dying?
{NHW} Try passing the `-ap' flag to settrans. By default, settrans only
sets a passive translator, therefore, no output will show up on your
terminal. Using `-ap', however, sets both the active and the passive
translator which, means that the translator starts immediately and its
stderr is connected to you terminal.
Additionally, the biggest problem is passing relative paths to passive
translators. You cannot predict what the current working directory of a
translator will be when it is setup as a passive translator.
?? Why can I `read' a directory?
{MB} It is important to understand that there is nothing special about a
directory under the Hurd, it is just another file. This fits in with
the translator concept where a translator can appear as a directory but
provide also as a file.
? Trouble shooting
?? When the APM support in the BIOS spins down my disk drives, the
Hurd is unable to wake up. What's wrong?
{MB} APM is not supported in the current version of GNU Mach, sorry.
Please disable APM in your BIOS setup.
?? What are these messages referring to `default pager', `paging',
and `pager request'?
{MB} The default pager handles virtual memory allocation. If it can't
allocate a new memory page because you are out of memory, some terrible
things may happen. Whenever you get errors referring to any of these,
you either need more memory (make sure you have swap) or you have found
a memory leak.
?? What is a gratuitous error?
{MB} This comes from `strerror(EGRATUITOUS)'. If you check glibc's
documentation, it will say that this error code has no purpose. This,
however, is not quite true. You only get this when something terrible
happens. Thomas explains:
More precisely `EGRATUITOUS' officially means that some server
has responded in an impossible or protocol-violating fashion.
There are some cases in the Hurd where `EGRATUITOUS' is returned
and probably something else should be chosen instead.
If you can reproduce this error message, please report it.
?? What does ``computer bought the farm'' mean ?
{FH} This message is the text that corresponds to the errno code
`EIEIO'. Roland McGrath explains:
That message is not output by any particular servers at
particular times; rather it is the perror text for the errno
code EIEIO, which is returned by various RPCs and functions
for a variety of "hopeless" error conditions.
?? What does ``/dev/hd0s1: MOUNTED READ-ONLY; MUST USE `fsysopts
--writable''' mean?
{NHW} In this case, /dev/hd0s1 was not unmounted cleanly. The Hurd
will, on boot up, run ``fsck -p'' on any partitions that it finds in
/etc/fstab, so, you may want to consider adding this partition to that
file. If you are sure that the partition is fine, you can run:
# fsysopts /home --writable
to ask the translator sitting on /home to change from read-only to
read/write mode. Note that the command is being sent to the filesystem
and not the store (e.g. /dev/hd0s1).
?? When GNU/Hurd crashes, GNU Mach automatically reboots. Is
there anyway I can make it pause so I can write down the error?
{MB} Pass the `-H' option to init (add it to the boot command line), and
`init' will tell Mach to enter the kernel debugger instead to rebooting
it. At the debugger prompt (`db>'), you can type `reboot' any time to
reboot the system.
? Porting
?? What programs have been ported?
{NHW} A lot, take a look at the Debian archive. Many programs, however,
do not necessarily need to be ported; they have just never been
compiled.
?? Is porting easy?
{NHW} Porting applications to GNU/Hurd is relatively easy assuming the
application is POSIX compliant as GNU/Hurd does its best to be a
conforming operating system.
The most common error made by programmers is assuming the MAXPATHLEN and
PATH_MAX are defined. On most operating systems this is set to a few
thousand, however, on GNU/Hurd, there is no maximum and thus, this is
not set. The correct thing to do is to submit a patch to the upstream
author that allocates memory dynamically.
?? How can I help?
{NHW} A effort to compile all of the Debian packages is underway by Jeff
Bailey. Take a look at:
http://people.debian.org/~jbailey/oasis/group/Debian/index.html
to see what has been done and how you can help.
? Compiling
?? Where can I get the source?
{AMS} Instructions on how to download the CVS tree from Savanah are
avaiable at https://savannah.gnu.org/cvs/?group=hurd
{NHW} To get the source to the latest debian package, look on any
debian mirror.
?? Can I cross compile?
{NHW} Yes. If you are running Debian GNU/Linux on IA32, this is quite
easy as there is a cheap cross compiler available; all that is required
is installing the gcc-i386-gnu and mig-i386-gnu Debian packages. When
running configure, you will have to specify tools directly:
# MIG=/usr/bin/i386-gnu-mig CC=/usr/bin/i386-gnu-gcc \
../src/hurd/configure ...
If you are running another distribution, you will have to do this the
long way. You can find instructions at the Cross Compiling HOW-TO
available at:
http://hurddocs.sourceforge.net/howto/cross.html
Farid Hajji <farid.hajji@ob.kamp.net> also talks about his experiences
at:
http://lists.debian.org/debian-hurd-0012/msg00062.html
?? Any general tips?
{NHW} Yeah, building in the source tree is untested. Try:
# ../src/hurd/configure ...
? Development
?? What is OSKit-Mach?
{NHW,FH} There are two versions of GNU Mac that are in use: GNU Mach
1.x and GNU Mach 2.x, formerly known as OSKit-Mach. The former uses
the drivers from Linux 2.0.x while the latter uses the University of
Utah's OSKit library for drivers. You can find out more about the
OSKit library at:
http://www.cs.utah.edu/flux/oskit
GNU Mach 2.x is usable, but some things are still missing or not
working, like the serial port and scsi drivers. This is why GNU Mach
2.0 hasn't released yet and the two versions coexist.
?? Where is the documentation?
{NHW} There were several books written on the Mach kernel. The
information that they contain is still mostly pertinent and should be
considered required reading for potential hackers. They can be found
at:
http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/publications.html
The documentation for the Hurd is quite inadequate. The starting of a
book, ``The GNU Hurd'' is in the doc directory in the Hurd source. You
can read this using:
# info hurd
The authoritative place is, of course, the source code; that does not,
however, mean that we would not welcome more documentation. To get
started, take a look at <hurd>/doc/navigating.
?? How do I make sure that my code is POSIX compliant?
{NHW} Unfortunately, you have to buy the POSIX standard from IEEE. The
Single Unix Specification version 2, a superset of POSIX, is available
for free on the Internet. Try:
http://www.unix-systems.org/online.html
?? Who do I submit patches to?
{NHW} If they are against the Hurd, Mach or MiG, send a patch to the
bug-hurd mailing list.
If they are against other packages, the Debian BTS is a good place. In
this case, be sure to advise the debian-hurd mailing list of the bug.
?? In what format should patches for the Hurd and GNU Mach be?
{MB} All patches should be sent in unified context diff format (option
`-u' to GNU diff). It is helpful for us if you also use the `-p'
option which includes information about the function changed by a
patch. Changes that are similar can be grouped together in one file,
but unrelated changes should be sent in seperate files. The patches
can be included in the message or as a MIME attachement. They should
not be compressed and/or archived unless they are very large, and if
they are very large it is probably better to store them on-line at
some place and only sent an URL.
Write a ChangeLog entry for each change, following the format of the
existing files. Here is an example:
2000-12-02 Marcus Brinkmann <marcus@gnu.org>
* ops.c (op_readlink): Before returning, check if the buffer
pointed to by transp is ours. If not, munmap it.
(op_read): Likewise for bp.
(op_readdir): Don't alloca a buffer here. Instead initialize
BUF and BUFSIZE to 0 and let the server (eh, MiG) do it.
munmap BUF before returning.
The file name and the name of the function changed should always be
spelled out completely, and not abbreviated or otherwise mangled (like
foo.{c,h}), because that would make searching for all changes to a
file or function impossible. Local variable names are all
capitalized. There are two spaces between sentences. You can use
``C-x 4 a'' in Emacs to add a new ChangeLog entry. If you do that
with the mark being in a function, Emacs will automatically fill in
the file and function name for you.
Do not send in a patch for the ChangeLog file. Rather include the
ChangeLog entries in the message that contains the patch. Patches for
ChangeLog files often conflict.
If you have the original source tree in the directory `hurd-orig', and
the modified source tree in the directory `hurd', the following
command will produce a good patch (please make sure there are no extra
files like backups in the modified tree, or leave away the option
`-N'). You will need to collect the ChangeLog entries seperately.
# diff -x ChangeLog -Nurp hurd-orig hurd
Answers were given by (in chronological order):
* {NHW} Neal H Walfield <neal@cs.uml.edu>
* {MB} Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>
* {AMS} Alfred M. Szmidt <ams@gnu.org>
* {OK} Ognyan Kulev <ogi@fmi.uni-sofia.bg>
* {FH} Frédéric Henry <neryel@reveries.info>
* {MM} Manuel Menal <mmenal@hurdfr.org>
The Unofficial (and no longer maintained) GNU Hurd FAQ, Version 0.13 Contributions by: Michael I. Bushnell <mib@gnu.org> Len Tower <tower@gnu.org> Trent Fisher <trent@gnurd.uu.pdx.edu> jlr@usoft.spb.su Remy Card <Remy.Card@masi.ibp.fr> Louis-Dominique Dubeau <hallu@info.polymtl.ca> Original Document by: Derek Upham <upham@cs.ubc.ca> ============================== Contents: Q0. Where can I get the Unofficial GNU Hurd FAQ? Q2. Where can I get a copy? Q3. Why bother writing a new OS when we have Linux and 386/BSD? Q4. What's all this about Mach 3.0 (and Mach 4.0)? Q5. Where can I find more information? Q6. What's a proper machine? Q7. What sort of machines will run Hurd in the future? Q8. What is the current development status? Q9. What sort of system would we have if the Hurd was bootable today? ============================== Q0. Where can I get the Unofficial GNU Hurd FAQ? The Unofficial Hurd FAQ (what you are reading now) is occasionally posted to the USENET newsgroup, gnu.misc.discuss. It is also available from http://www.enci.ucalgary.ca/~gord/hurd/hurd-faq.txt (Broken Link ?) If you don't have WWW access, you may send mail to me, Gordon Matzigkeit <gord@enci.ucalgary.ca> with a subject line that reads: Subject: send hurd-faq You should receive a PGP-signed copy of the current version of this document in a matter of minutes. Q2. Where can I get a copy? To put it simply, you can't. It is still under development (by Michael Bushnell, Roland McGrath and Miles Bader). It is almost, but not quite, at the point where you can do real work on it. Keep your fingers crossed. Some people have actually bootstrapped it, but the work is not easy, and the current snapshot won't work until a new multiserver boot mechanism is made. If you *really* want to try it, beware that it is still pre-alpha code, and that it will likely crash on you. See Trent Fisher's Hurd pages (under question 5) for the latest information. Q3. Why bother writing a new OS when we have Linux and 386/BSD? 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 ?1 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. Q4. What's all this about Mach 3.0 (and Mach 4.0)? As mentioned above, Mach is a micro-kernel, written at Carnegie Mellon University. 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. The trick is, of course, to write an emulation library. Unix programs can then use (what they think are) POSIX system calls and facilities while they are really using Mach 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.... 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 Project Mach and Flux homepages at: Carnegie Mellon University (for Mach versions before 4.0): http://www.cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/www/mach.html the University of Utah (for Mach 4.0): http://www.cs.utah.edu/projects/flux/mach4/html/ Q5. Where can I find more information? The June 1995 GNU's Bulletin contains the following official information: The GNU Hurd now runs programs native. We have implemented both shared libraries using ELF, & the popular `ext2' file system used by Linux. It can run GCC, `make', Emacs, & most other GNU utilities. Progress is being made so rapidly that by the time you read this it probably does much more. It is right on the verge of being self-hosting (able to run on its own well enough to compile its own source code, & be used for its own development). We have much better device supportm [sic] & some new utilities, including a fancy `ps' & `settrans'. For a complete system we still have much more work to do, but we will make an alpha release as soon as the network software is finished & shared libraries have been well tested. We have a mailing list to announce progress; to be added to it, ask `hurd-announce-request@gnu.org'. The Portland State University CS department (via Trent Fisher) maintains a WWW server with various Hurd documents, including Michael Bushnell's Hurd paper, all the collected GNU's Bulletins, and various announcements posted to "gnu.misc.discuss". The top-level GNU page is http://www.cs.pdx.edu/~trent/gnu/gnu.html and the Hurd page is http://www.cs.pdx.edu/~trent/gnu/hurd/hurd.html People in Europe might want to try the GNU WWW server for DESY Germany, first: http://info.desy.de/gnu/www This site lacks culled, Hurd-specific information at the moment, but it does have the last two GNU's Bulletins plus lots of general information. There is a snapshot of the Hurd development tree on "alpha.gnu.ai.mit.edu" in the "/gnu" directory. It is updated as significant changes are made, and not guaranteed to run. You can subscribe to the Hurd announcement list by sending a request to "hurd-announce-request@gnu.org". This is a moderated list for distributing Hurd info to ``all and sundry'', and anyone can join. In addition, there is a private (invitation-only) list for developers to coordinate their efforts. It's not even worth thinking about unless you (a) have a lot of free time on your hands, (b) know Unix internals and Mach very well, and (c) have a proper machine. Q6. What's a proper machine? A ``proper machine'', at the moment, means an x86 box running Mach 3.0 (or 4.0), with FreeBSD 2.x, NetBSD 1.x, or Linux. A single-server OS is no longer required for development because by the time the Hurd bootstrap mechanism is finished, the Hurd will probably be self-hosting. Linux, FreeBSD, or NetBSD will only be required to splat the Hurd binaries onto a partition of some sort, and to provide a way of transferring files to the Hurd until the networking code is ready. Q7. What sort of machines will run Hurd in the future? 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: Intel 80x86 (ISA and PS/2 buses) Motorola 68000 (Sun 3) Motorola 88000 (Omron Luna) DEC Vax DEC Pmax (DECstation 3100) DEC Alpha MIPS R4000 (DECstation 5000 et al.) IBM RS/6000 Apple Macintosh 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 microkernel, 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: Intel 80x86 (BSD, Dynix, Hurd, SCO, SysV) Motorola 68000 (HP BSD, NEWS, Sun 4) MIPS R4000 (Ultrix) Sun Sparc (Solaris 2, Sun 4) DEC Alpha (OSF/1, mostly finished) 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. Q8. What is the current development status? Please see Trent Fisher's Hurd pages for details. Q9. What sort of a system would we have if the Hurd was bootable today? Quite likely, if you already use an end-user system like Linux, FreeBSD, or NetBSD, you'll be disappointed with the Hurd. It will take some time before the OS hackers really get to work on applications and major enhancements. But, rest assured, Hurd development should proceed very rapidly. Of course, if you think you can help, or you just enjoy neat stuff, then you'll probably like the Hurd. When you actually understand a fraction of what's going on behind the scenes, it's very impressive. All I'm saying is that I'm not expecting all the Windows '95 users in the world to switch to the Hurd right away. Wait a little while, maybe 5-6 years (ample time for GNUStep and Guile to be in use), and GNU users everywhere will be very happy that the FSF proceeded with the Hurd. :) ============================== Footnotes: ?1 Yes, I know that ``micro-kernel'' is about as apt a description as ``Reduced Instruction Set Chip'', but we're stuck with it.
