summaryrefslogtreecommitdiff
path: root/doc/navigating
diff options
context:
space:
mode:
Diffstat (limited to 'doc/navigating')
-rw-r--r--doc/navigating54
1 files changed, 54 insertions, 0 deletions
diff --git a/doc/navigating b/doc/navigating
new file mode 100644
index 00000000..2d836255
--- /dev/null
+++ b/doc/navigating
@@ -0,0 +1,54 @@
+Some ideas on navigating and understanding the Hurd source code.
+
+First you must understand Mach IPC and MiG. Pay special attention to
+the way that various kinds of MiG calls manage memory; this is crucial
+to avoid leaks. The "Mach server writers' guide" explains all this.
+
+Most programs that make up the Hurd are built out of libraries; a
+solid understanding of the libraries that make up the source is
+essential. First start by reading the libports library specification
+(in libports/ports.h). This library manages the Mach ports that
+servers handle.
+
+Then start looking at some Hurd interfaces. A good place to start is
+to look at the proc server. There is only one proc server in a
+running system, but examine the way the interface (hurd/process.defs)
+is written and the way the proc server implements it.
+
+Then look at the auth server; make sure you understand how an auth
+transaction works. Again, by looking at the implementation, you can
+see a simple example.
+
+Filesystems are more complex; the interface specification is in
+hurd/io.defs and hurd/fs.defs. These interfaces are implemented by
+three different libraries: trivfs, diskfs, and netfs. trivfs
+implements single-node filesystems (that thus have no directories).
+Most trivfs filesystems don't even do any filesystem stuff at all.
+See, for example, the null translator (trans/null.c) for a simple
+example of using trivfs.
+
+diskfs is used for disk-based filesystems, with two in existence now:
+ext2fs and ufs. If you write another diskfs-based filesystem, you
+should DEFINITELY imitate the algorithms found in ext2fs and ufs; this
+is crucial to getting locking right.
+
+netfs is used for nfs and other such things: with directories, and all
+the actual filesystem operations being done by some other program (not
+necessarily over a network). The nfs implementation is fairly easy to
+understand.
+
+Examine some translators in the trans directory to see various simple
+examples.
+
+Also very important is to acquire familiarity with the Hurd and Mach
+calls provided in the GNU C library. Look at the header files in libc
+to see what they are, and read through them. Also examine parts of
+the libc implementation whenever you have any doubt about what an
+interface call should do: find where the C library uses that call, and
+that should help. It's worth, in fact, spending some time just
+exploring the implementation of various things in the hurd C library.
+
+You should take a look at all the libraries in the Hurd; spend time
+reading the code. Feel free to ask questions to help understand what
+you read.
+