-*- Text -*-

December 13, 1994

The exec server now recognizes gzip'd binaries and uncompresses them into
memory to execute them.  (This has allowed a useful number of binaries to
fit on a 1.44MB floppy.)

November 24, 1994:

Program changes:

term could hang in delivery of terminal signals; fixed.

pipes now handles io_select.

These fixes allow GNU Emacs to work under the Hurd, with subprocesses.

November 11, 1994:

Structural changes:

Our sources are now under RCS.  That shouldn't affect you at all,
except that the file in the distribution will now be mostly mode 0444
by default.


Interface changes:

`dealloc' flags have been added to many MiG interfaces broadly to fix
a class of bugs.


Library changes:

Synchronous locks were hanging in some cases; to avoid it for now,
they are never done at all.  (Of course, this is really a bug that
needs fixed; the current change is purely for the sake of running the
system.)

Some bugs in translator startup in libfshelp have been fixed.

Bootstrapping in libdiskfs is cleared up.  A bug in io_read that cause
a crash if you gave an offset past the file size has been fixed.
Non-root filesystems can now contact the execserver.


Program changes:

The `boot' hack can now start the first task in one of three ways: the
way it was before, which is pretty Hurd-ish; just like the kernel
starts the first task; and just like CMU's `boostrap' user program
starts the CMU multiserver.  Also, `boot' always passes a -f flag so
that other programs can no we aren't really running native.

The execserver now registers itself properly on /servers/exec and can
thus be used by non-bootstrap filesystems.

Init uses symbolic names for /bin/sh and /dev/console rather than
hardcoded strings.  The STANDALONE macro is gone; the behavior is the
same but depends on the presence or absence of -f in the boot flags.

Some minor bugs in proc have been fixed.

The terminal driver now sends SIGWINCH properly.  Changing to and from
ICANON now moves the terminal input queues around properly.

The filesystem now uses one pager to map the disk and little pagers to
map files.  Some hair is new to keep data from showing up in both
pagers; generally the code is much simpler and cleaner now.  (Faster,
too.)  The DT_* type information is currently unused due to an
implementation difficulty.  Some workarounds have been installed to
avoid some kernel bugs.

Large writes to the pipes server used to crash it; they don't any
longer.

The /dev server now has hardcoded into it more disks and it's easier
to add more yourself.  Also work around a kernel bug.

New utilities: clri, sync, halt, reboot.  The output of ps has been
cleaned up a little.

Fsck has been rewritten; there are still bugs in creating directories.
(That code is only used if /lost+found is absent, so it's still
useful.)  The old version is renamed to bsdfsck.




September 8, 1994:

Structural changes:

No significant structural changes have been made.


Interface changes:

term.defs has a new RPC `termctty_open_terminal', necessary for
implementing /dev/tty.

The filesystem lookup retry mechanism has been altered slightly.
FS_RETRY_NONE is gone.  If the retry pathname is empty, then no retry
is necessary, and the returned port should be used, after
reauthenticating it if FS_RETRY_REAUTH was set.  Uniformly Hurd
servers attach no special meaning to leading / in filenames, the
result is that leading / (to Hurd servers) is a NOP.  

The authentication protocol now passes a second port for rendezvous
rather than an int; this cleans up a slight security hole.  The I/O
and proc protocols have been changed accordingly.

The args to file_set_translator have been cleaned up.

All routines that used to say `path' no longer do; in GNU we always
call these filenames.


Library changes:

libdiskfs and libfshelp now do passive translator startup properly.

Setuid execution is now done by libdiskfs.

A little work has been done in libpager towards implementing a default
pager, bit it's not complete yet. 


Program changes:

A braino in the auth server was fixed, and it uses the new auth
protocol.

The boot program no longer spins; it uses multiple threads.  It also
takes nice command line args.  ufs and init only pause for debugger
attach if you give boot the -d flag.  Init now expects passive
translators to be set for /dev and it looks prettier.

The kludgy dev server now also works for (1) disk.

Some exec server bugs in EXEC_NEWTASK were fixed.

There is now a port of fsck, and two new programs: settrans and
opendisk.

The proc server now has a better prime number generator, and some
small bugs have been fixed.

The terminal driver now does job control and other signals correctly.

Some minor improvements have been made in ufs.




August 8, 1994:

Structural changes:

Makefiles have been vastly improved and are simpler.  The programs
`su', `ps', and `sh' have been moved from separate dirs into `utils';
the programs `symlink' and `ifsock' have been moved into `trans'.

Several changes were made to GCC use.  You should definitely get GCC
version 2.6.0 now.  Version 2.6.1 will have distributed the proper
`specs' file for the i386-gnu target, but it isn't quite ready yet, so
you still have to copy hurd/gcc-specs into
gcc-lib/i386-gnu/2.6.0/specs.


Interface changes:

The tioctl.defs suite is complete now.

INTR RPC's have been changed; individual RPC's are no longer marked
INTR.  Rather, entire interfaces are marked `INTR_INTERFACE' if they
conform to the library's signalling/interruption expectations.

There is a new magical retry type (for dir_pathtrans and fsys_getroot)
called `machtype' and a new one `/'; the former is for @sys tweaks and
the latter cleans up the retry of root-based symlinks a bit.

There is a new interface `login.defs'.

The "dotdot node" is no longer passed at fsys_startup time; instead,
it is passed by fsys_getroot.


Library changes:

The ports library now does death-timeouts for multi-threaded servers;
it doesn't actually work right yet, however.  Also the ports library
has new features (soft vs. hard ports; no outstanding ports
notifications) that enable server-death to be done cleanly.  (I hope;
libdiskfs and ufs haven't yet been changed to use it, so libports
might not actually have the right facilities yet.)

The translator startup routines in libfshelp have been vastly improved
(so that they can actually be used).

Numerous bugfixes in libdiskfs, particularly relating to translator
usage.  Use new magical retry type `/' when appropriate.  Use new
dotdot node protocol.  O_FSYNC and O_NOATIME are now honored properly.
Alternative methods of storing symlinks are now supported through new
hooks.  

The new dotdot protocol is now used by libtrivfs.  Also, users of the
library are now able to set the atime and mtime when necessary.

The special threads version of malloc has been placed back in
libthreads now that the C library uses a Mach-safe version on its own.


Program changes:

The `boot' program no longer implements the tioctl interface now that
the terminal driver works.

A bug was fixed in the handling of pgrps in `proc'.

Many bugfixes in term.  The tioctl interface is now implemented.  EOF
processing is fixed; break characters now work right.  Signals and
interruption are now done correctly.  VDISCARD works.  

Ufs has Some bigs fixed in dir.c.  Filesystem upgraded to BSD 4.4.
There are now some compatibility flags.  

New program dev.trim does a very minimal /dev (but doesn't work yet).
New program dev is an initial (but poor) attempt at a real /dev.





July 5, 1994:

The Hurd now runs all the programs in the GNU fileutils, textutils,
and shellutils distributions, with the exception of who.  Most
importantly it runs GNU Hello.  Also, emacs works (with the kludgy
`boot' terminal driver) and bash works.

The simple pipes server works; it will be replaced eventually by the
pflocal server (which isn't done yet).  The terminal driver is limping
but working.  It doesn't support terminal ioctls yet.  A minor bug in
auth has been fixed.  boot interprets more Hurd protocols; this was
done to get emacs functioning.  Some more-or-less serious bugs in exec
were fixed; they were found by running emacs (a quite large executable
indeed).  At bootstrap time, init starts pipes and term itself;
eventually these will be passive translators, but we don't want to
write the new disk format until we're self-hosting or fsck and UX will
get confused.  The file proc/primes.c has been documented; thanks go
to Jim Blandy.  Some bugs in proc dealing with pgrp and wait were
fixed; a nasty hash table bug was also fixed.  The simple shell can do
pipes.  Several serious bugs in ufs were fixed dealing with extension
of large files and writes of data not aligned on block boundaries.
The ufs pager was over-serialized; that's been fixed.  Directory
lookups and modifications now use mapped I/O directly; this is an
important speed-up.  The structure of the pager lockes has been
changed significantly.  UFS now supports Mach copying mode
MEMORY_OBJECT_COPY_DELAY; this significantly improves process startup
time.  

Some minor changes have been made to several interfaces.  The
interface for fs.defs:dir_readdir has been totally changed.  There are
some new fs.defs interfaces: file_check_access, file_notice_changes,
dir_notice_changes.  The fsys.defs:fsys_getroot interface was changed
to work correctly.  process.defs:proc_setprocargs is renamed, and a
fetch function proc_get_arg_locations is added.  The ifsock.defs
interface was simplified.  

Several bugs were fixed in libdiskfs.  The new dir_readdir interface
requires new support from format-specific code.  Some race conditions
have been fixed.  dir-pathtrans.c now deals correctly with multiple
slashes in a row.  A new concept called "light references" allows
pagers to remain active without preventing truncate-on-nolinks from
working right.  New interfaces in fs.defs are implemented (except
file_notice_changes).  Active translator usage has been fixed to work
correctly, but passive translators are still untested.  libdiskfs now
thinks it supports S_IFSOCK nodes, but that's untested (of course)
because pflocal isn't done yet.

The passive translator startup interface in libfshelp has been
radically simplified.  The pager library now lets other code set and
changee the attributes on objects, synchronously if desired.  An
init/terminate race condition was fixed.   The ports library now
allows single-threaded users to work right (they didn't before).  The
trivfs library works; see the ifsock server for a simple example of
its use.  See term or pipes for more complex examples.  

There is a task list in the file `tasks'; let me know if you are
interested in working on one of these.


May 17, 1994:

The Hurd now runs all the programs in the GNU fileutils and textutils
distributions.  All the programs in shellutils run normally except
who, false, groups, nohup, true, and nice.  We can't tell if tty is
working right because the necessary support isn't set up (so it just
prints `not a tty'.  Some minor filesystem bugs have been fixed,
including several brainos in disk allocation and total lossage in
symlink interpretation.  No bugs are now known.

The library now supports signals; the program `timertest' is one test
program we've used.  

All the core servers register their version with proc and register
themselves as essential tasks with init.  This enables proc to compute
proper uname version strings and enables init to crash the system if
one of the core servers dies.

Boot is set up with a special hack to detect the RPC's that emacs uses
to go into and out of raw mode; this will hopefully enable us to run
emacs soon.

There is a kludgy server called `pipes' (not yet completed) which
implements just those parts of the local-domain socket server that the
library uses in implementing the `pipe' function.  This will enable us
to have a real shell somewhat before needing the local domain socket
server.  

More work on trivfs has happened; this will be needed by pipes.

Cthreads is now in the Hurd distribution; this will make it much
easier to install.  The GNU C library depends on some changes we have
made to this version of C threads and will not work with other
versions you might have.  (Several files in other versions of CMU
Cthreads are not in this distibution [notably spin locks]; those are
now in the GNU C library.)

The installation hints in README have changed considerably; read them
again.

I'm now keeping ChangeLogs; you can examine them for more detailed
information.
  


April 5, 1994:

The Hurd now bootstraps.  Auth and proc start successfully; init
prints "Init has completed" where it would run the shell.

There are the beginnings of some documentation in the new doc
directory.



March 25, 1994:

The Makefiles now are set up for cross-compilation; see README and the
comments in Makeconf and Maketools for more information.

The new diskfs library is complete.  The filesystem using it runs as
well as the previous version.  Interested folk: please examine the
diskfs interface, and see if it can be used for your favorite
filesystem; I'd like it to be as general as possible.

The proc server and auth servers link completely but have not been
tested.  The init.trim directory holds a lightweight version of init
suitable for use before the C library support for file descriptors,
exec, and so forth works; this version of init compiles and links.
The primary effort right now is booting init, proc, and auth.

Work has been suspended on tmpfs for the time being, it not being
necessary for a running system.  Some new FS calls have been added,
notably dir_mkfile.  


Feb 1, 1994:

Much filesystem code has been split out into new libraries, most
notably, libpager, which now contains the implementation of the
complex multi-threaded pager previously in the filesystem.

libdiskfs will continue this process, with everything related to
filesystems based on disks (or other real substrates), but format
independent.  libfshelp will have routines for starting translators,
keeping track of flock, and so forth; it will be useful for any
implementor of the fs protocol.  ufs currently does not use either of
these, but will when they are done.

tmpfs and init.trim are in progress.  tmpfs will be memory-only for
things like /tmp, and is currently waiting for the fshelp library to
be finished.  init.trim will be a scaled down init, useful for testing
bootstrapping before there is enough library support to run the real
init.  Currently this is waiting on fixing some crucial ld bugs.
(When those are fixed, work will begin in earnest on bootstrapping
auth, proc, and init.)


