summaryrefslogtreecommitdiff
path: root/faq/old_hurd_faq.txt
blob: 50ea9331fc1d1faa4024ef88c4258b9843e36e04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
[[!meta copyright="Copyright © 1999, 2006, 2008, 2010, 2013 Free Software
Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!tag faq/old]]

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>


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, inter-process 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/



==============================

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.