summaryrefslogtreecommitdiff
path: root/microkernel
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@schwinge.name>2010-12-13 17:11:51 +0100
committerThomas Schwinge <thomas@schwinge.name>2010-12-13 17:11:51 +0100
commit2d75167da62e3486836e5f1773e5f1ab06e43fe8 (patch)
treee44fc83e0b1419836d1b21652ad1d38b8d0af2c4 /microkernel
parent217998d56f5b6424a685f8c87f2c0e924d1c89da (diff)
parent5c5c16e265d8ef56b71f319885f32bf144bdea23 (diff)
Merge branch 'master' into external_pager_mechanism
Conflicts: microkernel/mach/external_pager_mechanism.mdwn
Diffstat (limited to 'microkernel')
-rw-r--r--microkernel/coyotos.mdwn30
-rw-r--r--microkernel/faq.mdwn21
-rw-r--r--microkernel/faq/multiserver_microkernel.mdwn26
-rw-r--r--microkernel/for_beginners.mdwn25
-rw-r--r--microkernel/for_beginners/discussion.mdwn20
-rw-r--r--microkernel/fud.mdwn10
-rw-r--r--microkernel/l4.mdwn21
-rw-r--r--microkernel/mach.mdwn6
-rw-r--r--microkernel/mach/documentation.mdwn60
-rw-r--r--microkernel/mach/external_pager_mechanism.mdwn28
-rw-r--r--microkernel/mach/gnumach.mdwn93
-rw-r--r--microkernel/mach/gnumach/boot_trace.mdwn222
-rw-r--r--microkernel/mach/gnumach/building.mdwn66
-rw-r--r--microkernel/mach/gnumach/building/example.mdwn54
-rw-r--r--microkernel/mach/gnumach/debugging.mdwn69
-rw-r--r--microkernel/mach/gnumach/hardware_compatibility_list.mdwn111
-rw-r--r--microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn (renamed from microkernel/mach/gnumach/hardwarecompatibilitylist/discussion.mdwn)0
-rw-r--r--microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn61
-rw-r--r--microkernel/mach/gnumach/ports.mdwn35
-rw-r--r--microkernel/mach/gnumach/ports/xen.mdwn93
-rw-r--r--microkernel/mach/gnumach/ports/xen/internals.mdwn14
-rw-r--r--microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn105
-rw-r--r--microkernel/mach/gnumach/projects.mdwn129
-rw-r--r--microkernel/mach/gnumach/projects/clean_up_the_code.mdwn123
-rw-r--r--microkernel/mach/gnumach/projects/gdb_stubs.mdwn19
-rw-r--r--microkernel/mach/gnumach/reference_manual.mdwn26
-rw-r--r--microkernel/mach/gnumach/revivalproject.mdwn51
-rw-r--r--microkernel/mach/gnumach/xen.mdwn17
-rw-r--r--microkernel/mach/history.mdwn13
-rw-r--r--microkernel/mach/ipc.mdwn25
-rw-r--r--microkernel/mach/ipc/sequence_numbering.mdwn23
-rw-r--r--microkernel/mach/logo.pngbin13617 -> 0 bytes
-rw-r--r--microkernel/mach/mig.mdwn22
-rw-r--r--microkernel/mach/mig/discussion.mdwn17
-rw-r--r--microkernel/mach/mig/documentation.mdwn77
-rw-r--r--microkernel/mach/mig/documentation/dealloc.mdwn15
-rw-r--r--microkernel/mach/mig/documentation/servercopy.mdwn23
-rw-r--r--microkernel/mach/mig/gnu_mig.mdwn24
-rw-r--r--microkernel/mach/mig/gnu_mig/building.mdwn (renamed from microkernel/mach/mig/building.mdwn)8
-rw-r--r--microkernel/mach/mig/logo.pngbin23622 -> 0 bytes
-rw-r--r--microkernel/mach/port.mdwn25
-rw-r--r--microkernel/mach/rpc.mdwn25
-rw-r--r--microkernel/viengoos.mdwn45
-rw-r--r--microkernel/viengoos/building.mdwn100
-rw-r--r--microkernel/viengoos/documentation.mdwn56
-rw-r--r--microkernel/viengoos/documentation/reference-guide.pdfbin0 -> 269473 bytes
-rw-r--r--microkernel/viengoos/grub2-config.diff47
-rw-r--r--microkernel/viengoos/hardware.mdwn50
-rw-r--r--microkernel/viengoos/projects.mdwn17
-rw-r--r--microkernel/viengoos/projects/address_space_management.mdwn40
-rw-r--r--microkernel/viengoos/projects/capability-aware_compiler.mdwn16
-rw-r--r--microkernel/viengoos/projects/new_hash_function.mdwn22
-rw-r--r--microkernel/viengoos/serial_port.mdwn15
53 files changed, 1880 insertions, 360 deletions
diff --git a/microkernel/coyotos.mdwn b/microkernel/coyotos.mdwn
new file mode 100644
index 00000000..5ecea688
--- /dev/null
+++ b/microkernel/coyotos.mdwn
@@ -0,0 +1,30 @@
+[[!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]]."]]"""]]
+
+[[!meta title="Coyotos"]]
+
+[*Coyotos*](http://www.coyotos.org/) 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/).
+
+Coyotos is an orthogonally [[persistent|persistency]] pure [[capability]]
+system. It uses [[continuation]]-based unbuffered asynchronous [[IPC]]
+(actually it's synchronous [[IPC]] with asynchronous [[system calls]]).
+
+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/microkernel/faq.mdwn b/microkernel/faq.mdwn
new file mode 100644
index 00000000..fe259f05
--- /dev/null
+++ b/microkernel/faq.mdwn
@@ -0,0 +1,21 @@
+[[!meta copyright="Copyright © 2008, 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
+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]]."]]"""]]
+
+[[!meta title="Microkernel FAQ"]]
+
+See also other [[/FAQ]].
+
+[[!inline
+pages="microkernel/faq/* and !*/discussion"
+show=0
+feeds=no
+actions=yes
+rootpage="microkernel/faq" postformtext="Add a new item titled:"]]
diff --git a/microkernel/faq/multiserver_microkernel.mdwn b/microkernel/faq/multiserver_microkernel.mdwn
new file mode 100644
index 00000000..ca9b2179
--- /dev/null
+++ b/microkernel/faq/multiserver_microkernel.mdwn
@@ -0,0 +1,26 @@
+[[!meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2008, 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]]."]]"""]]
+
+[[!meta title="What is a Multiserver Microkernel?"]]
+
+A Microkernel has nothing to do with the size of the kernel. Rather, it refers
+to the functionality that the kernel provides. It is generally agreed that
+this is; a set of interfaces to allow processes to communicate and a way to
+talk to the hardware. *Software drivers*, as we like to call them, are then
+implemented in user space as servers. The most obvious examples of these are
+the TCP/IP stack, the ext2 filesystem and NFS. In the case of the Hurd, users
+now have access to functionality that, in a monolithic kernel, they could never
+use, but now, because the server runs in user space as the user that started
+it, they may, for instance, mount an FTP filesystem in their home directory.
+
+For more information about the design of the Hurd, read the paper by Thomas
+Bushnell, BSG:
+[[Towards_a_New_Strategy_of_OS_Design|hurd-paper]].
diff --git a/microkernel/for_beginners.mdwn b/microkernel/for_beginners.mdwn
index 24daf290..ad50425e 100644
--- a/microkernel/for_beginners.mdwn
+++ b/microkernel/for_beginners.mdwn
@@ -1,19 +1,12 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+[[!meta copyright="Copyright © 2007, 2008 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]]."]]"""]]
# Concepts
diff --git a/microkernel/for_beginners/discussion.mdwn b/microkernel/for_beginners/discussion.mdwn
new file mode 100644
index 00000000..9831796b
--- /dev/null
+++ b/microkernel/for_beginners/discussion.mdwn
@@ -0,0 +1,20 @@
+[[!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]]."]]"""]]
+
+Good day.
+
+I am a developer, have some c knowledge, and in perspective hope to be able to make a contribution in Hurd kernel. At the moment I consider myself as a beginner.
+
+My question is about the second exercise.
+
+>Implement your own pager. Write a server that synthesizes content on the fly and have a client map the object into its address space and print out the file.
+
+* The second sentence "Write a server that..." is too long and too difficult for me to understand perhaps because English is not my native language. Could you please explain it in a little bit easier phrases?
+* Am I write that in a given context "pager" means just "memory manager"?
diff --git a/microkernel/fud.mdwn b/microkernel/fud.mdwn
index bc2e366b..6353f81d 100644
--- a/microkernel/fud.mdwn
+++ b/microkernel/fud.mdwn
@@ -1,9 +1,7 @@
-[[license text="""
-Copyright © 2002 Wolfgang Jährling and Jeroen Dekkers
+[[!meta copyright="Copyright © 2002 Wolfgang Jährling and Jeroen Dekkers"]]
-Verbatim copying and distribution of this entire article is permitted in any
-medium, provided this notice is preserved.
-"""]]
+[[!meta license="Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved."]]
# The Microkernel Experiment is Going On
@@ -19,6 +17,6 @@ But L4 takes this even further. For example, you can have schedulers in userspac
Of course, microkernels still have some problems, mainly because we are bound to today's technology, and current processors have not been designed with microkernels in mind. On a processor that is not optimized for systems with monolithic kernels, where the currently still problematic overhead of context switches would vanish, microkernels would get another performance boost. This sounds like an excuse, but it is intended as a reminder about the fact that the problem is not the general concept of microkernels. However, the L4 people have done a lot of good hacks to work around all this and have reached reasonable performance already.
-All this could be discussed in arbitrary detail, but we won't do that now, as we have more urgent things to do than reacting on FUD about microkernels. So we will conclude by saying that it is too easy to claim that one design is fast and the other one is slow, but everything depends on how exactly a system is designed and implemented. Maybe microkernels will eventually turn out to be slower in almost any case; we doubt that, but who knows? But even then, a microkernel based system will offer enough other advantages so that people will prefer to use it in some cases. But on the other hand, history has shown that new concepts seldom replace old ones completely, but rather establish themselfes in addition to the old ones, therefore we will have the opportunity to argue about which concept is best at least for another couple of years.. or decades?
+All this could be discussed in arbitrary detail, but we won't do that now, as we have more urgent things to do than reacting on FUD about microkernels. So we will conclude by saying that it is too easy to claim that one design is fast and the other one is slow, but everything depends on how exactly a system is designed and implemented. Maybe microkernels will eventually turn out to be slower in almost any case; we doubt that, but who knows? But even then, a microkernel based system will offer enough other advantages so that people will prefer to use it in some cases. But on the other hand, history has shown that new concepts seldom replace old ones completely, but rather establish themselves in addition to the old ones, therefore we will have the opportunity to argue about which concept is best at least for another couple of years.. or decades?
If you are interested in research about the performance of microkernel based systems, visit <http://www.l4ka.org> and <http://os.inf.tu-dresden.de/L4/>
diff --git a/microkernel/l4.mdwn b/microkernel/l4.mdwn
new file mode 100644
index 00000000..970407be
--- /dev/null
+++ b/microkernel/l4.mdwn
@@ -0,0 +1,21 @@
+[[!meta copyright="Copyright © 2004, 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]]."]]"""]]
+
+The [*L4* microkernel](http://l4ka.org/) is an attempt to create a very small
+high performace core which provides basic memory management, task and context
+switching, and little else.
+
+[L4Ka Pistachio Home](http://l4ka.org/projects/pistachio/).
+
+See [l4.verified](http://nicta.com.au/research/projects/l4.verified) for work
+on formally verifying an L4 microkernel.
+
+There was a GNU/Hurd [[history/port_to_L4]], which is now stalled.
diff --git a/microkernel/mach.mdwn b/microkernel/mach.mdwn
index 078b531f..39d0f4d2 100644
--- a/microkernel/mach.mdwn
+++ b/microkernel/mach.mdwn
@@ -1,5 +1,3 @@
-[[img logo.png]]
-
Mach is a so-called first generation [[microkernel]]. It is the
microkernel currently used by the [[Hurd]].
@@ -9,10 +7,10 @@ microkernel currently used by the [[Hurd]].
# Implementations
-* [[GNUMach]]
+* [[GNU_Mach|gnumach]]
* [[Mach/OskitMach]] - A Once Successor of Mach based on OSKit
* [Apple's Darwin](http://developer.apple.com/darwin/) ([API](http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/index.html)) (**non-free**)
# Related
-* [[Mach_Interface_Generator|mig]]
+* [[Mach_Interface_Generator_(MIG)|mig]]
diff --git a/microkernel/mach/documentation.mdwn b/microkernel/mach/documentation.mdwn
index bb91313c..fc6e59c2 100644
--- a/microkernel/mach/documentation.mdwn
+++ b/microkernel/mach/documentation.mdwn
@@ -1,19 +1,41 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
-
-- OSF's [Kernel Interface](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_interface.ps)
-- OSF's [Kernel Principles](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_principles.ps)
+[[!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]]."]]"""]]
+
+ * [*Meet Mach* by James
+ Scott](http://beefchunk.com/documentation/macosx-programming/Meet_Mach.pdf),
+ a summary of Mach's history and main concepts.
+
+ * *[[The_GNU_Mach_Reference_Manual|gnumach/reference_manual]]*.
+
+ - OSF's [Kernel Interface (ps)](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_interface.ps)
+ [Kernel Interface (pdf)](http://shakthimaan.com/downloads/hurd/kernel_interface.pdf)
+
+ - OSF's [Kernel Principles (ps)](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_principles.ps)
+ [Kernel Principles (pdf)](http://shakthimaan.com/downloads/hurd/kernel_principles.pdf)
+
+ * [*The Unofficial GNU Mach IPC beginner's
+ guide*](http://hurdextras.nongnu.org/ipc_guide/), an easy introduction to
+ Inter Process Comunication in the Mach microkernel by Manuel Pavón
+ Valderrama.
+
+ * [*Mach IPC without
+ MIG*](http://walfield.org/pub/people/neal/papers/hurd-misc/mach-ipc-without-mig.txt),
+ an exercise by Neal Walfield *to understand Mach IPC at one of its lowest
+ application levels*.
+
+ * [*ipc-hello.c*](http://walfield.org/pub/people/neal/papers/hurd-misc/ipc-hello.c):
+ *Hello world à la mach ipc*.
+
+ - [Porting and Modifying the Mach 3.0 Microkernel](http://shakthimaan.com/downloads/hurd/Porting%20and%20Modifying%20the%20Mach%203.0%20Microkernel.pdf)
+
+ - [An IO System for Mach](http://shakthimaan.com/downloads/hurd/An%20IO%20System%20for%20Mach.pdf)
+
+ - [A Programmers' Guide to Mach System Call](http://shakthimaan.com/downloads/hurd/A.Programmers.Guide.to.the.Mach.System.Calls.pdf)
diff --git a/microkernel/mach/external_pager_mechanism.mdwn b/microkernel/mach/external_pager_mechanism.mdwn
index 67c10713..7b6015bb 100644
--- a/microkernel/mach/external_pager_mechanism.mdwn
+++ b/microkernel/mach/external_pager_mechanism.mdwn
@@ -1,19 +1,13 @@
-[[license text="""
-Copyright © 2002, 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+[[!meta copyright="Copyright © 2002, 2007, 2008 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]]."]]"""]]
Mach provides a so-called external pager [[mechanism]]. This
mechanism serves to separate *managing memory* from *managing
@@ -35,7 +29,7 @@ and the offset at which to install it. (The first time
a task maps an object, Mach sends an initialization message
to the server including a control capability, which it uses
to supply pages to the kernel.) This is essentially
-the same as mapping a file into an address space on Unix
+the same as mapping a file into an address space on [[Unix]]
using `mmap`.
When a task [[faults|page_fault]], Mach checks to see if there is a memory
diff --git a/microkernel/mach/gnumach.mdwn b/microkernel/mach/gnumach.mdwn
index 561c3742..f3d6d5f9 100644
--- a/microkernel/mach/gnumach.mdwn
+++ b/microkernel/mach/gnumach.mdwn
@@ -1,33 +1,80 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
+[[!meta copyright="Copyright © 2001, 2002, 2007, 2008 Free Software Foundation,
+Inc."]]
-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.txt]].
+[[!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]]."]]"""]]
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+GNU Mach is the microkernel that the [[GNU_Hurd|hurd]] system is based on.
-GNU Mach is currently used by the GNU [[Hurd]].
+It is maintained by the Hurd developers for the GNU project and remains
+compatible with [[Mach]] 3.0.
-GNU Mach remains compatible with Mach 3.0.
-
-The majority of GNU Mach's device drivers are from Linux 2.0. They were
-added using glue code, i.e., a Linux emulation layer in Mach.
+The majority of GNU Mach's [[device_driver]]s are from Linux 2.0. They were
+added using glue code, i.e., a Linux [[emulation]] layer in Mach.
GNU Mach runs on x86 machines. See the
-[[hardware_compatibility_list|hardwarecompatibilitylist]] and information about
+[[hardware_compatibility_list]] and information about
[[ports]] to other architectures.
-# Related Links
+# Advantages of GNU Mach
+
+GNU Mach is not the most advanced [[microkernel]] known to the planet, nor is
+it the fastest or smallest, but it has a rich set of [[interface]]s and some
+features which make it useful as the base of the [[Hurd]] system.
+
+ * **it's free software**
+
+ Anybody can use, modify, and redistribute it under the terms of the
+ [[GNU_General_Public_License_(GPL)|gpl]].
+
+ * **it's built to survive**
+
+ As a [[microkernel]], GNU Mach doesn't implement a lot of the features
+ commonly found in an operating system, but only the bare minimum that is
+ required to implement a full operating system on top of it. This means
+ that a lot of the operating system code is maintained outside of GNU Mach,
+ and while this code may go through a complete redesign, the code of the
+ microkernel can remain comparatively stable.
+
+ * **it's scalable**
+
+ Mach is particularly well suited for SMP and network cluster techniques.
+ Thread support is provided at the kernel level, and the kernel itself takes
+ advantage of that. Network transparency at the [[IPC]] level makes
+ resources of the system available across machine boundaries (with NORMA
+ IPC, currently not available in GNU Mach).
+
+ * **it exists**
+
+ The Mach microkernel is real software that works Right Now. It is not a
+ research or a proposal. You don't have to wait at all before you can start
+ using and developing it. Mach has been used in many operating systems in
+ the past, usually as the base for a single UNIX server. In the GNU system,
+ Mach is the base of a functional multi-server operating system, the
+ [[Hurd]].
+
+
+# Booting
+
+To actually use the kernel and boot the GNU operating system, you need a boot
+loader. Not all boot loaders are capable to boot the GNU system, you need one
+that supports the multiboot standard. The bootloader of the GNU system is
+[[GNU_GRUB|grub]], which supports a broad range of operating systems including
+GNU/Hurd.
+
+
+# Development
-* [[Building]]
-* [[RevivalProject]] - GNU Mach Projects
+ * [[Reference_Manual]]
+ * [[Building]]
+ * [[Debugging]]
+ * [[Boot_Trace]]
+ * [[Projects]]
+ * [[Rules]]
+ * [[Open Issues|tag/open_issue_gnumach]]
diff --git a/microkernel/mach/gnumach/boot_trace.mdwn b/microkernel/mach/gnumach/boot_trace.mdwn
new file mode 100644
index 00000000..d33ef25a
--- /dev/null
+++ b/microkernel/mach/gnumach/boot_trace.mdwn
@@ -0,0 +1,222 @@
+[[!meta copyright="Copyright © 2007, 2008 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]]."]]"""]]
+
+`if NCPUS > 1` stuff is not being considered so far.
+
+
+> i386/i386at/boothdr.S: \_start
+
+> i386/i386at/boothdr.S: boot\_entry
+
+>> i386/i386at/model\_dep.c: c\_boot\_entry
+
+>>> i386/i386at/boothdr.S: discover\_x86\_cpu\_type
+
+>>> i386/i386at/model\_dep.c: i386at\_init
+
+>>>> i386/i386/pic.c: picinit
+
+>>>> i386/i386at/model\_dep.c: mem\_size\_init
+
+>>>> i386/intel/pmap.c: pmap\_bootstrap
+
+>>>> i386/i386/gdt.c: gdt\_init
+
+>>>> i386/i386/idt.c: idt\_init
+
+>>>> i386/i386at/int\_init.c: int\_init
+
+>>>> i386/i386/ldt.c: ldt\_init
+
+>>>> i386/i386/ktss.c: ktss\_init
+
+>>> kern/startup.c: setup\_main
+
+>>>> kern/debug.c: panic\_init
+
+>>>> kern/printf.c: printf\_init
+
+>>>> kern/sched\_prim.c: sched\_init
+
+>>>>> kern/sched\_prim.c: wait\_queue\_init
+
+>>>>> kern/processor.c: pset\_sys\_bootstrap
+
+>>>>> kern/ast.c: ast\_init
+
+>>>> vm/vm\_init.c: vm\_mem\_bootstrap
+
+>>>>> vm/vm\_resident.c: vm\_page\_bootstrap
+
+>>>>>> vm/vm\_resident.c: pmap\_startup
+
+>>>>> kern/zalloc.c: zone\_bootstrap
+
+>>>>> vm/vm\_object.c: vm\_object\_bootstrap
+
+>>>>>> vm/vm\_external.c: vm\_external\_module\_initialize
+
+>>>>> vm/vm\_map.c: vm\_map\_init
+
+>>>>> vm/vm\_kern.c: kmem\_init
+
+>>>>> i386/intel/pmap.c: pmap\_init
+
+>>>>> kern/zalloc.c: zone\_init
+
+>>>>> kern/kalloc.c: kalloc\_init
+
+>>>>> vm/vm\_fault.c: vm\_fault\_init
+
+>>>>> vm/vm\_resident.c: vm\_page\_module\_init
+
+>>>>> vm/memory\_object.c: memory\_manager\_default\_init
+
+>>>> ipc/ipc\_init.c: ipc\_bootstrap
+
+>>>>> ipc/ipc\_table.c: ipc\_table\_init
+
+>>>>> ipc/ipc\_notify.c: ipc\_notify\_init
+
+>>>>> ipc/ipc\_hash.c: ipc\_hash\_init
+
+>>>>> ipc/ipc\_marequest.c: ipc\_marequest\_init
+
+>>>> vm/vm\_init.c: vm\_mem\_init
+
+>>>>> vm/vm\_object.c: vm\_object\_init
+
+>>>> ipc/ipc\_init.c: ipc\_init
+
+>>>>> kern/ipc\_host.c: ipc\_host\_init
+
+>>>>>> kern/ipc\_host.c: ipc\_pset\_init
+
+>>>>>> kern/ipc\_host.c: ipc\_pset\_enable
+
+>>>>>> kern/ipc\_host.c: ipc\_processor\_init
+
+>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL
+
+>>>> kern/timer.c: init\_timers
+
+>>>> kern/mach\_clock.c: init\_timeout
+
+>>>> kern/xpr.c: xprbootstrap
+
+>>>> kern/time\_stamp.c: timestamp\_init
+
+>>>> kern/mach\_clock.c: mapable\_time\_init
+
+>>>> i386/i386at/model\_dep.c: machine\_init
+
+>>>>> device/cons.c: cninit
+
+>>>>> i386/i386/fpu.c: init\_fpu
+
+>>>>> linux/dev/init/main.c: linux\_init
+
+>>>>>> linux/dev/arch/i386/kernel/irq.c: init\_IRQ
+
+>>>>>>> linux/dev/arch/i386/kernel/irq.c: reserve\_mach\_irqs
+
+>>>>>> linux/dev/kernel/sched.c: linux\_sched\_init
+
+>>>>>> linux/dev/init/main.c: calibrate\_delay
+
+>>>>>> linux/dev/glue/kmem.c: linux\_kmem\_init
+
+>>>>>> linux/src/drivers/pci/pci.c: pci\_init
+
+>>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_init
+
+>>>>>>> linux/src/drivers/pci/pci.c: scan\_bus
+
+>>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_fixup
+
+>>>>>> linux/dev/glue/net.c: linux\_net\_emulation\_init
+
+>>>>>> linux/dev/drivers/block/genhd.c: device\_setup
+
+>>>>>>> linux/dev/glue/block.c: blk\_dev\_init
+
+>>>>>>>> linux/src/drivers/block/ide.c: ide\_init
+
+>>>>>>>> linux/dev/drivers/block/floppy.c: floppy\_init
+
+>>>>>>> linux/src/drivers/scsi/scsi.c: scsi\_dev\_init
+
+>>>>>>> linux/dev/net/core/dev.c: net\_dev\_init
+
+>>>>>> linux/pcmcia-cs/glue/pcmcia.c: pcmcia\_init
+
+>>>>> i386/i386at/autoconf.c: probeio
+
+>>>>> i386/i386at/model\_dep.c: inittodr
+
+>>>>> i386/intel/pmap.c: pmap\_unmap\_page\_zero
+
+>>>> kern/task.c: task\_init
+
+>>>>> kern/syscall\_emulation.c: eml\_init
+
+>>>> kern/thread.c: thread\_init
+
+>>>>> i386/i386/pcb.c: pcb\_module\_init
+
+>>>>>> i386/i386/fpu.c: fpu\_module\_init
+
+>>>>>> i386/i386/iopb.c: iopb\_init
+
+>>>> kern/thread\_swap.c: swapper\_init
+
+>>>> kern/sched\_prim.c: recompute\_priorities
+
+>>>> kern/mach\_factor.c: compute\_mach\_factor
+
+>>>> kern/startup.c: start\_kernel\_threads
+
+[...]
+
+>>>> kern/startup.c: cpu\_launch\_first\_thread
+
+>>>>> i386/i386at/model\_dep.c: startrtclock
+
+>>>>>> i386/i386/pit.c: clkstart
+
+>>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL
+
+>>>>> i386/i386/pcb.c: load\_context
+
+[...]
+
+> kern/startup.c: start\_kernel\_threads
+
+> Threads get created.
+
+>> kern/sched\_prim.c: idle\_thread
+
+>> One for each CPU.
+
+>> kern/thread.c: reaper\_thread
+
+>> kern/thread\_swap.c: swapin\_thread
+
+>> kern/sched\_prim.c: sched\_thread
+
+>> [...]
+
+>> kern/bootstrap.c: bootstrap\_create
+
+>> [...]
+
+>> vm\_pageout
+
+>> Does not return.
diff --git a/microkernel/mach/gnumach/building.mdwn b/microkernel/mach/gnumach/building.mdwn
index 3d62c3f0..9c075600 100644
--- a/microkernel/mach/gnumach/building.mdwn
+++ b/microkernel/mach/gnumach/building.mdwn
@@ -1,51 +1,63 @@
-# <a name="Building_GNUMach_GNU_Mach_from_S"> </a> Building [[GNUMach]] from Source
+Additional to the following text, a further [[example]] has be posted.
-If you want to build the [[GNUMach]] kernel yourself instead of just using a pre-built binary, follow these instructions.
-The unpacked source tree is around 20 MiB, and the build tree (with all drivers enabled) is around 50 MiB.
+# Building [[GNU_Mach|gnumach]] from Source
-## <a name="Getting_the_Source_Code"> Getting the Source Code </a>
+If you want to build the [[GNU_Mach|gnumach]] kernel yourself instead of just using a
+pre-built binary, follow these instructions.
-### <a name="Developers_s_rcs"> Developers's rcs </a>
+The unpacked source tree is around 20 MiB, and the build tree (with all drivers
+enabled) is around 50 MiB.
-See [here](http://www.gnu.org/software/hurd/gnumach-download.html#cvs).
+## Getting the Source Code
+
+### Developers's RCS
+
+See <http://savannah.gnu.org/cvs/?group=hurd>.
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co -r gnumach-1-branch gnumach
-(Most probably you want to get hold of the _GNU Mach 1 branch_ and not the trunk, which is also what we've done above.)
+(Most probably you want to get hold of the *GNU Mach 1 branch* and not the
+trunk, which is also what we've done above.)
You then have to create the automatically generatable files:
$ ( cd gnumach && autoreconf --install )
-### <a name="What_Debian_is_currently_using"> What Debian is currently using </a>
+### What Debian is currently using
See [here](http://packages.debian.net/source/unstable/gnumach).
$ apt-get source gnumach
-Please see the Debian [[running/debian/FAQ]] before using _apt-get source_.
+Please see the Debian [[running/debian/FAQ]] before using `apt-get source`.
-## <a name="Preparing_for_the_Build"> Preparing for the Build </a>
+## Preparing for the Build
-### <a name="_on_Debian_systems"> ... on Debian systems </a>
+### ... on Debian systems
-Building GNU Mach requires the _build-essential_ and _fakeroot_ packages, their dependencies and additional packages that are specified by the source gnumach package:
+Building GNU Mach requires the *build-essential* and *fakeroot* packages, their
+dependencies and additional packages that are specified by the source gnumach
+package:
# apt-get install build-essential fakeroot
# apt-get build-dep gnumach
-### <a name="_on_non_Debian_systems"> ... on non-Debian systems </a>
+### ... on non-Debian systems
-Apart from the case that you only want to install GNU Mach's header files (see below), building GNU Mach requires you to have the Mach Interface Generator installed. See [[building_MIG|mig/Building]] about how to do that, then come back here.
+Apart from the case that you only want to install GNU Mach's header files (see
+below), building GNU Mach requires you to have the Mach Interface Generator
+installed. See [[building_MIG|mig/gnu_mig/building]] about how to do that, then come
+back here.
-Additionally, building GNU Mach requires a C compiler, a standard C library and your favourite flavor of awk (gawk) and GNU make.
+Additionally, building GNU Mach requires a C compiler, a standard C library and
+your favourite flavor of awk (gawk) and GNU make.
-## <a name="Building_and_Installing"> Building and Installing </a>
+## Building and Installing
-### <a name="_Debian_deb_files"> ... Debian _.deb_ files </a>
+### ... Debian `.deb` files
-Change into the directory with the downloaded / unpacked _gnumach_ sources, e.g.
+Change into the directory with the downloaded / unpacked GNU Mach sources, e.g.
$ cd gnumach-20050801
@@ -53,20 +65,23 @@ Start the build process with
$ dpkg-buildpackage -us -uc -b -rfakeroot
-[[GNUMach]] is now building. To use the new kernel, you must install the resulting _.deb_ package which is located one directory above the build directory and has a similar name as the build directory, e.g.
+[[GNU_Mach|gnumach]] is now building. To use the new kernel, you must install the
+resulting `.deb` package which is located one directory above the build
+directory and has a similar name as the build directory, e.g.
# dpkg -i ../gnumach_20050801-4_hurd-i386.deb
You can now reboot your computer and enjoy the new kernel.
-### <a name="_TODO_"> [TODO] </a>
+### [TODO]
GNU Mach should be built in a separate directory:
$ mkdir gnumach-build
$ cd gnumach-build
-Find the path to your GNU Mach sources (_[...]/gnumach-1-branch_) and configure it:
+Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure
+it:
$ [...]/gnumach-1-branch/configure [TODO]
@@ -78,21 +93,22 @@ Optionally run the (tiny) test suite:
$ make check
-You can then install and use _gnumach.gz_.
+You can then install and use `gnumach.gz`.
[TODO.]
-### <a name="Installing_only_the_Header_Files"> Installing only the Header Files </a>
+### Installing only the Header Files
GNU Mach should be built in a separate directory:
$ mkdir gnumach-build
$ cd gnumach-build
-Find the path to your GNU Mach sources (_[...]/gnumach-1-branch_) and configure it:
+Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure
+it:
$ [...]/gnumach-1-branch/configure --prefix=
-Install the header files into e.g. _~/gnu/include/_:
+Install the header files into e.g. `~/gnu/include/`:
$ make DESTDIR=~/gnu install-data
diff --git a/microkernel/mach/gnumach/building/example.mdwn b/microkernel/mach/gnumach/building/example.mdwn
new file mode 100644
index 00000000..7db98547
--- /dev/null
+++ b/microkernel/mach/gnumach/building/example.mdwn
@@ -0,0 +1,54 @@
+[[!meta copyright="Copyright © 2007, 2008 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]]."]]"""]]
+
+## Compiling GNU Mach microkernel
+
+Host development system is IBM T41 running Debian Sarge 3.1r0a GNU/Linux.
+
+* gcc version: 3.3.5
+* GNU sed version: 4.1.2
+* GNU make version: 3.8
+* mig version: 1.3-4
+
+Obtained gnumach-1-branch sources from cvs:
+
+ export CVS_RSH="ssh"
+ cvs -z3 -d:ext:anoncvs@ savannah.gnu.org:/cvsroot/hurd co -r gnumach-1-branch gnumach
+
+Obtained mig_1.3-4_i386.deb from
+http://www.hadrons.org/~guillem/debian/pool/main/mig/. Installed it using dpkg:
+
+ dpkg -i mig_1.3-4_i386.deb
+
+Entered into the gnumach sources and did the following for compilation:
+
+ mkdir build
+ cd build
+ ../configure --host=i386-unknown-gnu0.2 --build=i586-pc-linux-gnu \
+ --enable-kdb --enable-ide
+ make
+
+The kernel file is created in the build directory. Move it to /boot on the
+testing x86 system Hurd partition. Rename it as gnumach1 and compress it:
+
+ mv kernel gnumach1
+ gzip gnumach1
+
+Add a new entry on the testing machine /boot/grub/menu.lst to boot the new
+kernel.
+
+ title GNU Hurd K10 Compiled gnumach
+ kernel (hd0,3)/boot/gnumach1.gz root=device:hd2s4 -s
+ module (hd0,3)/hurd/ext2fs.static--multiboot-command-line=${kernel-command-line} \\
+ --host-priv-port=${host-port} --device-master-port=${device-port} \\
+ --exec-server-task=${exec-task} -T typed ${root} $(task-create)$(task-resume)
+ module (hd0,3)/lib/ld.so.1 /hurd/exec $(exec-task=task-create)
+
+Reboot into the new compiled mygnumach1.gz kernel!
diff --git a/microkernel/mach/gnumach/debugging.mdwn b/microkernel/mach/gnumach/debugging.mdwn
new file mode 100644
index 00000000..3a93c6ad
--- /dev/null
+++ b/microkernel/mach/gnumach/debugging.mdwn
@@ -0,0 +1,69 @@
+[[!meta copyright="Copyright © 2007, 2008, 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]]."]]"""]]
+
+Mach has a built-in kernel debugger.
+[Manual](http://www.gnu.org/software/hurd/gnumach-doc/Kernel-Debugger.html).
+
+
+When you're [[running_a_system_in_QEMU|hurd/running/qemu]] you can directly
+[use GDB on the running
+kernel](http://www.nongnu.org/qemu/qemu-doc.html#SEC48).
+
+
+Alternatively you can use an approach like this one: add the following code
+snippet to `device/ds_routines.c`'s `ds_device_open` function, right at the top
+of the function, and modify the code as needed.
+
+ void D (char *s)
+ {
+ switch (s[0] - '0')
+ {
+ case 0:
+ printf ("Hello from %s!\n", __FUNCTION__);
+ break;
+ case 1:
+ printf ("%s: Invoking task_collect_scan.\n", __FUNCTION__);
+ extern void task_collect_scan (void);
+ task_collect_scan ();
+ break;
+ default:
+ printf ("No idea what you want me to do.\n");
+ break;
+ }
+ }
+
+ if (name && name[0] == 'D')
+ D (name + 1);
+
+Then boot your system and do something like this:
+
+ # devprobe D0
+ Hello from D!
+ # devprobe D1
+ D: Invoking task_collect_scan.
+ # devprobe D2
+ No idea what you want me to do.
+
+This is especially useful if you need to manually trigger some stuff inside the
+running kernel, as with the *D1* example.
+
+
+If you're doing real low level debugging, you might want to put variations of
+the following snipped into the code, this code will write a `#` character at
+line `[LINE]`, column `[COLUMN]` on the screen:
+
+ *((char *) 0xb8000 + 2 * ([LINE] * 80 + [COLUMN])) = '#';
+ halt_cpu ();
+
+The call of `halt_cpu` will -- as the name suggests -- halt the system
+afterwards. This might be what you want or it might not, but it is needed at
+some place when running the kernel inside QEMU, as QEMU somehow decides not to
+update its display buffer anymore under certain conditions.
diff --git a/microkernel/mach/gnumach/hardware_compatibility_list.mdwn b/microkernel/mach/gnumach/hardware_compatibility_list.mdwn
new file mode 100644
index 00000000..2152c079
--- /dev/null
+++ b/microkernel/mach/gnumach/hardware_compatibility_list.mdwn
@@ -0,0 +1,111 @@
+[[!meta copyright="Copyright © 2007, 2008, 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]]."]]"""]]
+
+# CPU Architecture
+
+GNU Mach current only supports the `x86` (alias `ia32` or `i386`) architecture.
+
+`amd64`/`ix64` should work in `32-bit` compatibility mode. However, in practice
+`amd64` systems seem to be troublesome more often than not. This is probably
+related to the same (chipset-related) problems we often see with recent
+machines; but it seems that `amd64` ones use problematic chipsets particularily
+often. So far we haven't heard of similar problems with Intel's eqivalent
+`ix64` (or `EM64T` as it used to be called) -- but maybe that just means fewer
+people tried running the Hurd on such machines :-)
+
+Support for running GNU Mach (and a complete GNU/Hurd system) in a
+[Xen](http://www.cl.cam.ac.uk/research/srg/netos/xen/) `domU` (again on `x86`
+only) is [[being_worked_on|ports/xen]].
+
+Read about further [[ports]].
+
+# Memory
+
+GNU Mach will use a maximum of 1 GiB of RAM. If your system has more,
+the surplus will silently be ignored. (In past times, this would hinder GNU
+Mach from booting at all, but this has been fixed, so you no longer need to
+apply GRUB's `uppermem` directive.)
+
+# Video Cards
+
+Debian distributes a version of [X.org](http://x.org/). If your video card driver
+depends on a special kernel interface such as that provided by
+the `agpgart` kernel module for the Linux kernel, then your video
+card will only be supported by the VESA driver.
+
+Using an internal i815 videocard [won't
+work](http://lists.debian.org/debian-hurd/2007/12/msg00007.html) (at least when
+using the specialized driver), because of [missing AGP GART support in GNU
+Mach](http://lists.debian.org/debian-hurd/2007/12/msg00011.html).
+
+# Sound
+
+No sound cards are supported at this time.
+
+# USB 1.1/2.0
+
+USB is not supported at this time.
+
+However, USB-type keyboards and mice may (and have been reported to) work
+nevertheless, given that the hardware / BIOS is doing emulation to the
+supported legacy interfaces.
+
+# IEEE 1394 (Firewire)
+
+IEEE 1394 is not supported at this time
+
+# Storage
+
+All common IDE drives should work. Some drive geometries do not work,
+e.g. drives with hundreds of GiB of storage space, see [[!GNU_Savannah_bug
+26425]].
+
+[[!toggle id="SATA" text="SATA drives may work in compatibility mode."]]
+<!-- Sure? --[[tschwinge]] -->
+
+[[!toggleable id="SATA" text="""
+This is how booting a [[GNU/Hurd_system|hurd]] will typically fail if GNU Mach
+couldn't connect to the hard disk, e.g., in a SATA system without IDE
+compatibility mode:
+
+ start (hd0,3)/hurd/ext2fs.static: (hd0,3)/hurd/ext2fs.static
+ device:hd0s4: No such device or address
+
+There *may* be an option in the system's BIOS setup to configure enabling such
+a compatibility mode.
+"""]]
+
+# Device Drivers
+
+[GNU Mach Reference Manual,
+Configuration](http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html)
+contains a list of device drivers that are included in GNU Mach and elaborates
+on the hardware devices they support.
+
+# User Success Reports
+
+These boards are known to work. Gnumach/Hurd has been installed and run on these board successfully.
+
+* ASUS P2B motherboard with an Intel PII 450MHz CPU with Intel Pro/100 NIC in PCI slot
+* Intel SE-440BX motherboard
+* VIA EPIA-M Mini-ITX motherboard with VIA Nehemiah C3 1Ghz processor. Onboard NIC (VIA Rhine) works good.
+* Compaq Deskpro ENS, Pentium3 (666 MHz upgraded to 1 GHz), Intel i815 chipset, chipset integrated NIC (detected twice, but works fine with eth0; trying to access eth1 confuses the driver and makes the system unusable), Matrox Mystique 220 (PCI) graphics card. Also works with rtl8029 (NE2000 PCI) NIC when onboard NIC disabled in BIOS setup.
+* Abit BX6 Rev. 2.0 with Celeron 400, after disabling "memory hole at 15MB" option in BIOS setup. (Otherwise, Mach detects only 15MiB of RAM, making Hurd run *extremely* slow and instable.) Should also work with PentiumII or Pentium3.
+
+# User Failure Reports
+
+Some people couldn't get these hardware combinations to work with Hurd.
+
+Note: The Debian GNU/Hurd installer actually runs on Linux, so it (almost) always works. The critical bit is booting after installation.
+
+* ASUS P5A motherboard and AMD K6-2 333MHz CPU - doesn't boot
+* ASUS P2B-LS motherboard with an Intel PII-MMX 400 MHz CPU - this board had a defective onboard NIC (that could not be disable in BIOS) and working 3COM Etherlink III NIC in a PCI bus slot. This combination worked with GNU/Linux. The 3COM NIC is known to work with the Hurd. However, while gnumach/Hurd will boot on this system, it is confused by the defective onboard NIC and unable to use the 3COM NIC. Attempting to start networking generates a continous stream of eth0 and eth1 reset messages on the console that renders the system unusable.
+* ASrock 775Twins-HDTV with a Pentium D 810 (533 MGz FSB/2600GHz core -- information no longer present on intel's site). Doesn't boot.
diff --git a/microkernel/mach/gnumach/hardwarecompatibilitylist/discussion.mdwn b/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn
index 69ca3190..69ca3190 100644
--- a/microkernel/mach/gnumach/hardwarecompatibilitylist/discussion.mdwn
+++ b/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn
diff --git a/microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn b/microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn
deleted file mode 100644
index 078b5a31..00000000
--- a/microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn
+++ /dev/null
@@ -1,61 +0,0 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
-
-# CPU Architecture
-
-GNU Mach current only supports the `x86` architecture. `amd64` should -- in
-theory -- as well work fine in `32-bit` compatibility mode, however in practice
-there are problems with the chipsets used for such processors, so that booting
-on such a system won't succeed.
-
-Support for running GNU Mach (and a complete GNU/Hurd system) in a
-[Xen](http://www.cl.cam.ac.uk/research/srg/netos/xen/) `domU` (again on `x86`
-only) is [[being_worked_on|xen]].
-
-# Memory
-
-GNU Mach will use a maximum of 1 GiB of RAM. If your system has more,
-the surplus will silently be ignored. (In past times, this would hinder GNU
-Mach from booting at all, but this has been fixed, so you no longer need to
-apply GRUB's `uppermem` directive.)
-
-# Video Cards
-
-Debian distributes a version of [X.org](http://x.org/). If your video card driver
-depends on a special kernel interface such as that provided by
-the `agpgart` kernel module for the Linux kernel, then your video
-card will only be supported by the VESA driver.
-
-# Sound
-
-No sound cards are supported at this time.
-
-# USB
-
-USB is not support at this time.
-
-# Storage
-
-IDE drives are known to work.
-SATA drives work in compatibility mode. <!-- Sure? --[[tschwinge]] -->
-
-# Device Drivers
-
-[GNU Mach Reference Manual,
-Configuration](http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html)
-contains a list of device drivers that are included in GNU Mach and elaborates
-on the hardware devices they support.
diff --git a/microkernel/mach/gnumach/ports.mdwn b/microkernel/mach/gnumach/ports.mdwn
index 89651d72..afc91d7a 100644
--- a/microkernel/mach/gnumach/ports.mdwn
+++ b/microkernel/mach/gnumach/ports.mdwn
@@ -1,19 +1,22 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
+[[!meta copyright="Copyright © 2007, 2008, 2009 Free Software Foundation,
+Inc."]]
-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.txt]].
+[[!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]]."]]"""]]
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+ * x86. This is the main port.
-* [PowerPC](http://www.pjbruin.dds.nl/hurd/). Is not in a usable state.
-* Alpha. Was once started, but isn't in a usable state either.
+ * [[Xen]]
+
+ * [PowerPC](http://www.pjbruin.dds.nl/hurd/). Is not in a usable state.
+
+ * Alpha: [project I](http://savannah.nongnu.org/projects/hurd-alpha), and
+ [project II](http://savannah.nongnu.org/projects/gnumach-alpha). Was once
+ started, but isn't in a usable state either.
+
+ * MIPS. Status completely unknown.
diff --git a/microkernel/mach/gnumach/ports/xen.mdwn b/microkernel/mach/gnumach/ports/xen.mdwn
new file mode 100644
index 00000000..bf26410a
--- /dev/null
+++ b/microkernel/mach/gnumach/ports/xen.mdwn
@@ -0,0 +1,93 @@
+[[!meta copyright="Copyright © 2007, 2008, 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]]."]]"""]]
+
+[[!toc]]
+
+# Xen dom0, hypervisor
+
+/!\ Now that GNU Mach handles PAE you can use a PAE-enabled hypervisor.
+
+You can either get binaries at <http://youpibouh.thefreecat.org/hurd-xen/> or build them yourself.
+
+- Copy `gnumach-xen-pae` and `hurd-modules` to your dom0 /boot. If you still have a non-PAE hypervisor, use `gnumach-xen-nonpae` instead.
+- Copy `hurd` into `/etc/xen`, edit it for fixing access to your hurd / and swap
+
+# GNU/Hurd system
+
+/!\ You need an already installed [[GNU/Hurd_system|hurd/running]].
+
+If you have a free partition, you can fdisk to type 0x83, create a filesystem using:
+
+ sudo mke2fs -b 4096 -I 128 -o hurd /dev/sda4
+
+Replace /dev/sda4 with your partition. Install and use crosshurd to setup a GNU/Hurd system on this partition.
+
+# /etc/xen/hurd configuration
+
+Here is a sample /etc/xen/hurd configuration
+
+ kernel = "/boot/gnumach-xen-pae"
+ memory = 256
+ disk = ['phy:sda4,hda,w']
+ extra = "root=device:hd0"
+ vif = [ '' ]
+ ramdisk = "/boot/hurd-modules"
+
+Do not give more than 580MB memory (due to bootstrap limitations, it's not easy
+to map more).
+
+Suggestions about [[networking_configuration]] are available.
+
+If you need stable MAC addresses, use a syntax like `vif = [
+'mac=00:16:3e:XX:XX:XX, bridge=br0' ]`.
+
+# Running Hurd with Xen
+
+To run Hurd with Xen, use:
+
+ xm create -c hurd
+
+and gnumach should get started. Proceed with native-install.
+
+ export TERM=mach
+ ./native-install
+
+- If `xm` complains about networking (`vif could not be connected`), it's Xen scripts' fault, see Xen documentation for how to configure the network. The simplest way is network-bridge with fixed IPs (note that you need the bridge-utils package for this). You can also just disable networking by commenting the vif line in the config.
+- If `xm` complains `Error: (2, 'Invalid kernel', 'xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry\n')`, you most probably have a PAE-enabled hypervisor and a non-PAE gnumach. Either install and boot non-PAE hypervisor and kernel, or rebuilt gnumach in PAE mode.
+
+# Building from sources
+
+If you want to generate these images, first get the `gnumach-1-branch-Xen-branch` branch from gnumach CVS.
+Then look for "Ugly" in `kern/bootstrap.c`, how to generate `hurd-modules` is explained there, and you'll have to fix `EXT2FS_SIZE` and `LD_SO_SIZE` by hand.
+Then use
+
+ ./configure --enable-platform=xen
+ make
+
+The current `hurd-modules` was built from the debian packages `hurd 20070606-2` and `libc0.3 2.6.1-1`.
+/!\ This means that when using this image, your GNU/Hurd system also needs to be a glibc version 2.6 or later-based one!
+
+---
+
+# Miscellaneous
+
+[[Internals]].
+
+[[!GNU_Savannah_task 5468]], [[!GNU_Savannah_task 6584]].
+
+---
+
+# `pv-grub`
+
+From Xen 4.0 on you'll be able to run the GNU Hurd directly using `pv-grub`,
+without the need to [prepare a special bootstrap
+image](http://youpibouh.thefreecat.org/hurd-xen/build_hurd-modules) (like an
+initrd).
diff --git a/microkernel/mach/gnumach/ports/xen/internals.mdwn b/microkernel/mach/gnumach/ports/xen/internals.mdwn
new file mode 100644
index 00000000..eae9d9a8
--- /dev/null
+++ b/microkernel/mach/gnumach/ports/xen/internals.mdwn
@@ -0,0 +1,14 @@
+[[!meta copyright="Copyright © 2008 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 port does use Xen's para-virtualized interface for device (ide, network,
+etc.) access.
+
+[[Virtualization]].
diff --git a/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn b/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn
new file mode 100644
index 00000000..52e6db87
--- /dev/null
+++ b/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn
@@ -0,0 +1,105 @@
+[[!meta copyright="Copyright © 2008 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]]."]]"""]]
+
+[[!toc]]
+
+The Xen dom0 infrastructure provides for a bridged networking setup using shell
+scripts to configure the bridging device properly and attach the domUs' virtual
+interfaces to the bridge. However, we've [seen
+problems](http://lists.gnu.org/archive/html/bug-hurd/2008-08/msg00023.html)
+when using this approach, so to [solve these
+issues](http://lists.gnu.org/archive/html/bug-hurd/2008-09/msg00071.html),
+instead suggest the following configuration method (to achieve the same thing).
+
+This is for a Debian dom0.
+
+# */etc/network/interfaces*
+
+Comment out everything referencing your physical devices. Add this:
+
+ auto br0
+ iface br0 inet dhcp
+ bridge_ports regex (eth|vif).* noregex
+
+... or if you want to do the manual configuration dance:
+
+ auto br0
+ iface br0 inet static
+ bridge_ports regex (eth|vif).* noregex
+ address 192.168.10.60
+ netmask 255.255.255.0
+ [...]
+
+This needs a version of the `bridge-utils` package more recent than the current
+Debian stable one ([[!debbug 405215]]). (It's trivial to rebuild the `dpkg` of,
+e.g., the Debian testing one on Debian stable.)
+
+# */etc/xen/xend-config.sxp*
+
+Make sure that only `(network-script network-dummy)` and `(vif-script
+vif-bridge)` are activated and all other `(network-script network-WHATEVER)`,
+respective `(vif-script vif-WHATEVER)` are commented out.
+
+
+# Sample configuration files on Debian Lenny
+
+## /etc/xen/hurd on dom0
+
+ kernel = "/boot/gnumach-xen"
+ memory = 256
+ disk = ['phy:sda5,hda,w']
+ extra = "root=device:hd0"
+ vif = [ 'mac=00:16:3e:00:00:00, bridge=br0' ]
+ ramdisk = "/boot/hurd-modules"
+
+/dev/sda5 is an extended partition. br0 is bridge interface on dom0.
+
+## /etc/xen/xend-config.sxp on dom0
+
+ (network-script 'network-bridge netdev=br0')
+ (dom0-min-mem 196)
+ (dom0-cpus 0)
+ (vncpasswd '')
+
+## /etc/network/interfaces on dom0
+
+ auto br0
+ iface br0 inet static
+ address 192.168.1.211
+ network 192.168.1.0
+ netmask 255.255.255.0
+ broadcast 192.168.1.255
+ gateway 192.168.1.1
+ bridge_ports eth1
+
+eth1 is the interface that is connected to the Internet on the LAN:
+
+## Doing settrans on domU
+
+ settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.1.210 -g 192.168.1.1 -m 255.255.255.0
+
+## /sbin/ifconfig on dom0
+
+ br0 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33
+ inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0
+ inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:14187 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:9214 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:936563 (914.6 KiB) TX bytes:746184 (728.6 KiB)
+
+ eth1 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33
+ inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:34339 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:18526 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:3019251 (2.8 MiB) TX bytes:1453672 (1.3 MiB)
diff --git a/microkernel/mach/gnumach/projects.mdwn b/microkernel/mach/gnumach/projects.mdwn
new file mode 100644
index 00000000..47a2756c
--- /dev/null
+++ b/microkernel/mach/gnumach/projects.mdwn
@@ -0,0 +1,129 @@
+[[!meta copyright="Copyright © 2005, 2006, 2007, 2008 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 page is a place to keep track of ideas about things that may be improved
+in GNU Mach, so that it'll evolve to a reliable microkernel for The Hurd, both
+in terms of stability and performance. If you find anything missing here,
+please feel free to add a entry with a short description.
+
+If you want to help with any of the task (thanks!), please send a mail to
+*[[mailing lists/bug-hurd]]* stating what task you wish to work on,
+so that no duplicate efforts end up.
+
+# Active Branches
+
+ * `gnumach-1-branch` is the main branch.
+
+ * `gnumach-1-branch-Xen-branch` is a branch created by Samuel Thibault for
+ working on a [[ports/Xen]] port.
+
+ * `gnumach-1-branch-gdb-branch` is a branch created by Michael Casadevall for
+ working on [[GDB_stubs]].
+
+
+# Task List
+
+ * [[Clean_up_the_code]]
+
+ * [[Open Issues|tag/open_issue_gnumach]]
+
+ * Update the core architecture and drivers
+
+ * Check what NetBSD, FreeBSD and Linux do with their host specific code
+ (i486, PPC, Sparc, ...). And if it might be wise to take that and use
+ it in GNU Mach. There is no need to worry about purely internal API's,
+ but the external ones shouldn't require any major changes.
+
+ * Write a list of all functions provided by the host dependant code in
+ GNU Mach that gets used in the non-host specific code (kernel, IPC and
+ VM).
+
+ * Once we have decided what the new internal API should look like, make a
+ list of the new API and the old one, and try to make things as
+ compatible as possible, but not at the expense of anything.
+
+ * Implement Migrating Threads
+
+ * Migrating Threads (MT) could improve IPC performance and making easier
+ the work of the scheduler. For more information, check
+ <http://www.usenix.org/publications/library/proceedings/sf94/ford.html>
+
+ * Improve the external pagers interface
+
+ * Implement read-ahead (huge I/O improvements expected).
+
+ * Making this interface synchronous should improve I/O performance
+ significantly, without (almost) any drawbacks (we also get some
+ advantage from MT's).
+
+ * Implement more paging eviction policies, so they fit better with usual
+ behaviour of the pagers.
+
+ * Implement resource accounting for external pagers.
+
+ * VM
+
+ * Put it on user level (?)
+
+ * Clean up the mess.
+
+ * Provide a fast way to read/write from/to a memory object.
+
+ * Simplify/normalise the code.
+
+ * Simplify the IPC Semantics
+
+ * There are a lot of things in GNU Mach's IPC that we don't need. Track
+ down those things, and get rid of them without requiring many changes
+ in the Hurd (the changes will affect MiG, but that is OK).
+
+ * Temporary mappings for Client-Server memory transfers
+
+ * Extend Mach's IPC to provide some kind of object which can represent a
+ range of memory that can temporarily be mapped into the servers address
+ space for sending/receiving data. This would allow us to avoid
+ excessive memory copies.
+
+ * Find a new way to work with unaligned memory.
+
+ * GDB remote debugging support
+
+ * Implement support for GDB debugging via serial line and/or network.
+ Maybe this can be done together with the host-specific work above.
+
+ See [[GDB_stubs]].
+
+ * Make it run as a [[UNIX]]/Linux executable.
+
+ * Neal:
+
+ <neal> here's a fun project: port the mach interface to Linux
+ <neal> (e.g., via kernel modifications)
+ <neal> or, to posix/glibc
+ <neal> (mmap, some minimal ptrace, etc.)
+
+ * From the [Hurd bits at
+ sourceforge.net](http://sourceforge.net/projects/hurd):
+ <http://hurd.cvs.sourceforge.net/hurd/gnumach-otop/>, started by John
+ Tobey. Last time touched in 2003. Status completely unknown.
+
+ * [README](http://hurd.cvs.sourceforge.net/hurd/gnumach-otop/README?view=markup)
+
+
+# Wish List
+
+ * Interface for userspace non-critical drivers.
+
+ * Sound Support
+
+ * WLAN support (ipw2200) with WEP/WPA
+
+ * ACPI support
diff --git a/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn b/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn
new file mode 100644
index 00000000..2a9b4b60
--- /dev/null
+++ b/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn
@@ -0,0 +1,123 @@
+[[!meta copyright="Copyright © 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]]."]]"""]]
+
+[[!tag open_issue_gnumach]]
+
+# Restructure the tree in a sane way
+
+Merge `linux/src` and `linux/dev`. But only if using a sane RCS, so leave it
+as-is for now. Also, a bunch of (header) files from there may probably be
+discarded.
+
+
+# Remove dead files from the GNU Mach source tree
+
+For *exported* files (via `make install`), the plan is to first stick some
+`#error This file is scheduled for removal. Write to <bug-hurd@gnu.org> if you
+have a reason to have it kept available.` into them, and then actually remove
+them after some months.
+
+For some of the internal header files (containing function prototypes and the
+like), it might actually be useful to use them. (And then get rid of a bunch
+of `extern ...` statements in other files.)
+
+This following list was assembled by putting such a `#error ...` line into each
+of the `gnumach-1-branch`'s header files (exported and internal; save the
+`linux/` ones (only internal) for simplicity), and then trying to build GNU
+Mach until this would succeed again (by removing offending `#error ...`s), and
+afterwards using the set of exported files for building a cross toolchain
+(again still removing offending `#error ...`s). A very crude and imprecise
+method.
+
+So, additionally to the list given below, there may actually be a bunch of
+further files (also exported ones) that serve no real value, but are being
+`#include`d through one way or another.
+
+* [[!source_gnumach-1-branch ddb/db_expr.h]]
+
+ Currently used, but copyright violation? Rewrite?
+
+* [[!source_gnumach-1-branch ddb/db_print.h]]
+
+ Copyright violation? Currently unused, but could be used in principle (or
+ be rewritten, to avoid the copyright oddity).
+
+* [[!source_gnumach-1-branch ddb/tr.h]]
+
+ Copyright violation. Unused. Remove.
+
+* [[!source_gnumach-1-branch device/dev_master.h]]
+
+ Might be usable for SMP? Remove otherwise.
+
+* [[!source_gnumach-1-branch i386/i386/kttd_machdep.h]]
+
+* [[!source_gnumach-1-branch i386/i386/sched_param.h]]
+
+* [[!source_gnumach-1-branch i386/include/mach/i386/cthreads.h]]
+
+ Was probably once exported, but is no longer.
+
+* [[!source_gnumach-1-branch i386/include/mach/i386/ioccom.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/device/audio_status.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/device/tape_status.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/alert.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/boot.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/macro_help.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/multiboot.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/profil.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/profilparam.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach/exec/a.out.h]]
+
+ Exported.
+
+* [[!source_gnumach-1-branch include/mach_debug/pc_info.h]]
+
+ Currently not exported, but was probably once meant to be.
+
+* [[!source_gnumach-1-branch kern/act.h]]
+
+* [[!source_gnumach-1-branch kern/refcount.h]]
+
+* [[!source_gnumach-1-branch kern/shuttle.h]]
+
+
+# Remove dead functions, variables, etc. from source files
+
+
+# Rewrite ugly code
diff --git a/microkernel/mach/gnumach/projects/gdb_stubs.mdwn b/microkernel/mach/gnumach/projects/gdb_stubs.mdwn
new file mode 100644
index 00000000..064da7bf
--- /dev/null
+++ b/microkernel/mach/gnumach/projects/gdb_stubs.mdwn
@@ -0,0 +1,19 @@
+[[!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]]."]]"""]]
+
+[[!tag open_issue_gnumach open_issue_gdb]]
+
+ * <http://lists.gnu.org/archive/html/bug-hurd/2008-04/msg00103.html>
+
+ * [ChangeLog.gdb](http://cvs.savannah.gnu.org/viewvc/gnumach/ChangeLog.gdb?root=hurd&view=markup&pathrev=gnumach-1-branch-gdb-branch)
+
+This may be another follow-up project: [*Linux Kernel GDB tracepoint
+module*](http://thread.gmane.org/gmane.comp.gdb.devel/29369), Hui Zhu,
+2010-10-09.
diff --git a/microkernel/mach/gnumach/reference_manual.mdwn b/microkernel/mach/gnumach/reference_manual.mdwn
new file mode 100644
index 00000000..95d11517
--- /dev/null
+++ b/microkernel/mach/gnumach/reference_manual.mdwn
@@ -0,0 +1,26 @@
+[[!meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+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 GNU Mach Reference Manual* documents the architecture, the usage and the
+programming of the GNU Mach microkernel. At the moment, the manual documents
+the interface completely, but is not very useful as a tutorial or introduction
+into the Mach architecture.
+
+ * [HTML version](http://www.gnu.org/software/hurd/gnumach-doc/index.html)
+ for browsing online,
+ * [PostScript
+ version](http://www.gnu.org/software/hurd/gnumach-doc/mach.ps) [around
+ 900KiB],
+ * [gzipped PostScript
+ version](http://www.gnu.org/software/hurd/gnumach-doc/mach.ps.gz)
+ [around 300KiB],
+ * [PDF version](http://www.gnu.org/software/hurd/gnumach-doc/mach.pdf)
+ [around 700KiB].
diff --git a/microkernel/mach/gnumach/revivalproject.mdwn b/microkernel/mach/gnumach/revivalproject.mdwn
deleted file mode 100644
index b04b695f..00000000
--- a/microkernel/mach/gnumach/revivalproject.mdwn
+++ /dev/null
@@ -1,51 +0,0 @@
-## <a name="GNU_Mach_Revival_Project"> </a> GNU Mach Revival Project
-
-This page is a place to keep track of all those things that we need to improve in GNU Mach, so that it is a reliable microkernel for The Hurd, both in terms of stability and performance. If you find anything missing here, please feel free to add a entry with a short description.
-
-If you want to help with any of the task (thanks!), please send a mail to the mailing list <http://www.gnu.org/software/hurd/help.html#TOCmail> stating what task you wish to work on, so that no duplicate efforts end up.
-
-**_Task List_**
-
-* Clean up the Code. (Assigned to: **Team Leader:** _Gianluca Guida (gianluca)_, **Hackers:** _Alfredo Beaumont (abeaumont)_, _Pedro J. Ruiz Lopez (holzplatten)_, _Matheus Morais (xsun)_, _We need **YOU** here!_)
- * Remove all dead files from the GNU Mach source tree.
- * Restructure the tree in a sane way.
- * Remove dead functions/variables/etc from source files.
- * Rewrite ugly code.
-
-* Update the core architecture and drivers. (Assigned to: **Team Leader:** _Gianluca Guida (gianluca)_, **Hackers:** _Alfredo Beaumont (abeaumont)_, _Sergio Lopez (koro)_, _Pedro J. Ruiz Lopez (holzplatten)_, _We need **YOU** here!_)
- * Check what NetBSD, FreeBSD and Linux do with their host specific code (i486, PPC, Sparc, ...). And if it might be wise to take that and use it in GNU Mach. There is no need to worry about purely internal API's, but the external ones shouldn't require any major changes.
- * Write a list of all functions provided by the host dependant code in GNU Mach that gets used in the non-host specific code (kernel, IPC and VM).
- * Once we have decided what the new internal API should look like, make a list of the new API and the old one, and try to make things as compatible as possible, but not at the expense of anything.
-
-* Implement Migrating Threads. (Assigned to: _Sergio Lopez (koro)_)
- * Migrating Threads (MT) could improve IPC performance and making easier the work of the scheduler. For more information, check this <http://www.usenix.org/publications/library/proceedings/sf94/ford.html>
-
-* Improve the external pagers interface. (Assigned to: _We need **YOU** here!_)
- * Making this interface synchronous should improve I/O performance significantly, without (almost) any drawbacks (we also get some advantage from MT's).
- * Implement more paging eviction policies, so they fit better with usual behaviour of the pagers.
- * Implement resource accounting for external pagers.
-
-* VM. (Assigned to: _We need **YOU** here!_)
- * Put it on user level (?)
- * Clean up the mess.
- * Provide a fast way to read/write from/to a memory object.
- * Simplify/normalise the code.
-
-* Simplify the IPC Semantics. (Assigned to: _We need **YOU** here!_)
- * There are a lot of things in GNU Mach's IPC that we don't need. Track down those things, and get rid of them without requiring many changes in the Hurd (the changes will affect MiG, but that is OK).
-
-* Temporary mappings for Client-Server memory transfers. (Assigned to: _We need **YOU** here!_)
- * Extend Mach's IPC to provide some kind of object which can represent a range of memory that can temporarily be mapped into the servers address space for sending/receiving data. This would allow us to avoid excessive memory copies.
- * Find a new way to work with unaligned memory.
-
-* GDB remote debugging support (Assigned to: _Alfred M. Szmidt (ams)_)
- * Implement support for GDB debugging via serial line and/or network. Maybe this can be done together with the host-specific work above.
-
-**_Wish List_**
-
-* Interface for userspace non-critical drivers.
-* Sound Support ;-)
-* WLAN support (ipw2200) with WEP/WPA
-* ACPI support
-
--- [[Main/SergioLopez]] - 20 Dec 2005 (Corrections by Alfred M. Szmidt)
diff --git a/microkernel/mach/gnumach/xen.mdwn b/microkernel/mach/gnumach/xen.mdwn
deleted file mode 100644
index 3d70b4f6..00000000
--- a/microkernel/mach/gnumach/xen.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-Note: since GNU Mach doesn't handle PAE, you need a PAE-disabled Hypervisor.
-
-- Copy `gnumach-xen` and `hurd-modules` to your dom0 /boot.
-- Copy `hurd` into `/etc/xen`, edit it for fixing access to your hurd / and swap
-- Run `xm create -c hurd`, gnumach should get started.
-- If `xm` complains about networking, it's Xen fault, see Xen documentation for how to configure the network. The simplest way is network-bridge with fixed IPs.
-
-If you want to generate these images, first get the `gnumach-1-branch-Xen-branch` branch from gnumach CVS.
-Then look for "Ugly" in `kern/bootstrap.c`, how to generate `hurd-modules` is explained there, and you'll have to fix `EXT2FS_SIZE` and `LD_SO_SIZE` by hand.
-Then use
-
- ./configure --enable-platform=xen
- make
-
-Instead, you can get the binaries at <http://dept-info.labri.fr/~thibault/hurd-xen/>.
-
-The current `hurd-modules` was built from the debian packages `hurd 20070606-2` and `libc0.3 2.6.1-1`.
diff --git a/microkernel/mach/history.mdwn b/microkernel/mach/history.mdwn
index fe3247df..5a3608cd 100644
--- a/microkernel/mach/history.mdwn
+++ b/microkernel/mach/history.mdwn
@@ -1,14 +1,14 @@
-# <a name="Table_of_Contents"> Table of Contents </a>
-
-%TOC%
-
# <a name="Early_beginnings"> Early beginnings </a>
Mach has quite a history. Everything actually started at the University of Rochester in 1975. It was invented to demonstrate how operating systems could be built using a modular design where processes communicated using message passing, even across networks. The system was called the Rochester Intelligent Gateway and ran on a 16 bit mini computer called Eclipse from Data General.
One of the engineers behind the project was Richard Rashid. In 1979 he moved his socks to Carnegie Mellon University to continue his research on message passing operating systems. The result emerged in 1981 and was called Accent.
-Accent kept running at CMU until 1984 but was by then being run over by UNIX. Rashid then decided to use an early embrace strategy and started designing the third generation OS project called Mach. By making Mach compatible with UNIX, Mach was supposed to gain a lot of available UNIX software.
+Accent kept running at CMU until 1984 but was by then being run over by
+[[UNIX]]. Rashid then decided to use an early embrace strategy and started
+designing the third generation OS project called Mach. By making Mach
+compatible with UNIX, Mach was supposed to gain a lot of available UNIX
+software.
Mach was a vast improvement over Accent. It incorporated parts commonly used today, such as: threads, better IPC, multiprocessor support and an advanced VM system.
@@ -36,7 +36,8 @@ Meanwhile, OSKit became unmaintained, thus posing more of a burden on than being
In 2005 Gianluca Guida started a different attempt to use the osenv interface with minimal changes to GNU Mach 1.x, thus allowing use of the generic driver interface while importing as little of the umaintained OSKit code as possible. However, there turned out to be serious problems with OSKit, so this attempt was abandoned as well.
-Today, GNU Mach development focuses on the 1.x branch again -- see also [[gnumach/RevivalProject]].
+Today, GNU Mach development focuses on the 1.x branch again -- see also this
+list of [[gnumach/projects]].
# <a name="Status_of_the_project"> Status of the project </a>
diff --git a/microkernel/mach/ipc.mdwn b/microkernel/mach/ipc.mdwn
index c493174c..aaf3ba23 100644
--- a/microkernel/mach/ipc.mdwn
+++ b/microkernel/mach/ipc.mdwn
@@ -1,19 +1,12 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+[[!meta copyright="Copyright © 2007, 2008 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]]."]]"""]]
[[General_information|/ipc]] about IPC.
diff --git a/microkernel/mach/ipc/sequence_numbering.mdwn b/microkernel/mach/ipc/sequence_numbering.mdwn
index 3aff669d..eb94d662 100644
--- a/microkernel/mach/ipc/sequence_numbering.mdwn
+++ b/microkernel/mach/ipc/sequence_numbering.mdwn
@@ -1,19 +1,12 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
+[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]]
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+[[!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]]."]]"""]]
Mach's [[IPC]] mechanism allows for getting access to a message's sequence
number.
diff --git a/microkernel/mach/logo.png b/microkernel/mach/logo.png
deleted file mode 100644
index 94951acf..00000000
--- a/microkernel/mach/logo.png
+++ /dev/null
Binary files differ
diff --git a/microkernel/mach/mig.mdwn b/microkernel/mach/mig.mdwn
index f47eadfb..4275a4b4 100644
--- a/microkernel/mach/mig.mdwn
+++ b/microkernel/mach/mig.mdwn
@@ -1,12 +1,22 @@
-[[img logo.png]]
+[[!meta copyright="Copyright © 2001, 2002, 2003, 2006, 2007, 2008 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 Mach Interface Generator (MIG) is an [[IDL]] compiler. Based on an
interface definition, it creates stubs to [[invoke]] object methods
and to demultiplex incoming messages. These stubs conveniently hide
-the details of Mach's [[IPC]] machinery.
-
-GNU MIG is fully compatible with OSF MIG.
+the details of Mach's [[IPC]] machinery and make it easy to implement
+and use Mach [[interface]]s as [[remote_procedure_calls_(RPC)|rpc]].
-* MIG's [homepage](http://www.gnu.org/software/hurd/mig.html)
* [[Documentation]]
-* [[Building]] - Building (and obtaining) MIG
+
+# Implementations
+
+ * [[GNU_MIG]]
diff --git a/microkernel/mach/mig/discussion.mdwn b/microkernel/mach/mig/discussion.mdwn
deleted file mode 100644
index fdab3a45..00000000
--- a/microkernel/mach/mig/discussion.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-Created
-
--- [[Main/JoachimNilsson]] - 29 Oct 2002
-
-The logo seems very programmer friendly as this web topic is intended.
-
--- [[Main/GrantBow]] - 15 Nov 2002
-
-There's little traffic here and little content. Perhaps we should just remove this web? It seemed like a good idea to create it when we split the others off...
-
--- [[Main/GrantBow]] - 22 Dec 2002
-
-Maybe, but not yet. Let's keep it for a while longer - say, three months. 1st April 2003. If the traffic still is low then we move the Mig topics to the Mach web ...
-
-...Mig = **Mach** Interface Generator.
-
--- [[Main/JoachimNilsson]] - 22 Dec 2002
diff --git a/microkernel/mach/mig/documentation.mdwn b/microkernel/mach/mig/documentation.mdwn
index 222f89d1..be762960 100644
--- a/microkernel/mach/mig/documentation.mdwn
+++ b/microkernel/mach/mig/documentation.mdwn
@@ -1,27 +1,84 @@
-[[toc ]]
+[[!meta copyright="Copyright © 2002, 2003, 2005, 2007, 2008, 2009 Free Software
+Foundation, Inc."]]
-# About
+[[!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 a small collection of links to external documents describing the *Mach
+Interface Generator* used by GNU Mach.
-This is a small collection of links to external documents describing the Mach Interface Generator used by GNU Mach.
# MIG and C Thread Programming
-A tutorial which demonstrates the use of the C Threads library primitives in writing a multithreaded program and the use of the Mach Interface Generator (MIG) to generate remote procedure calls for interprocess communication. Like its companion tutorial, it is based on the Mach 2.5 system. However, the concepts are applicable to Mach 3.0 user level programming.
+A tutorial which demonstrates the use of the C Threads library primitives in
+writing a multithreaded program and the use of the Mach Interface Generator
+(MIG) to generate remote procedure calls for interprocess communication. Like
+its companion tutorial, it is based on the Mach 2.5 system. However, the
+concepts are applicable to Mach 3.0 user level programming.
+
+Linda R. Walmer and Mary R. Thompson. *A Programmer's Guide to the Mach User
+Environment*. [PostScript
+](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.ps),
+[Doc](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.doc).
+February 1988. School of Computer Science, Carnegie Mellon University.
-Linda R. Walmer and Mary R. Thompson. **A Programmer's Guide to the Mach User Environment**. [PostScript ](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.ps)[Doc](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.doc) February 1988. School of Computer Science, Carnegie Mellon University.
+An ftp directory containing the [mig programming
+examples](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig_example)
+for this tutorial.
-An ftp directory containing the [mig programming examples](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig_example) for this tutorial.
+Slides to Rich Drave's talk on MIG, on November 21, 1991:
+[PostScript](http://www.cs.cmu.edu//afs/cs/project/mach/public/doc/unpublished/internals_slides/Mig/root.ps),
+[TeX](http://www.cs.cmu.edu//afs/cs/project/mach/public/doc/unpublished/internals_slides/Mig/slides.tex).
-Slides to Rich Drave's talk on Mig, the Mach Interface Generator, on November 21, 1991: [PostScript](ftp://ftp.cs.cmu.edu//afs/cs/project/mach/public/doc/unpublished/internals_slides/Mig/root.ps) [TeX](ftp://ftp.cs.cmu.edu//afs/cs/project/mach/public/doc/unpublished/internals_slides/Mig/slides.tex)
# Roots
Mig is an implementation of a subset of the Matchmaker **language**.
-"Matchmaker is a language for specifying and automating the generation of multilingual interprocess communication interfaces. MIG is an interim implementation of a subset of the Matchmaker language that generates C and C++ remote procedure call interfaces for interprocess communication between Mach tasks."
+"Matchmaker is a language for specifying and automating the generation of
+multilingual interprocess communication interfaces. MIG is an interim
+implementation of a subset of the Matchmaker language that generates C and C++
+remote procedure call interfaces for interprocess communication between Mach
+tasks."
+
+Richard P. Draves, Michael B. Jones, Mary R. Thompson, *MIG - THE MACH
+INTERFACE GENERATOR*.
+[ps](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.ps),
+[doc](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.doc).
+November 1989. Department of Computer Science, Carnegie-Mellon University.
-Richard P. Draves,Michael B. Jones,Mary R. Thompson, **MIG - THE MACH INTERFACE GENERATOR**. [ps](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.ps) [doc](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.doc) November 1989. Department of Computer Science, Carnegie-Mellon University.
# Related Work
-See the citations about [Mach and matchmaker: kernel and language support for objectoriented distributed systems](http://citeseer.ist.psu.edu/context/93073/0) here. "M. B. Jones and R. F. Rashid, \`Mach and matchmaker: kernel and language support for objectoriented distributed systems', Proceedings of the Conference on Object-Oriented Programming Systems, Languages, and Applications, October 1986, pp. 67--77."
+See the citations about [Mach and matchmaker: kernel and language support for
+objectoriented distributed
+systems](http://citeseer.ist.psu.edu/context/93073/0). "M. B. Jones and
+R. F. Rashid, *Mach and matchmaker: kernel and language support for
+objectoriented distributed systems*, Proceedings of the Conference on
+Object-Oriented Programming Systems, Languages, and Applications, October 1986,
+pp. 67--77."
+
+
+# Further Relevant Documentation
+
+ * The [[GNU_Mach_Reference_Manual|gnumach/reference_manual]], espacially
+ [Chapter 4, Inter Process
+ Communication](http://www.gnu.org/software/hurd/gnumach-doc/Inter-Process-Communication.html).
+
+ * OSF's [Server Writer's Guide (ps)](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/server_writer.ps)
+ [Server Writer's Guide (pdf)](http://shakthimaan.com/downloads/hurd/server_writer.pdf)
+
+ * OSF's [Server Writer's Interfaces (ps)](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/server_interface.ps)
+ [Server Writer's Interfaces (pdf)](http://shakthimaan.com/downloads/hurd/server_interface.pdf)
+
+ * Flags:
+
+ * [[dealloc_and_dealloc[&#93;|dealloc]]
+ * [[ServerCopy]]
+
+ * MIG *in action*: [[hurd/io_path]].
diff --git a/microkernel/mach/mig/documentation/dealloc.mdwn b/microkernel/mach/mig/documentation/dealloc.mdwn
new file mode 100644
index 00000000..b627b532
--- /dev/null
+++ b/microkernel/mach/mig/documentation/dealloc.mdwn
@@ -0,0 +1,15 @@
+[[!meta copyright="Copyright © 2008, 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]]."]]"""]]
+
+The [[GNU_Mach_Reference_Manual|gnumach/reference_manual]] describes the
+`dealloc` flag in [Chapter 4.2.4,
+Memory](http://www.gnu.org/software/hurd/gnumach-doc/Memory.html).
+
+What exactly is `dealloc[]` (`hurd/fs.defs:dir_readdir`)?
diff --git a/microkernel/mach/mig/documentation/servercopy.mdwn b/microkernel/mach/mig/documentation/servercopy.mdwn
new file mode 100644
index 00000000..8abf9b07
--- /dev/null
+++ b/microkernel/mach/mig/documentation/servercopy.mdwn
@@ -0,0 +1,23 @@
+[[!meta copyright="Copyright © 2008 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]]."]]"""]]
+
+For IN args. If set it...
+
+ * removes the `__mig_deallocate` for OOL IN data, which is usually done after
+ the implementation has been called;
+
+ * adds a `boolean_t NAMESCopy` for the IN arg `NAME` to indicate whether the
+ data will persist nevertheless (OOL case) or has to be copied by the
+ implementation (inline case).
+
+Cf., [[translator/exec]] server, `exec.defs`.
+
+I.e., the IN args' memory region (OOL case) persists after the implementation
+has returned.
diff --git a/microkernel/mach/mig/gnu_mig.mdwn b/microkernel/mach/mig/gnu_mig.mdwn
new file mode 100644
index 00000000..1bcbd545
--- /dev/null
+++ b/microkernel/mach/mig/gnu_mig.mdwn
@@ -0,0 +1,24 @@
+[[!meta copyright="Copyright © 2001, 2006, 2008, 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]]."]]"""]]
+
+GNU MIG is the GNU distribution of the
+[[Mach_3.0_interface_generator_*MIG*|mig]], as maintained by the GNU Hurd
+developers for the GNU project.
+
+You need this tool to compile the GNU Mach and GNU Hurd distributions, and to
+compile the GNU C library for the Hurd. Also, you will need it for other
+software in the GNU system that uses Mach-based
+[[inter-process_communication|ipc]].
+
+GNU MIG is fully compatible with [[OSF_MIG|mig]].
+
+ * [[Building]] - building (and obtaining) GNU MIG
+ * [[Open Issues|tag/open_issue_mig]]
diff --git a/microkernel/mach/mig/building.mdwn b/microkernel/mach/mig/gnu_mig/building.mdwn
index ee299166..f92f7dbe 100644
--- a/microkernel/mach/mig/building.mdwn
+++ b/microkernel/mach/mig/gnu_mig/building.mdwn
@@ -4,7 +4,8 @@ If you want to build the Mach Interface Generator yourself instead of just using
## <a name="Getting_the_Source_Code"> Getting the Source Code </a>
-You can chose between getting the [sources from the developers's rcs](http://www.gnu.org/software/hurd/mig-download.html#cvs):
+You can chose between getting the [sources from the developers'
+RCS](http://savannah.gnu.org/cvs/?group=hurd):
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co mig
@@ -12,7 +13,7 @@ You can chose between getting the [sources from the developers's rcs](http://www
$ apt-get source mig
-Please see the Debian [[running/debian/FAQ]] before using _apt-get source_.
+Please see the Debian [[hurd/running/debian/FAQ]] before using _apt-get source_.
The unpacked source tree is around 1 MiB, and the build tree also is around 1 MiB.
@@ -29,7 +30,8 @@ Building the Mach Interface Generator requires the _build-essential_ and _fakero
Building the Mach Interface Generator requires a C compiler, a standard C library (with corresponding header files) and your favourite flavor of awk (gawk), yacc (bison), lex (flex) and make.
-Additionally, you need to have GNU Mach's header files installed. See [[mach/gnumach/building]] about how to do that, then come back here.
+Additionally, you need to have GNU Mach's header files installed. See
+[[mach/gnumach/building]] about how to do that, then come back here.
## <a name="Building_and_Installing"> Building and Installing </a>
diff --git a/microkernel/mach/mig/logo.png b/microkernel/mach/mig/logo.png
deleted file mode 100644
index cdfec179..00000000
--- a/microkernel/mach/mig/logo.png
+++ /dev/null
Binary files differ
diff --git a/microkernel/mach/port.mdwn b/microkernel/mach/port.mdwn
index 5dcc9ba3..af4a0c8d 100644
--- a/microkernel/mach/port.mdwn
+++ b/microkernel/mach/port.mdwn
@@ -1,19 +1,12 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+[[!meta copyright="Copyright © 2007, 2008 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]]."]]"""]]
Mach ports are [[capabilities|capability]].
diff --git a/microkernel/mach/rpc.mdwn b/microkernel/mach/rpc.mdwn
index c315fa4e..72acfaa0 100644
--- a/microkernel/mach/rpc.mdwn
+++ b/microkernel/mach/rpc.mdwn
@@ -1,19 +1,12 @@
-[[license text="""
-Copyright © 2007 Free Software Foundation, Inc.
-
-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.txt]].
-
-By contributing to this page, you agree to assign copyright for your
-contribution to the Free Software Foundation. The Free Software Foundation
-promises to always use either a verbatim copying license or a free
-documentation license when publishing your contribution. We grant you back all
-your rights under copyright, including the rights to copy, modify, and
-redistribute your contributions.
-"""]]
+[[!meta copyright="Copyright © 2007, 2008 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]]."]]"""]]
[[General_information|/rpc]] about RPC.
diff --git a/microkernel/viengoos.mdwn b/microkernel/viengoos.mdwn
new file mode 100644
index 00000000..66c6ff36
--- /dev/null
+++ b/microkernel/viengoos.mdwn
@@ -0,0 +1,45 @@
+[[!meta copyright="Copyright © 2008, 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
+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]]."]]"""]]
+
+*Viengoos* is a research kernel, designed and written by Neal Walfield.
+
+As of late 2009, the project is on hold, due to time constraints.
+
+Viengoos is not really meant to be a successor to [[Mach]]. It is highly
+experimental; some of the techniques it employs, in particular, those related
+to [[memory_management]] and [[IPC]], are unproven. These were motivated by
+[[shortcomings_in_Mach|hurd/critique]] as well as current operating systems. A
+research system is unlikely the best base for a product. A better approach is
+to view Viengoos as an experimental platform whose goal is to explore solutions
+to some of the [[issues_uncovered_by_the_Hurd|challenges]]. Knowledge gained
+can then be integrated into something like [[Mach]].
+
+The source can be downloaded from the *viengoos.git* repository, cf.
+<http://git.savannah.gnu.org/gitweb/?p=hurd/viengoos.git>. You can
+check it out using, for example:
+
+ git clone git://git.sv.gnu.org/hurd/viengoos.git
+
+Then update to viengoos-on-bare-metal
+
+ cd viengoos
+ git checkout -b viengoos-on-bare-metal origin/viengoos-on-bare-metal
+
+viengoos-on-bare-metal is the current development focus.
+
+Discussion should be held on the [[mailing lists/l4-hurd]] mailing list.
+
+ * [[Building]]
+ * Running
+ * [[QEMU]]
+ * [[Hardware]]
+ * [[Documentation]]
+ * [[Projects]]
diff --git a/microkernel/viengoos/building.mdwn b/microkernel/viengoos/building.mdwn
new file mode 100644
index 00000000..45111c35
--- /dev/null
+++ b/microkernel/viengoos/building.mdwn
@@ -0,0 +1,100 @@
+[[!meta copyright="Copyright © 2008, 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]]."]]"""]]
+
+Check out Viengoos and switch to the viengoos-on-bare-metal branch
+(all development is currently done on this branch and it will
+eventually be merged into the master branch):
+
+ $ git clone git://git.savannah.gnu.org/hurd/viengoos.git
+ $ cd viengoos
+ $ git checkout -b viengoos-on-bare-metal origin/viengoos-on-bare-metal
+
+Generate the autoconf environment (note that --force is not specified
+as we have our own version of config.guess and config.sub):
+
+ $ autoreconf -i
+
+Configure a build directory:
+
+ $ mkdir build
+ $ cd build
+ $ ../configure --host=x86_64-pc-viengoos-gnu --with-newlib
+
+Now, build Viengoos. Running make the first time will automatically
+fetch binutils and gcc from the Internet and build a cross compiler.
+Running make again will build the Viengoos proper. Again, the build
+process with fetch several tarballs including Newlib, the Boehm GC and
+Sqlite.
+
+ $ make
+ ...
+ The cross compiler is now set-up. Re-run `make' and proceed as usual.
+ make[2]: Leaving directory `.../viengoos/build'
+ make[1]: Leaving directory `.../viengoos/build'
+ $ make
+
+# Booting Using QEMU
+
+To boot Viengoos, use Grub 2. You cannot use Grub Legacy: Viengoos is
+an ELF64 executable, which Grub Legacy does not support.
+
+First, check out Grub 2 from svn:
+
+ $ svn co svn://svn.savannah.gnu.org/grub/trunk/grub2
+ $ cd grub2
+
+Before building Grub 2, you should apply the following patch, which
+makes it easy to tell Grub to load a specific grub.cfg at start up
+([details](http://lists.gnu.org/archive/html/grub-devel/2009-01/msg00099.html)).
+
+ $ wget http://www.gnu.org/software/hurd/microkernel/viengoos/grub2-config.diff -O /dev/stdout | patch -p0
+
+Next, build Grub 2:
+
+ $ ./autogen.sh
+ $ mkdir build
+ $ cd build
+ $ ../configure --prefix=`pwd`/../install
+ $ make && make install
+
+Create the boot disk:
+
+ $ cd ../install
+ $ bin/grub-mkrescue boot.img --configfile="(hd0,1)/grub.cfg" --image-type=floppy --modules='help reboot serial multiboot pc configfile normal boot fat'
+
+Now, create /viengoos and link viengoos and hieronymus into that
+directory:
+
+ $ mkdir /viengoos
+ $ cd /viengoos
+ $ ln -s ~/viengoos/build/viengoos/viengoos.stripped viengoos
+ $ ln -s ~/viengoos/build/hieronymus/hieronymus.stripped hieronymus
+
+Also, create a grub.cfg file in /viengoos/grub.cfg:
+
+ set timeout=1
+ set default=0
+ set root=hd0,1
+
+ menuentry "Viengoos" {
+ multiboot /viengoos -D 3 -o serial
+ module /hieronymus
+ }
+
+NB: If you edit grub.cfg and a backup file called grub.cfg~ is
+created, qemu will use grub.cfg~ instead of grub.cfg! Thus, after
+editing grub.cfg, be sure to delete any grub.cfg~ file!
+
+Finally, boot!
+
+ $ qemu-system-x86_64 -serial stdio -fda ~/grub2/install/boot.img -hda fat:/viengoos -boot a
+
+By default, Hieronymus is configured to load ruth, a test suite. Ruth
+can take a long time to complete.
diff --git a/microkernel/viengoos/documentation.mdwn b/microkernel/viengoos/documentation.mdwn
new file mode 100644
index 00000000..52ff7a48
--- /dev/null
+++ b/microkernel/viengoos/documentation.mdwn
@@ -0,0 +1,56 @@
+[[!meta copyright="Copyright © 2008 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 most up-to-date documentation is in the source code itself, see in
+particular the header files in the hurd directory.
+
+There is a started but as-of-yet incomplete manual in the doc
+directory, which documents the Viengoos API and the Hurd API. A
+version of that is available [[here|reference-guide.pdf]]. It is
+not, however, automatically regenerated, and thus may not be up to
+date.
+
+Academic Papers:
+
+ * [Viengoos: A Framework for Stakeholder-Directed Resource
+ Allocation](http://walfield.org/papers/2009-walfield-viengoos-a-framework-for-stakeholder-directed-resource-allocation.pdf).
+ By Neal H. Walfield. Submitted to EuroSys 2009.
+
+ General-purpose operating systems not only fail to provide adaptive
+ applications the information they need to intelligently adapt, but
+ also schedule resources in such a way that were applications to
+ aggressively adapt, resources would be inappropriately scheduled. The
+ problem is that these systems use demand as the primary indicator of
+ utility, which is a poor indicator of utility for adaptive
+ applications.
+
+ We present a resource management framework appropriate for traditional
+ as well as adaptive applications. The primary difference from current
+ schedulers is the use of stakeholder preferences in addition to
+ demand. We also show how to revoke memory, compute the amount of
+ memory available to each principal, and account shared
+ memory. Finally, we introduce a prototype system, Viengoos, and
+ present some benchmarks that demonstrate that it can efficiently
+ support multiple aggressively adaptive applications simultaneously.
+
+ * [Improving Usability via Access Decomposition and Policy
+ Refinement](http://walfield.org/papers/20070104-walfield-access-decomposition-policy-refinement.pdf).
+ By Neal H. Walfield and Marcus Brinkmann. Technical report
+ (submitted to HotOS 2007).
+
+ Commodity operating systems fail to meet the security, resource
+ management and integration expectations of users. We propose a unified
+ solution based on a capability framework as it supports fine grained
+ objects, straightforward access propagation and virtualizable
+ interfaces and explore how to improve resource use via access
+ decomposition and policy refinement with minimum interposition. We
+ argue that only a small static number of scheduling policies are
+ needed in practice and advocate hierarchical policy specification and
+ central realization.
diff --git a/microkernel/viengoos/documentation/reference-guide.pdf b/microkernel/viengoos/documentation/reference-guide.pdf
new file mode 100644
index 00000000..6fbea23b
--- /dev/null
+++ b/microkernel/viengoos/documentation/reference-guide.pdf
Binary files differ
diff --git a/microkernel/viengoos/grub2-config.diff b/microkernel/viengoos/grub2-config.diff
new file mode 100644
index 00000000..e4b1ef40
--- /dev/null
+++ b/microkernel/viengoos/grub2-config.diff
@@ -0,0 +1,47 @@
+2009-01-17 Neal H. Walfield <address@hidden>
+
+ * util/i386/pc/grub-mkrescue.in: Add new option --configfile. If
+ not the set and not the empty string, load it from the generated
+ config file on boot.
+
+Index: util/i386/pc/grub-mkrescue.in
+===================================================================
+--- util/i386/pc/grub-mkrescue.in (revision 2148)
++++ util/i386/pc/grub-mkrescue.in (working copy)
+@@ -49,6 +49,7 @@
+ --image-type=TYPE select floppy or cdrom (default)
+ --emulation=TYPE select El Torito boot emulation type floppy
+ or none (default) (cdrom only)
++ --configfile=FILE config file to load (default: none)
+
+ grub-mkimage generates a bootable rescue image of the specified type.
+
+@@ -93,6 +94,9 @@
+ echo "Unknown emulation type \`$emulation'" 1>&2
+ exit 1 ;;
+ esac ;;
++ --configfile=*)
++ configfile=`echo "$option" | sed 's/--configfile=//'`
++ ;;
+ -*)
+ echo "Unrecognized option \`$option'" 1>&2
+ usage
+@@ -121,9 +125,15 @@
+ ${aux_dir}/boot/grub/
+
+ modules="biosdisk `cat ${input_dir}/partmap.lst` ${modules}"
+-for i in ${modules} ; do
+- echo "insmod $i"
+-done > ${aux_dir}/boot/grub/grub.cfg
++{
++ for i in ${modules} ; do
++ echo "insmod $i"
++ done
++ if test x$configfile != x
++ then
++ echo "configfile $configfile"
++ fi
++} > ${aux_dir}/boot/grub/grub.cfg
+
+ for d in ${overlay}; do
+ echo "Overlaying $d"
diff --git a/microkernel/viengoos/hardware.mdwn b/microkernel/viengoos/hardware.mdwn
new file mode 100644
index 00000000..aff70604
--- /dev/null
+++ b/microkernel/viengoos/hardware.mdwn
@@ -0,0 +1,50 @@
+[[!meta copyright="Copyright © 2008 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]]."]]"""]]
+
+I boot over the network using PXE.
+
+On my build machine, I have installed a tftpserver. Specifically, I use
+the one built into dnscache. In /tftpboot, I have symlinks to pistachio,
+sigma0, and the root of the build tree.
+
+My build machine boots using PXE. It gets an IP address, contacts
+my build machine and loads [grub2pxe](http://grub.enbug.org/PXEBOOT).
+Note that there is no need to use pxelinux; grub2 is a valid PXE
+executable. Further, grub2 uses the PXE interface for accessing the
+network, so if your hardware supports PXE, then you do not need to
+worry about a network driver. Here is how I build grub2 and the
+grub2 image:
+
+ cd ~/src
+ svn co svn://svn.savannah.gnu.org/grub/trunk/grub2
+ cd grub2
+ mkdir build
+ cd build
+ ../configure --prefix=$HOME/src/grub2/install && make && make install
+ cd ~/src/grub2/install
+ bin/grub-mkimage --output=core.img --prefix="(pxe)" pxe pxecmd help reboot serial multiboot pc configfile normal boot
+ cat lib/grub/i386-pc/pxeboot.img core.img > grub2pxe
+
+Here is my /tftpboot/grub.cfg, which sends output to the first
+[[serial_port]]:
+
+ # Timeout for menu
+ set timeout=1
+
+ # Set default boot entry as Entry 0
+ set default=0
+
+ menuentry "Viengoos" {
+ multiboot /viengoos/laden/laden -o serial -D
+ module /pistachio
+ module /sigma0
+ module /viengoos/viengoos/viengoos.stripped -D 3 -o serial
+ module /viengoos/hieronymus/hieronymus.stripped
+ }
diff --git a/microkernel/viengoos/projects.mdwn b/microkernel/viengoos/projects.mdwn
new file mode 100644
index 00000000..971206bb
--- /dev/null
+++ b/microkernel/viengoos/projects.mdwn
@@ -0,0 +1,17 @@
+[[!meta copyright="Copyright © 2008, 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 projects:
+
+[[!inline
+pages="microkernel/viengoos/projects/* and !microkernel/viengoos/projects/*/*"
+show=0
+feeds=no
+actions=yes]]
diff --git a/microkernel/viengoos/projects/address_space_management.mdwn b/microkernel/viengoos/projects/address_space_management.mdwn
new file mode 100644
index 00000000..2d00e4f4
--- /dev/null
+++ b/microkernel/viengoos/projects/address_space_management.mdwn
@@ -0,0 +1,40 @@
+[[!meta copyright="Copyright © 2008, 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]]."]]"""]]
+
+[[!tag open_issue_viengoos]]
+
+In Viengoos, a process's address space is managed entirely in user
+space by the process itself. This creates two interesting problems:
+dealing with circular dependencies resulting from having to manage the
+address space data structures and accessing and manipulating the
+address space data structures.
+
+First, managing the address space requires resources, which in turn
+may require address space (e.g., data structures require memory which
+require address space, etc.). We currently break this circular
+dependency by trying to keep enough resources in reserve that
+allocating resources for managing the address space never requires
+more resources than are minimally in the reserve. The reserve is
+currently chosen in an ad-hoc fashion. It would be nice to determine
+it more systematically. Moreover, it would be nice to reduce the
+cases in which a reserve is required. This may be possible by
+restructuring some of the code.
+
+Second, the address space data structures are protected using a single
+lock. This not only means that only a single thread can be updating
+the address space at a time, but that if a thread faults and the
+address space is locked, then the process dead locks! It should be
+possible to at least walk the address space using lock-free
+techniques. This requires updating the address space construction
+code such that all addresses remain valid during any given
+manipulation. Second, to avoid the mentioned dead-lock problem, we
+try to ensure that accessing the data structures will never result in
+a fault. This means protecting the stack. An alternative approach is
+to use undo buffers.
diff --git a/microkernel/viengoos/projects/capability-aware_compiler.mdwn b/microkernel/viengoos/projects/capability-aware_compiler.mdwn
new file mode 100644
index 00000000..b4e465d9
--- /dev/null
+++ b/microkernel/viengoos/projects/capability-aware_compiler.mdwn
@@ -0,0 +1,16 @@
+[[!meta copyright="Copyright © 2008, 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]]."]]"""]]
+
+[[!tag open_issue_viengoos]]
+
+Modify, e.g., gcc to understand capability semantics and teach gcc how
+to optimize it, e.g., how to batch and combine calls.
+
+This project is deemed suitable for a thesis.
diff --git a/microkernel/viengoos/projects/new_hash_function.mdwn b/microkernel/viengoos/projects/new_hash_function.mdwn
new file mode 100644
index 00000000..d0374720
--- /dev/null
+++ b/microkernel/viengoos/projects/new_hash_function.mdwn
@@ -0,0 +1,22 @@
+[[!meta copyright="Copyright © 2008, 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
+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 open_issue_viengoos]]
+
+The current hash function in libhurd-ihash results in a lot of
+collisions when the hash table is 80% full. To overcome this, we keep
+hash tables at most 30% full. This represents a fair amount of
+overhead. Find a better algorithm. There can either be one that is
+appropriate in the general case or one that works well in a relevant,
+specific case, e.g., viengoos/object.c uses a hash to find the object
+corresponding to a frame, which is keyed on its physical address.
+
+Note that this applies to the Hurd's [[hurd/libihash]], too.
diff --git a/microkernel/viengoos/serial_port.mdwn b/microkernel/viengoos/serial_port.mdwn
new file mode 100644
index 00000000..14efcb9f
--- /dev/null
+++ b/microkernel/viengoos/serial_port.mdwn
@@ -0,0 +1,15 @@
+[[!meta copyright="Copyright © 2008 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]]."]]"""]]
+
+Viengoos can be configured to send output to the serial port (in fact,
+this is the only configuration that I use). To talk to the serial
+port, I use ser2net, which provides a telnet interface to the serial
+port. Be sure to edit /etc/ser2net.conf to use 115200 bps, which
+Viengoos uses by default.