Version X (2017-06-XX)
Subhurd's processes are now properly embedded in the Motherhurds
process hierarchy. They can be inspected and debugged just like any
The random translator has been reimplemented using the SHAKE128
algorithm from the SHA-3 family as the underlying cryptographic
The Hurd now uses its own variant of 'assert' that prints a stack
trace on failures.
Version 0.9 (2016-12-18)
The 'boot' program can now be run as unprivileged user, allowing any
user to create unprivileged Subhurds.
An ethernet multiplexer (eth-multiplexer translator) has been merged
into this repository. This is a network multiplexer that makes
available virtual interfaces, and routes traffic between these and a
real ethernet interface. It uses the Berkeley Packet Filter library
(libbpf), which has also been merged. The ethernet multiplexer now
generates and uses stable pseudo-random ethernet addresses for the
As usual, bugs have been fixed throughout the code, notably in
libpager and ext2fs which now gracefully handles running out of space.
Further compatibility fixes have been applied (for compliance to
standards such as POSIX).
Version 0.8 (2016-05-18)
The netfs library is using the lockless reference-counting primitives
for both peropen and node objects now, and the global reference
counting lock has been removed.
The integer hashing library gained a new interface to use non-integer
keys. It is now used in libdiskfs' and nfs' node cache, and the ftpfs
Several bugs in our native fakeroot tool have been fixed improving
stability and correctness of the translation.
The devnode translator and the hurd-slab library have been merged into this
The code has been cleaned up, and we fixed numerous bugs, most notably
a crash in pfinet, a locking bug in libdiskfs, and an out-of-bounds
access in ext2fs' block cache.
Version 0.7 (2015-10-31)
The node cache in ext2fs has been improved, generalized, and moved to
libdiskfs. It is now also used by isofs and fatfs.
The native fakeroot tool has been greatly improved. It now handles
named sockets, and multiple corner cases related to permissions were
identified and fixed.
A new utility `rpcscan' has been introduced. It scans Mach servers
and displays the RPCs handled by the associated demuxer.
A long-standing synchronization issue involving the filesystem
translators, libdiskfs, and libpager has been identified and fixed.
The code has been updated to work with newer versions of the compiler
and libc, and numerous bugs have been fixed throughout the code.
Version 0.6 (2015-04-10)
Numerous cleanups and stylistic fixes of the code base. Several
problems have been identified using static analysis and exercising
tools, and have subsequently been fixed.
The message dispatching code in the Hurd servers has been improved.
Among other things, we now make use of the protected payloads
introduced in GNU Mach 1.5.
The embedded gz and bz2 decompressor code has been removed, libz and
libbz2 is used instead.
The native fakeroot tool has been greatly improved and is now able to
build many packages. The portinfo and rpctrace tools now offer a
better debugging experience.
The performance of the integer hashing library has been improved.
The init server has been split into the startup server (handling early
system bootstrap and shutdown), and a SysV-style init program (aptly
The procfs and random translators have been merged into this repository.
Version 0.5 (2013-09-27)
Really too many changes have been applied to list them individually. Some
Numerous bug fixes, compatibility fixes (for compliance to standards such as
POSIX), and stability fixes.
Thread-local storage (TLS) support in the threading libraries. Conversion from
cthreads to POSIX Threads (pthreads).
Large store support for ext2fs.
A mtab translator.
IPv6 support in pfinet, based on Linux 2.2.14.
A XKB parser and wide character support for the Hurd console.
The new remap translator can be used to create an environment in which
some paths are redirected, for instance the TCP/IP stack, or /bin/sh.
The new nullauth utility drops all authentication credentials before running a
program. This is also useful to drop privileges on behalf of translators that
do not need any credentials.
Several improvements to rpctrace, such as the -E option to add/change/unset
environment variables among the ones inherited by the process.
Improvements to the default pager and tmpfs virtual filesystem generally, and
for the latter also add the possibility to specify the size with the --size
The UFS filesystem translator and supporting utilities have been removed:
unused/untested/unmaintained for a decade.
Follows a list assembled in 2002, more than ten years ago:
Many, many, many bugs have been fixed, including some resource
consumption problems and race conditions. The system can compile
itself as well as most external applications. The amount of stress
the system can tolerate has increased a lot.
The new ftpfs translator can be used to transparently access FTP
servers through the filesystem. Together with the new hostmux
translator, which can invoke host-specific translators like ftpfs,
this leads to a very comfortable way to use FTP archives on the Hurd.
A new translator usermux can invoke user-specific translators. It can
be used to provide a symlink to all users home directories in a single
place (similar to amd/automount).
The tmpfs translator can be used to store files and directories in RAM
without any overhead of a real filesystem. The amount of memory
allocated equals the amount of space occupied, and an upper limit can
Shadow passwords are now supported. If the password field in
/etc/passwd contains the string "x", the crypted password is looked up
in /etc/shadow instead. A new password server distributes auth ports
after password verification.
The pfinet server uses the Linux 2.2.12 IP stack now. It supports the
new interface types dummy and tun which provide a bottomless sink and
IP tunnel interface respectively. It also supports all common network
The Hurd can now access CD-ROMs containing an ISO9660 file format with
the new iso9660fs translator. Rock Ridge extensions are supported, as
well as some GNU extensions to store GNU-specific filesystem attributes.
Two new translators, hello and hello-mt, illustrate how to implement
simple trivfs based filesystems in the Hurd.
A new utility `rpctrace' aids in debugging the Hurd by listing all
invoked RPCs with message id and port right information.
The Hurd does no longer contain the utility `su', which is included in
the GNU shellutils package. `setauth --save' can also be used as a
The init script mechanism became more flexible, as it was splitted
into several files. This allows to plug in different styles of init
procedures by just hooking them into /libexec/runsystem.
The ext2fs server understands the sparse_super filesystem option, and
can deal with the filetype option (but won't make use of this itself).
Several utilities have new options. All store based filesystems can
be configured with --no-suid, --no-exec, --bootflags, --boot-command
and --no-cache. The null translator also can be full now (--full).
The magic translator can provide an empty directory.
The crash server supports several modes of operation, it can suspend
or kill a crashing task. Core dumping is planned for but not
implemented yet. Users can set their own crash server using an
The new fakeroot translator appears to give transparent access to the
underlying directory node. However, all accesses are made using the
credentials of the translator regardless of the client and the
translator fakes success for chown and chmod operations, reporting the
faked IDs and modes in later stat calls.
The new fakeauth program runs a command with a fake authentication
handle that claims to be root or any arbitrary identity derived from
that handle, but in fact is always just a proxy for your real
The features provided by the fakeroot translator and fakeauth are
combined in the new fakeroot program.
The proc server can show the start time of processes.
* sync -> syncfs, takes args
* Default pager (serverboot) understands Linux (mkswap) signature pages.
New boot script function $(add-raw-paging-file) inhibits looking for the
signature page. New function $(add-linux-paging-file) checks for the
page and refuses to use the swap partition or paging file if there is no
valid Linux signature page. A stand-alone default pager `mach-defpager'
is implemented which supports the same features. With
in the boot script, serverboot doesn't become the default pager.
* libstore uses off64_t internally, allowing large stores to be
handled properly. The zero store supports suffix b, k/K, m/M, g/G
for blocks, kilo-, mega- and gigabytes resp. when specifying the
store size. The remap store understands N+ as the end of the store
starting from block N. A new store type `bunzip2' uncompresses
stores in the bzip2 format into memory.
* msgport, ping
The Hurd interfaces have been changed to support large files.
The new proxy-defpager translator grants unprivileged users access to
the default pager.
Version 0.2 (1997-06-09)
Summary of important externally visible changes since version 0.1:
Many, many bugs have been fixed, including some resource consumption
problems. The system can now compile itself, and stay running the
whole time. It is quite reliable, and is used here for regular
computing tasks now.
New programs addauth, rmauth, unsu, su, and setauth modify the uid
sets of running programs. Using addauth you can add root to your
emacs, write a file, and then use rmauth to take the uid back. (Of
course, passwords are required when necessary.) New program `ids'
will tell you what all the user ids are that a program has. Note that
in the Hurd a program can have several user ids all at once, just like
Unix supports having several group ids. Now that you can dynamically
change the ids of running programs, system administration (among other
things) becomes much easier.
Two new programs, ftpcp and ftpdir, can be used to fetch files using
FTP with a simple command line interface.
We have moved the `serverboot' bootstrapper and default pager from
Mach into the Hurd source distribution, so that Mach can avoid
distributing user programs. We hope to phase out use of serverboot
entirely at some point. Along with this, we made serverboot much
We now build profiling versions of the Hurd libraries, and the
makefiles have targets to build profiling executables as desired.
We have added `lmail', a /bin/mail replacement for use with sendmail
to do local mail delivery.
The idle threads of the kernel no longer count in `ps' towards the
total run time of the kernel process. This means that the kernel will
now sort into the right location for `u' format output.
Several oddities in NFS client behavior have been fixed to produce
more sensible results.
The "loopback" device is now supported (automatically) inside pfinet.
It should now be possible to use pfinet with no ethernet at all.
Filesystems now use `store' library; the contents of the filesystem
can be nearly anywhere (including another file somewhere).
Some annoying bugs in tty behavior have been fixed. Some still
New translator `firmlink' is like a cross between a symlink and a hard
Programmer visible changes:
Filesystems support a new "reparenting" feature. This makes `..' from
the "reparented" node return whatever the user wishes, for a given
`open' regime. This enables the "firmlink" translator to work, and
will also be important in implementing shadow filesystems.
The fshelp library now managed UID sets itself, and contains functions
to do permission checks in the usual way. Now it's much easier to be
sure every filesystem implements the same permission checks.
The trivfs library has had its static initializations replaced with
spiffy dynamic ones.
New library `libftpconn' is used to manage FTP connections. We are
already using this library for some local system administration tasks,
and are making it the basis of the (as yet unfinished) ftpfs
filesystem for the Hurd.
Version 0.1 (1996-09-06)
Summary of important externally visible changes since version 0.0:
Many miscellaneous bugs have been fixed.
Missing source files in 0.0 have been correctly added to the
Configuration now knows that various 386 equivalents use the same
There is now an nfsd; it has not be well-tested. It would be nice if
some people would run it and try things out. It does not yet support
Exec now compiles correctly even when you don't have BFD installed.
Ext2fs format interpretation problems have been fixed. This means it
can be suitably used to boot with.
init now properly understands SIGHUP and SIGTERM, and does the right
Much code has been written in nfs towards supporting version 3 of the
protocol, but it's not done yet. Don't try and turn it on.
Version information in uname is now calculated differently.
Some improvements have been made in the SETUP script.
sync, reboot, and halt now do argument parsing and understand --help
The new `e2os' program has been added to change the "creator OS" field
on an ext2fs filesystem.
Bugs in term and libtrivfs have been fixed, allowing emacs shell mode
to work cleanly. Other minor bugs have also been fixed.
ext2fs now does directory search rotoring to speed repeated and
sequential directory lookups.
A new program `vminfo' prints the virtual memory map of task.
All disk filesystems (ext2fs) now do directory name caching of
`..' which was not previously done. In addition, you can now set the
cache size to be large, and then do experiments and see what the cache
hit rate would have been for various smaller sizes. This should help
in optimizing the size of the cache.
Version 0.0 (1996-08-06)