-*- Text -*-

April 15, 1995

It's hard to summarize, so much has happened.

We have NFS, a network, and jillions of stuff.  Basically things just
work.  Except for a jillion little nits, this is very nearly an alpha
release.  Not quite, but nearly.




The `boot' program now accepts an option ``-D DIR'' which specifies a
directory prefix for the file names given in the boot script (hurd.boot).
So the way to boot is now:
	$ boot.a -D .../hurd-image hurd.boot sd0a


October 5, 1995

The Hurd distribution now uses a `configure' script in the standard GNU
style.  As with other GNU packages, you can configure in the source
directory or in a separate build directory (though not both with the same
source directory); all you should need to do is `configure i386-gnu'.  The
Hurd does not compile in any file names using $(prefix), so you can specify
the prefix where you will install things with the `--prefix' option; e.g.,
`configure --prefix=/gd4/hurdinst i386-gnu'.  You should no longer need to
edit any makefiles.  You can choose the tool names by setting variables in
the environment when running configure (CC, LD, AR, RANLIB, OBJCOPY, MIG);
the default is to search your $PATH for HOST-TOOL (e.g. i386-gnu-gcc), and
failing that just TOOL (e.g. gcc), so you will win automagically if you
simply use the same host alias in the `configure' command line as you used
for the target alias to configure gcc and binutils (i.e. i386-gnu).

The file_truncate RPC (in fs.defs) has been renamed file_set_size and
now is expected to extend files as well as truncate them, in the
manner of recent BSD releases' ftruncate.  file_pathconf has been
moved from fs.defs to io.defs and renamed io_pathconf.  The `core'
interface has been renamed `crash'.

We are now using a new terminal driver that is multi-threaded.  It is
also much more simple internally than the older version, but otherwise
supports no new features.

Everything is now dynamically linked except the bootstrap filesystem.  Any
old statically linked binaries should be replaced.  WARNING: In the next
snapshot changes in the exec server may prevent older statically linked
binaries from running.

The exec server by default now only supports ELF; if you have older
a.out binaries you want to run, you need to reenable BFD support in
the exec Makefile.  (Old a.out binaries should be replaced anyhow,
with dynamically linked ELF binaries, for the reasons in described in
the warning above.)

The bootstrap hack in the directory boot now understands boot scripts;
this kind of boot script will also be used by an upcoming release of
Mach4.  Also, because the exec server is now dynamically linked, it is
necessary to install the exec server itself on the Hurd partition (in
/hurd/exec); that was not necessary before, so it is possible that old
working Hurd partitions might not have it.

Some problems and trivial bugs in fsck are fixed.

A few bugs in libdiskfs, libpipe, pflocal, and trans were fixed of no
particular consequence.

Shutdown of filesystems now works reliably and safely.

Libports now provides stubs to do the normal thing for the interrupt and
notify interfaces.  Because of the interruption semantic, cthreads
multiplexing of multiple cthreads onto fewer kernel threads can no longer
be used; this means that ports_manage_port_operations_multithread no longer
pays attention to the WIRE_CTHREADS flag.

Cthreads now supports an implication semantic for conditions; this
enables a condition variable to be created which is the disjunction of
other condition variables.

Trivfs now supports errors and blocking on open much better.

A rare but serious bug in the pager has been fixed; along with this,
another minor deficiency in the kernel has become apparent.

The Makefiles are more generic and deal with shared libraries better. 

A serious bug has been fixed in ext2fs.  



July 23, 1995

Shared libraries now work; use -static to link programs and avoid the
shared libraries.  The Hurd programs are normally built static; this
will probably change soon.

The ext2fs server now works, as do the tools to manipulate ext2fs
filesystems.  A snapshot of the tools will be made soon under separate
cover.  Many thanks to Ted Ts'o for his valuable work on the tools.

Readers of the Makefiles will notice that we now generate dependencies
automatically.

The old netserv library is gone.

The `boot' hack has been modified slightly to avoid the normalq libc startup
files, because they no longer work with UX.

Some small bugs have been fixed in the devio server.

The ports library has been totally rewritten; new features permit
servers to have greater control over thread RPC's and port creation.

The fshelp library now does most of the work for translator
interaction; it's simpler now too.  Filesystems have much less work to
do; the relevant code in libdiskfs is now understanble instead of
unparseable chaos.

The ports library provides for timeouts; the diskfs library almost
uses it, but because of a bug, it's disabled for now.

Filesystems are now expected to sync themselves if necessary; the new
fsys_set_options RPC provides for changeing (or cancelling) the sync
intervale.  The diskfs library does this for you.  The update program
is no longer necessary.

A small bug in the proc server has been hacked around; the real fix
will come later.

Many important bugs in the C library have been fixed since the last
snapshot; perhaps all of them.  ;-)



June 6, 1995

The Hurd has switched to using the ELF object file format instead of a.out.
You will need a very recent snapshot of GCC and binutils (we are using the
950606 versions); the `i386-gnu' configuration now uses ELF, we are dumping
a.out entirely.

The exec server now understands the ELF format directly (not through BFD),
because BFD has some deficiencies in its treatment of ELF.  The direct
support for a.out has been ripped out completely.  The exec server can
still support BFD as an optional addition, if compiled with -DBFD; this is
now the only way to run a.out executables.  But if you only want to run new
ELF binaries, then you can omit -DBFD and needn't bother building the BFD
library to build the Hurd.  The support for gzip'd executables is now
conditional on -DGZIP; it adds a pretty small amount of code.  Our
makefiles use both -DGZIP and -DBFD by default; edit exec/Makefile if you
wnat to omit BFD or gzip support.  (Probably soon we will omit -DBFD by
default because it will make the exec server much smaller, but we just
switched and still have run a.out binaries lying around we'd like to
continue being able to run.)

Because everything is now in ELF, the procedure to create an executable of
the `boot' program that can run on UX is rather hairy.  Do `make boot.a' in
the boot directory and run `boot/boot.a', which is an a.out executable.
`boot/boot' is a weirdo ELF executable that UX cannot understand.

The startup sequence has changed; the exec server image is no longer
embedded in the filesystem image.  The `boot' program loads both the
filesystem and the exec server into separate tasks and runs the filesystem,
passing it the task port of the exec server, which it starts running when
it's ready for it.  This closey approximates the eventual plan for booting
the system, wherein the boot loader will load the multiple program files as
well as the kernel, and the kernel will set up the two tasks.  However,
changes are needed in the Mach bootstrap process to read ELF binaries and
to start multiple servers, so for the moment native booting is broken.

April 12, 1995

Many bugfixes and changes.  Now includes a fancy ps, settrans, and
showtrans; separate translators for all the programs in /dev (and a
MAKEDEV script).  Also the provisional source for network servers and
some other snippets of code are now being distributed.  The trivfs
library is now multithreaded.

The old dev.trim is still being distributed, but you shouldn't use it.

A serious bug that broke the filesystem's state after enough exec
failures (of the bad format sort) happen.  A deadlock or two was also
found and fixed.

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.)


