summaryrefslogtreecommitdiff
path: root/hurd
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2011-01-09 23:34:42 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2011-01-09 23:34:42 +0100
commitf3df65ce34153357d28bee621bdf49b61e68b182 (patch)
tree25ac416b157b010ca2f942dac5c5ba0b38a924ac /hurd
parent09184ae09c44c052a207aa5c6dc8ce9cf61a343f (diff)
parent3bbe62327128ce85829a4cb2fb429bd8f21b4d75 (diff)
Merge branch 'master' of flubber:~hurd-web/hurd-web
Diffstat (limited to 'hurd')
-rw-r--r--hurd/advantages.mdwn68
-rw-r--r--hurd/building/cross-compiling.mdwn2
-rw-r--r--hurd/debugging.mdwn10
-rw-r--r--hurd/faq/old_hurd_faq.txt2
-rw-r--r--hurd/glibc.mdwn8
-rw-r--r--hurd/glibc/hurd-specific_api.mdwn19
-rw-r--r--hurd/glibc/internals.mdwn35
-rw-r--r--hurd/interface.mdwn4
-rw-r--r--hurd/io_path.mdwn22
-rw-r--r--hurd/libchannel.mdwn12
-rw-r--r--hurd/libihash.mdwn2
-rw-r--r--hurd/libpager.mdwn7
-rw-r--r--hurd/networking.mdwn11
-rw-r--r--hurd/ng.mdwn2
-rw-r--r--hurd/ng/choiceofmicrokernel.mdwn4
-rw-r--r--hurd/ng/microkernelcoyotos.mdwn9
-rw-r--r--hurd/ng/trivialconfinementvsconstructorvsfork.mdwn24
-rw-r--r--hurd/running/arch_hurd.mdwn2
-rw-r--r--hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn8
-rw-r--r--hurd/status.mdwn9
-rw-r--r--hurd/subhurd.mdwn32
-rw-r--r--hurd/translator.mdwn6
-rw-r--r--hurd/translator/ext2fs/large_stores.txt10
-rw-r--r--hurd/translator/libguestfs.mdwn (renamed from hurd/ng/issues_with_mach.mdwn)13
-rw-r--r--hurd/translator/magic.mdwn11
-rw-r--r--hurd/translator/wishlist_2.mdwn12
-rw-r--r--hurd/virtualization.mdwn10
-rw-r--r--hurd/what_is_the_gnu_hurd.mdwn23
28 files changed, 187 insertions, 190 deletions
diff --git a/hurd/advantages.mdwn b/hurd/advantages.mdwn
deleted file mode 100644
index ba3a134b..00000000
--- a/hurd/advantages.mdwn
+++ /dev/null
@@ -1,68 +0,0 @@
-[[!meta copyright="Copyright © 2001, 2002, 2008, 2010 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]]."]]"""]]
-
-The Hurd is not the most advanced kernel known to the planet (yet),
-but it does have a number of enticing features:
-
- * **it's free software**
-
- Anybody can use, modify, and redistribute it under the terms of the
- [[GNU_General_Public_License_(GPL)|GPL]]
-
- * **it's compatible**
-
- The Hurd provides a familiar programming and user environment. For all
- intents and purposes, the Hurd is a modern Unix-like kernel. The Hurd uses
- the [[GNU_C_Library|glibc]], whose development closely tracks standards
- such as ANSI/ISO, BSD, POSIX, Single Unix, SVID, and X/Open.
-
- * **it's built to survive**
-
- Unlike other popular kernel software, the Hurd has an object-oriented
- structure that allows it to evolve without compromising its design. This
- structure will help the Hurd undergo major redesign and modifications
- without having to be entirely rewritten.
-
- * **it's scalable**
-
- The Hurd implementation is aggressively multithreaded so that it runs
- efficiently on both single processors and symmetric multiprocessors. The
- Hurd interfaces are designed to allow transparent network clusters
- (*collectives*), although this feature has not yet been implemented.
-
- * **it's extensible**
-
- The Hurd is an attractive platform for learning how to become a kernel
- hacker or for implementing new ideas in kernel technology. Every part of
- the system is designed to be modified and extended.
-
- * **it's stable**
-
- It is possible to develop and test new Hurd kernel components without
- rebooting the machine (not even accidentally). Running your own kernel
- components doesn't interfere with other users, and so no special system
- privileges are required. The mechanism for kernel extensions is secure by
- design: it is impossible to impose your changes upon other users unless
- they authorize them or you are the system administrator.
-
- * **it exists**
-
- The Hurd is real software that works Right Now. It is not a research
- project or a proposal. You don't have to wait at all before you can start
- using and developing it.
-
----
-
-One advantage of the Hurd's separation of kernel-like functionality into
-separate components ([[servers|translator]]) is that these can be constructed
-using different programming lanugages, a thing that is not easily possible in a
-monolithic kernel. Essentially, only an interface from the programming
-environment to the RPC mechanism is required.
diff --git a/hurd/building/cross-compiling.mdwn b/hurd/building/cross-compiling.mdwn
index 1ecfd0bd..73c19b4d 100644
--- a/hurd/building/cross-compiling.mdwn
+++ b/hurd/building/cross-compiling.mdwn
@@ -8,4 +8,6 @@ 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 stable_URL]]
+
[[!meta redir=/toolchain/cross-gnu]]
diff --git a/hurd/debugging.mdwn b/hurd/debugging.mdwn
index d6c5b18f..d6e9c8b5 100644
--- a/hurd/debugging.mdwn
+++ b/hurd/debugging.mdwn
@@ -6,8 +6,9 @@ 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
# Strategies
@@ -16,11 +17,6 @@ is included in the section entitled
* [[subhurd]] -- running another Hurd system in parallel
* [[rpctrace]] -- tracing [[RPC]]s
-## To Do
-
- * [[open_issues/ltrace]]
- * [[open_issues/latrace]]
- * [[open_issues/profiling]]
# About Specific Packages
diff --git a/hurd/faq/old_hurd_faq.txt b/hurd/faq/old_hurd_faq.txt
index c7e0ffe8..e6c6cb5a 100644
--- a/hurd/faq/old_hurd_faq.txt
+++ b/hurd/faq/old_hurd_faq.txt
@@ -89,7 +89,7 @@ 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,
+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",
diff --git a/hurd/glibc.mdwn b/hurd/glibc.mdwn
index bdfed833..39bfed62 100644
--- a/hurd/glibc.mdwn
+++ b/hurd/glibc.mdwn
@@ -1,4 +1,4 @@
-[[!meta copyright="Copyright © 2007, 2008, 2009 Free Software Foundation,
+[[!meta copyright="Copyright © 2007, 2008, 2009, 2010 Free Software Foundation,
Inc."]]
[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
@@ -6,8 +6,8 @@ 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
[[General_information|/glibc]] about the glibc.
@@ -17,5 +17,3 @@ For information about how the glibc integrates into the system, see sections
[[Hurd-specific_API]].
[[Debugging_glibc|debugging/glibc]].
-
-[[Internals]].
diff --git a/hurd/glibc/hurd-specific_api.mdwn b/hurd/glibc/hurd-specific_api.mdwn
index aeb63d91..7ead63cd 100644
--- a/hurd/glibc/hurd-specific_api.mdwn
+++ b/hurd/glibc/hurd-specific_api.mdwn
@@ -1,17 +1,18 @@
-[[!meta copyright="Copyright © 2002, 2007, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2002, 2007, 2008, 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
[[!meta title="Hurd-specific glibc API"]]
These functions have meaning only under Hurd. They are needed to get port
-names that are used in native Hurd API (the RPC calls to servers). The `.defs`
+names that are used in native Hurd API (the [[RPC]]s to servers). The `.defs`
and `.h` files can be found in `/include/hurd` when all development files are
installed (Debian package `hurd-dev`.) Note that `.defs` are not included in C
programs -- they are used to produce `.h` files.
@@ -81,7 +82,13 @@ programs -- they are used to produce `.h` files.
<dt><tt><b>openport</b> (io_t port, int flags);</tt></dt>
<p>
</p>
- <dd>Open a file descriptor on a port. FLAGS are as for <tt>open</tt>; flags affected by <tt>io_set_openmodes</tt> are not changed by this. If successful, this consumes a user reference for PORT (which will be deallocated on close.) See <tt>&amp;lt;hurd/io.defs&amp;gt;</tt> and <tt>&amp;lt;hurd/io.h&amp;gt;</tt>.</dd>
+ <dd>Open a [[unix/file_descriptor]] on a [[microkernel/mach/port]]. FLAGS
+ are as for <tt>open</tt>; flags affected by <tt>io_set_openmodes</tt> are
+ not changed by this. If successful, this consumes a user reference for
+ PORT (which will be deallocated on close.) See
+ <tt>&amp;lt;hurd/io.defs&amp;gt;</tt> and
+ <tt>&amp;lt;hurd/io.h&amp;gt;</tt>.
+ </dd>
<p>
</p>
<dt><tt>task_t</tt></dt>
@@ -157,7 +164,7 @@ programs -- they are used to produce `.h` files.
</p>
<dt><tt>thread_t</tt></dt>
<dt><tt><b>hurd_thread_self</b> (void);</tt></dt>
- <dd>Return the current thread's thread port. This is a cheap operation (no system call), but it relies on Hurd signal state being set up.</dd>
+ <dd>Return the current thread's thread port. This is a cheap operation (no [[system call]]), but it relies on Hurd signal state being set up.</dd>
<p>
</p>
<dt><tt>error_t</tt></dt>
diff --git a/hurd/glibc/internals.mdwn b/hurd/glibc/internals.mdwn
deleted file mode 100644
index 897da92e..00000000
--- a/hurd/glibc/internals.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!meta copyright="Copyright © 2009 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]]."]]"""]]
-
-Some bits about this, some bits about that.
-
-# Controlling TTY
-
-Hurd controlling tty behavior is generally consistent with BSD's, including
-`TIOCSCTTY`. Linux also has `TIOCSCTTY` and it is harmless to use it there.
-But BSD and Hurd never do an implicit `TIOCSCTTY` (hence our `O_NOCTTY` is
-zero).
-
-C.f. <http://lists.gnu.org/archive/html/bug-hurd/2009-10/msg00030.html> and the
-following messages.
-
-# Sinals
-
-[[Unix]] signals are implemented in glibc.
-
-In every process, signals are handled in a separate signal thread.
-
- [Why does kill hang sometimes?]
- <youpi> kill send the signal to the process
- <youpi> if the process is hung, killing waits
- <youpi> signals should be just asynchronous, but apparently for some reason
- Roland & co wanted some syunchronization
-
-[[!taglink open_issue_glibc]]
diff --git a/hurd/interface.mdwn b/hurd/interface.mdwn
index 75fda808..53cd31f0 100644
--- a/hurd/interface.mdwn
+++ b/hurd/interface.mdwn
@@ -1,4 +1,4 @@
-[[!meta copyright="Copyright © 2009 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2009, 2010 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
@@ -10,5 +10,7 @@ License|/fdl]]."]]"""]]
[[!meta title="Interfaces"]]
+/!\ Incomplete.
+
[[!map pages="hurd/interface/* and !hurd/interface/*_*"
show=title]]
diff --git a/hurd/io_path.mdwn b/hurd/io_path.mdwn
index 78e13efd..0d83a4ba 100644
--- a/hurd/io_path.mdwn
+++ b/hurd/io_path.mdwn
@@ -1,12 +1,15 @@
-[[!meta copyright="Copyright © 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2008, 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+[[!meta title="I/O Path"]]
+
# read
@@ -38,3 +41,16 @@ is included in the section entitled
* ext2fs eventually finishes the data_request() function, the kernel installs
the page into the process that got a fault.
+
+
+# Documentation
+
+ * In [*Linux kernel design patterns - part
+ 3*](http://lwn.net/Articles/336262/) (2009-06-22), Neil Brown gives a
+ nice overview of the related layering inside the Linux kernel,
+ including the VFS layer, page cache and directory entry cache
+ (dcache).
+
+
+[[!tag open_issue_documentation]] <!-- Merge kepler.SCHWINGE/master-io_path.
+-->
diff --git a/hurd/libchannel.mdwn b/hurd/libchannel.mdwn
index 91c7810f..3e19fb18 100644
--- a/hurd/libchannel.mdwn
+++ b/hurd/libchannel.mdwn
@@ -1,12 +1,12 @@
-[[!meta copyright="Copyright © 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2008, 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
# libchannel
@@ -60,3 +60,9 @@ library to implement specialized channel libraries, e.g. *libaudio*
and *libnetwork* or similar.
So work on *libchannel* will continue, in one form or another.
+
+
+# Related
+
+ * [*Van Jacobson's network channels*](http://lwn.net/Articles/169961/)
+ (2006-01-31) by Jonathan Corbet.
diff --git a/hurd/libihash.mdwn b/hurd/libihash.mdwn
index 770770c7..8da04095 100644
--- a/hurd/libihash.mdwn
+++ b/hurd/libihash.mdwn
@@ -45,6 +45,8 @@ is included in the section entitled
* NNS; cf. f46f0abfee5a2b34451708f2462a1c3b1701facd
+ * libstdc++: `unordered_map`, `tr1/unordered_map`, `ext/hash_map`
+
* <http://cmph.sourceforge.net/>
* <http://libhashish.sourceforge.net/>
diff --git a/hurd/libpager.mdwn b/hurd/libpager.mdwn
index c9a1c0b6..99f28f2a 100644
--- a/hurd/libpager.mdwn
+++ b/hurd/libpager.mdwn
@@ -1,4 +1,5 @@
-[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2007, 2008, 2010 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
@@ -14,3 +15,7 @@ Mach [[microkernel/mach/IPC]]'s [[microkernel/mach/ipc/sequence_numbering]].
[GNU Hurd Reference Manual: 4.2 Pager
Library](http://www.gnu.org/software/hurd/doc/hurd_5.html#SEC32).
+
+# Open Issues
+
+ * [[open_issues/linux_vmsig]]
diff --git a/hurd/networking.mdwn b/hurd/networking.mdwn
index ff16eb25..bdf9def2 100644
--- a/hurd/networking.mdwn
+++ b/hurd/networking.mdwn
@@ -1,12 +1,13 @@
-[[!meta copyright="Copyright © 2000, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2000, 2008, 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
For each supported `PF_*` protocol family, there is a file `/servers/socket/N`
where `N` is the numberic value fo the `PF_*` symbol. Right now
@@ -17,10 +18,10 @@ where `N` is the numberic value fo the `PF_*` symbol. Right now
User programs open those files, and use the `socket_create` [[RPC]] to make a
new socket. With that socket, they can use the other `socket_*` RPCs and also
the `io_*` RPCs. The `socket_*` RPCs are essentially clones of the [[Unix]]
-syscalls in question.
+[[system call]]s in question.
The only exception is `sockaddrs`, which are implemented as [[ports|libports]]
-instead of the opaque data arrays they are in the syscalls. You manipulate
+instead of the opaque data arrays they are in the system calls. You manipulate
`sockaddr` ports with the `socket_create_address`, `socket_fabricate_address`,
and `socket_whatis_address` calls. The `sockaddr` port is then used in socket
calls like `socket_connect` and `socket_accept`.
diff --git a/hurd/ng.mdwn b/hurd/ng.mdwn
index fb4d742f..de33949d 100644
--- a/hurd/ng.mdwn
+++ b/hurd/ng.mdwn
@@ -10,7 +10,6 @@ These pages try to summarize the major discussions and ideas.
This section explains the motivations behind the new design:
- * [[Issues_with_Mach]]
* [[Issues_with_L4_Pistachio]]
* [[Limitations_of_the_original_Hurd_design]]
@@ -64,7 +63,6 @@ A [[critique]] of the original Hurd is available.
## Implementation
-* [[ChoiceOfMicrokernel]]
* [[HurdInterafaces]]
* [[PosixLayer]]
* [[SystemStructure]]
diff --git a/hurd/ng/choiceofmicrokernel.mdwn b/hurd/ng/choiceofmicrokernel.mdwn
deleted file mode 100644
index 20ee6f05..00000000
--- a/hurd/ng/choiceofmicrokernel.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-TBD
-
-* [[MicrokernelL4]]
-* [[MicrokernelCoyotos]]
diff --git a/hurd/ng/microkernelcoyotos.mdwn b/hurd/ng/microkernelcoyotos.mdwn
deleted file mode 100644
index cdf4e1bf..00000000
--- a/hurd/ng/microkernelcoyotos.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-# <a name="The_Coyotos_microkernel"> The Coyotos microkernel </a>
-
-[Coyotos](http://www.coyotos.org/index.html) is a microkernel and OS and the successor of EROS, that itself is the successor of KeyKOS. A more complete history can be found [here](http://www.coyotos.org/history.html). Its main objectives are to correcte some shortcomings of EROS, demonstrate that an atomic kernel design scales well, and (eventually) to completely formally verify both the kernel and critical system components by writing them in a new language called [bitc](http://www.bitc-lang.org/). [See [l4.verified](http://nicta.com.au/research/projects/l4.verified) for work on formally verifying an L4 microkernel.]
-
-Coyotos is an orthogonally persistent pure capability system. It uses continuation based unbuffered asynchronous IPC (actually it's synchronous IPC with asynchronous syscalls).
-
-TODO: explain these terms and (more important) their consequences on system design.
-
-The coyotos microkernel specification can be found [here](http://www.coyotos.org/docs/ukernel/spec.html)
diff --git a/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn b/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn
index 4eeef6ee..949895e7 100644
--- a/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn
+++ b/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn
@@ -6,10 +6,11 @@ This comparison is about a simple situation: there is a parent process P, which
# <a name="Trivial_Confinement"> Trivial Confinement </a>
-For trivial confinement, there is a system call to create a process from some memory pages. P performs the following steps:
+For trivial confinement, there is a [[system call]] to create a process from
+some memory pages. P performs the following steps:
* Allocate some memory and put the code image of the child into that memory. This can be done by P, or for example by the file system which then gives the resulting memory (space bank) to P.
-* Perform the system call on that memory. The result is a capability to C.
+* Perform the [[system call]] on that memory. The result is a capability to C.
* Send A to C using the returned capability.
Note that it is up to the implementation of the system what happens with P's access to the memory which holds the child. For example, it is probably a good idea if it is at least unmapped, so it cannot accidentily write things in it. It could even be revoked, so that it can't write things in it, even if it wants to.
@@ -32,7 +33,16 @@ This mechanism is targeted at a specific use pattern, namely that a process is c
# <a name="POSIX_Fork"> </a> POSIX Fork
-POSIX fork, or rather fork+exec, is how things are done on many current systems. It may be insightful to see it included in the comparison, especially for people who are new to the subject. There are two system calls, fork and exec. Fork will create a clone of the current process, including all the capabilities (that is, file descriptors) of the parent (except the ones which have explicitly been excluded). Exec is a system call which really goes to the filesystem, not the kernel (although on systems which use it, the filesystem usually resides in the kernel), and asks it to spawn a new process from the contents of a certain path in place of the caller. This passes all capabilities to the new process. The procedure is:
+POSIX fork, or rather fork+exec, is how things are done on many current
+systems. It may be insightful to see it included in the comparison, especially
+for people who are new to the subject. There are two [[system call]]s, fork
+and exec. Fork will create a clone of the current process, including all the
+capabilities (that is, [[unix/file_descriptor]]s) of the parent (except the
+ones which have explicitly been excluded). Exec is a [[system call]] which
+really goes to the filesystem, not the kernel (although on systems which use
+it, the filesystem usually resides in the kernel), and asks it to spawn a new
+process from the contents of a certain path in place of the caller. This
+passes all capabilities to the new process. The procedure is:
* P calls fork(), creating P'.
* P' drops B.
@@ -52,7 +62,11 @@ In contrast, the other two options don't pass anything by default. If there is a
The problem of fork+exec can be solved. It is if the default would be to not pass capabilities to the new process, but specify a list of capabilities that it should keep, or (like in the other cases) pass them over a new channel which is implicitly created during the fork. However, in that case the only difference with trivial confinement is that P' dies in the process (and thus must be created to prevent P from dying). Almost any use of exec is in practice preceded by a fork for this purpose. It would be easier to make trivial confinement the default operation and let P die directly after it in the rare case that it should.
-The only reason for continuing to use fork+exec would be that it is what existing programs do. However, they break anyway if they need to specify which file descriptors to pass. So they need to be adapted. Therefore, it's better to make the usual spawning method the primitive one, and emulate the other.
+The only reason for continuing to use fork+exec would be that it is what
+existing programs do. However, they break anyway if they need to specify which
+[[unix/file_descriptor]]s to pass. So they need to be adapted. Therefore, it's
+better to make the usual spawning method the primitive one, and emulate the
+other.
# <a name="Trivial_Confinement_vs_Construct"> Trivial Confinement vs Constructor </a>
@@ -67,7 +81,7 @@ Except for the control, there is really only one other difference, and that's ad
What it doesn't do is protect the code image against bugs in P. In the constructor the trusted and well-tested constructor code is handling the image, for trivial confinement the (very possibly) buggy program P. In particular, when starting a program from a file system, with trivial confinement the operation is:
* Ask the file system for the code, receive a capability to a space bank with a copy (on write) of it.
-* Make the system call to turn it into a program.
+* Make the [[system call]] to turn it into a program.
Now this isn't much more complicated than the constructor which does:
diff --git a/hurd/running/arch_hurd.mdwn b/hurd/running/arch_hurd.mdwn
index 9786d144..0e6075bb 100644
--- a/hurd/running/arch_hurd.mdwn
+++ b/hurd/running/arch_hurd.mdwn
@@ -10,7 +10,7 @@ License|/fdl]]."]]"""]]
[[!meta title="Arch Hurd"]]
-Arch Hurd is a port of Arch Linux to the GNU Hurd, founded on 2010-01-04 by Michael Walker (Barrucadu) and, with input from a variety of people including Alan McRae (allan), Matthias Lanzinger (melpo), and Alexander Preisinger (giselher), the project has made excellent process. There is a livecd available on the Arch Hurd website, with which you can try or install Arch Hurd.
+Arch Hurd is a port of Arch Linux to the GNU Hurd, founded on 2010-01-04 by Michael Walker (Barrucadu) and, with input from a variety of people including Allan McRae (allan), Matthias Lanzinger (melpo), and Alexander Preisinger (giselher), the project has made excellent process. There is a livecd available on the Arch Hurd website, with which you can try or install Arch Hurd.
### Links
diff --git a/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn b/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn
index 517d59dc..1a3c46e1 100644
--- a/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn
+++ b/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn
@@ -1,4 +1,5 @@
-[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2007, 2008, 2010 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
@@ -8,6 +9,11 @@ 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]]."]]"""]]
+This isssue has been fixed in the Debian hurd / libc0.3 packages as of 2010-11.
+Retire this item sometime after 2011.
+
+---
+
Privilege seperation does not work with Hurd currently. You need to explicitely
set `PrivilegeSeparation` to `no` in `/etc/ssh/sshd_options`, just commenting out
the entry will not work as it is on by default. Also make sure you have
diff --git a/hurd/status.mdwn b/hurd/status.mdwn
index 721cdeda..fe56f183 100644
--- a/hurd/status.mdwn
+++ b/hurd/status.mdwn
@@ -6,8 +6,8 @@ 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
The Hurd, together with the GNU Mach microkernel, the GNU C Library
and the other GNU and non-GNU programs in the GNU system, provide a
@@ -30,8 +30,9 @@ and advanced server applications like the Apache webserver.
On the negative side, the support for character devices (like sound
-cards) and other hardware is mostly missing. Although the POSIX
-interface is provided, some additional interfaces like POSIX shared
+cards) and other hardware is mostly missing. Although the [[POSIX
+interface|faq/posix_compatibility]] is provided, some additional interfaces
+like POSIX shared
memory or semaphores are still under development.
All this applies to the current development version, and not to the
diff --git a/hurd/subhurd.mdwn b/hurd/subhurd.mdwn
index 5b132604..cb4a40a8 100644
--- a/hurd/subhurd.mdwn
+++ b/hurd/subhurd.mdwn
@@ -1,12 +1,13 @@
-[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2007, 2008, 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
A sub-Hurd is like a [[neighbor_Hurd|neighborhurd]], however, makes use of some
resources provided by another Hurd. For instance, backing store and the
@@ -17,7 +18,8 @@ attach to them with gdb from the parent
([[debugging_via_subhurds|debugging/subhurd]]). This avoids deadlock, e.g.,
when the instance of gdb stops the server but requires its use. (Note: it is
possible to use [[debugging/gdb/noninvasive_debugging]], but this is less
-flexible.)
+flexible.) Vice versa, it is also possible to use a subhurd to debug the
+*main* Hurd system, for example, the latter's root file system.
# Howto
@@ -105,9 +107,9 @@ inside the subhurd, or to `ssh` directly into the subhurd.
If you want to access the subhurd processes from the outside, e.g. for
[[debugging_purposes|debugging/subhurd]] (or to get rid of a subhurd that
-didn't exit cleanly...), you need to find out how main Hurd PIDs correspond to
+didn't exit cleanly...), you need to find out how main Hurd [[PID]]s correspond to
subhurd processes: the subhurd processes appear in the main Hurd (e.g. if doing
-`ps -e`) as unknown processes, and vice versa, but the PIDs are different! To
+`ps -e`) as unknown processes, and vice versa, but the [[PID]]s are different! To
find out which process is which, you can simply compare the order -- while the
numbers are different, the order should usually match. Often it also helps to
look at the number of threads (e.g. using `ps -l`), as many servers have very
@@ -119,3 +121,21 @@ characteristic thread counts.
Read about using a subhurd for [[debugging_purposes|debugging/subhurd]].
Roland's tutorial about [[running_a_subhurd]].
+
+
+# Use Cases
+
+<a name="debugging_main_hurd_system"></a>
+## Debugging the *Main* Hurd System
+
+A subhurd can be used for debugging the *main* Hurd system. This works as long
+as the subhurd doesn't use any services provided by the main Hurd. For
+example, if you already have a subhurd running at the time it happens, you can
+use that one to debug a deadlocked [[translator/ext2fs]] root file system in
+the *main* Hurd.
+
+For this, you need to get a handle to the main Hurd's [[ext2fs
+translator|translator/ext2fs]]'s [[PID]], but this is no problem, as currently
+[[PID]]s are visible across subhurd boundaries. (It is a [[!taglink
+open_issue_hurd]] whether this is the right thing to do in
+[[open_issues/virtualization]] contexts, but that's how it currently is.)
diff --git a/hurd/translator.mdwn b/hurd/translator.mdwn
index c3ca1278..9e109a28 100644
--- a/hurd/translator.mdwn
+++ b/hurd/translator.mdwn
@@ -6,8 +6,8 @@ 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
A translator is simply a normal program acting as
an object server and participating in the Hurd's
@@ -117,6 +117,8 @@ Read about translator [[short-circuiting]].
* [[wishlist_1]]
* [[wishlist_2]]
* [[open_issues/network_file_system_by_just_forwarding_RPCs]]
+ * [[libguestfs]]
+
# Internally
diff --git a/hurd/translator/ext2fs/large_stores.txt b/hurd/translator/ext2fs/large_stores.txt
index e17a02a5..6e7ffc6f 100644
--- a/hurd/translator/ext2fs/large_stores.txt
+++ b/hurd/translator/ext2fs/large_stores.txt
@@ -1,3 +1,13 @@
+[[!meta copyright="Copyright © 2005, 2010 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]]."]]"""]]
+
This is -*- mode: outline -*-
* Introduction
diff --git a/hurd/ng/issues_with_mach.mdwn b/hurd/translator/libguestfs.mdwn
index 9fac498f..649b31f5 100644
--- a/hurd/ng/issues_with_mach.mdwn
+++ b/hurd/translator/libguestfs.mdwn
@@ -1,12 +1,15 @@
-[[!meta copyright="Copyright © 2008, 2009 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
- * [[open issues/Resource Management Problems]]
- * [[Critique]]
+[[!tag open_issue_hurd]]
+
+[libguestfs](http://libguestfs.org/) is said to be able to access a lot
+of different filesystem types -- can we use it to build GNU Hurd
+[[translator]]s? (There is a [[FUSE]] module, too.)
diff --git a/hurd/translator/magic.mdwn b/hurd/translator/magic.mdwn
index 06ee798b..84bacdfb 100644
--- a/hurd/translator/magic.mdwn
+++ b/hurd/translator/magic.mdwn
@@ -1,20 +1,21 @@
-[[!meta copyright="Copyright © 2006, 2007, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2006, 2007, 2008, 2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
The magic translator provides `/dev/fd`.
$ showtrans /dev/fd
/hurd/magic --directory fd
-The `/dev/fd` directory holds the open file descriptors for your current
-process. You can't see them with `ls -l /dev/fd/` but you can see them
+The `/dev/fd` directory holds the open [[unix/file_descriptor]]s for your
+current process. You can't see them with `ls -l /dev/fd/` but you can see them
individually like this:
$ ls -l /dev/fd/0
diff --git a/hurd/translator/wishlist_2.mdwn b/hurd/translator/wishlist_2.mdwn
index a927db55..77f39644 100644
--- a/hurd/translator/wishlist_2.mdwn
+++ b/hurd/translator/wishlist_2.mdwn
@@ -70,7 +70,17 @@ Here's an [idea](http://www.circlemud.org/~jelson/software/fusd/docs/node13.html
* "One particularly interesting application of FUSD that we've found very useful is as a way to let regular user-space libraries export device file APIs. For example, imagine you had a library which factored large composite numbers. Typically, it might have a C interface--say, a function called `int *factorize(int bignum)`. With FUSD, it's possible to create a device file interface--say, a device called `/dev/factorize` to which clients can `write(2)` a big number, then `read(2)` back its factors.
-* This may sound strange, but device file APIs have at least three advantages over a typical library API. First, it becomes much more language independent--any language that can make system calls can access the factorization library. Second, the factorization code is running in a different address space; if it crashes, it won't crash or corrupt the caller. Third, and most interestingly, it is possible to use `select(2)` to wait for the factorization to complete. `select(2)` would make it easy for a client to factor a large number while remaining responsive to other events that might happen in the meantime. In other words, FUSD allows normal user-space libraries to integrate seamlessly with UNIX's existing, POSIX-standard event notification interface: `select(2)`."
+* This may sound strange, but device file APIs have at least three advantages
+ over a typical library API. First, it becomes much more language
+ independent--any language that can make [[system call]]s can access the
+ factorization library. Second, the factorization code is running in a
+ different address space; if it crashes, it won't crash or corrupt the
+ caller. Third, and most interestingly, it is possible to use `select(2)` to
+ wait for the factorization to complete. `select(2)` would make it easy for a
+ client to factor a large number while remaining responsive to other events
+ that might happen in the meantime. In other words, FUSD allows normal
+ user-space libraries to integrate seamlessly with UNIX's existing,
+ POSIX-standard event notification interface: `select(2)`."
## <a name="Mail"> Mail </a>
diff --git a/hurd/virtualization.mdwn b/hurd/virtualization.mdwn
index 42f83f77..49e911c2 100644
--- a/hurd/virtualization.mdwn
+++ b/hurd/virtualization.mdwn
@@ -1,13 +1,17 @@
-[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2007, 2008, 2011 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
Olaf Buddenhagen has written a text about how [[/virtualization]] is applicable
within Hurd systems:
<http://tri-ceps.blogspot.com/2007/10/advanced-lightweight-virtualization.html>
+
+We also have [[a lot of Open Issues about virtualization
+topics|open_issues/virtualization]].
diff --git a/hurd/what_is_the_gnu_hurd.mdwn b/hurd/what_is_the_gnu_hurd.mdwn
index 0b8f7ef6..7a7f3d43 100644
--- a/hurd/what_is_the_gnu_hurd.mdwn
+++ b/hurd/what_is_the_gnu_hurd.mdwn
@@ -1,17 +1,18 @@
-[[!meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free
-Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+2010 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]]."]]"""]]
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
[[!meta title="What Is the GNU Hurd?"]]
-The Hurd is the GNU project's replacement for the [[Unix]] kernel.
+The Hurd is the GNU project's replacement for [[UNIX]], a popular operating
+system [[kernel]].
The Hurd is firstly a collection of protocols formalizing how different
components may interact. The protocols are designed to reduce the mutual
@@ -22,11 +23,19 @@ process to implement a file system. The only requirement is that it have
access to its backing store and that the [[principal]] that started it own the
file system node to which it connects.
-The Hurd is also a set of servers that implement these protocols.
-They include file systems, network protocols and authentication.
+The Hurd is also a set of [[servers|translator]] that implement these
+protocols. They include file systems, network protocols and authentication.
The servers run on top of the [[microkernel/Mach]] [[microkernel]] and use
Mach's [[microkernel/mach/IPC]] mechanism to transfer information.
+The Hurd provides a compatibility layer such that compiling higher level
+programs is essentially transparent; that is, by means of the [[glibc]], it
+provides the same standard interfaces known from other [[UNIX]]-like systems.
+Thus, for a typical user, the Hurd is intended to silently work in the
+background providing the services and infrastructure which the [[microkernel]]
+itself has no business implementing, but that are required for higher level
+programs and libraries to operate.
+
The Hurd supplies the last major software component needed for a complete
[[GNU_operating_system|running/gnu]] as originally conceived by Richard
M. Stallman (RMS) in 1983. The GNU vision directly drove the creation and has