Version 0.9 (2016-12-XX) The 'boot' program can now be run as unprivileged user, allowing any user to create unprivileged Subhurds. The Berkeley Packet Filter library and the ethernet multiplexer have been merged into this repository. The ethernet multiplexer now generates and uses stable pseudo-random ethernet addresses for the virtual interfaces. Countless bugs have been fixed throughout the code, notably in libpager and ext2fs which now gracefully handles running out of space. 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 translator. 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 repository. 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 named `init'). 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 highlights include: 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 parameter. 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 be defined. 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 ioctls now. 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 replacement. 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 environment variable. 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 authentication handle. 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 "die $(serverboot)" 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 quieter. 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 remain, unfortunately. New translator `firmlink' is like a cross between a symlink and a hard link. 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 distribution. Configuration now knows that various 386 equivalents use the same assembly files. 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 Hurd-specific features. 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 thing correctly. 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 and --version. 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) Initial release.