Features by release:

v1.3.2:

Added TCP/IP networking with KA9Q package.
Added ne2000 ethernet interface server.
Added shared libraries.
Enhanced RS-232 so you can set parity, data bits, and so forth.
Added ps(1) command, via the pstat system call interface.
Added CDROM filesystems.
Converted all servers to use syslog.
Port of "vim" vi clone editor.
Floppy driver now works.
i387 FPU supported by kernel--library support still TBD.

v1.3.3:

/proc filesystem, ps(1) uses this, as does kill(1).
Canonical ("line") input mode has command line editing and history.
Stripped a.out format uses one less block, in general.
Fixed ld(1) bug which broke code living in the last 32 bytes of
	an a.out image.
Add cc(1) compiler, based on lcc compiler.  Fast, simple, lousy
	code generation.
More support of read-only files in dos filesystem.
Greatly improved stat(2) emulation.
Major fixes in permission calculations.  Now works pretty much like
	it was originally described.
Fixed namer to allow logins (actually, access to fs/root entry
	for shlib startup) from other than sys.sys capability.
Performance tweaks for vstafs.
Removed various dead code, added more pstat(2) support for kernel
	config values.
Added $s/$S to adb to allow incremental symbol table loading (so you
	can "$s /vsta/lib/libc.shl" and get shlib symbols).
Allow VM page stealing to be active before swap space is configured.
	Only stealing of unmodified pages is possible, but this can
	still be a help on smaller systems.
Port of "rh" find(1)-like tool using C syntax.
Add ~ and ~user processing for open()

v1.4.0:

Significant work by Dave Hudson on performance.  Also a new malloc()
	which allows fast inline allocation for most common cases.
Source reorganization; a src/ subdirectory now holds the source.  Long
	promised, finally delivered.
New syscall convention using registers
Add "include" directive to make
Organize source and makefiles to support multiple architectures
Added source for 68030 Amiga port
Per-page TLB flushing where available
DOS filesystem performance tweaks
tfork() passes argument now
Lots of new C library functions
/dev/null server now supports an "always full" switch--useful for testing
Added xargs, echo, strings
vstafs: fix up how directories are grown
Cleanup of pset data structure and routines
Cleanup of adb, add :n to step over procedure calls

1.4.1:
Speed up and bug fix event delivery code
Add support for "bt X" in kdb to backtrace an arbitrary thread
Make FDL memory file descriptors work as a FIFO ring
Fix a crash where a connect request is dropped due to server death
Protect against a debugged process clearing its debugger port_t
Networking.  /inet server, telnet daemon, remote console.
A speed/memory tweak for tmpfs; larger single I/O as a side effect
RCS is working (knock on wood)
chmod() maps onto VSTa permissions (was a no-op)
O_CHMOD supported for open() and friends
DOS server permits switching between RO and RW permissions now
Shadow password file
A couple more man pages
VSTa VM page stealing rework.  Actually seems to work! (YMMV :->)
SCSI Tape & autosense support from Mike Larson

1.5:
Fix case where "swapd -n" was still trying to push dirty pages
Add "core" kdb command
Performance: shaved a cycle off the shlib call path, deleted t_qsav
	and reaped a whole setjmp() of writes on each syscall
Kernel preemption
More man pages
Permit I/O interruption w/o server ack for still-queued messages
Add setsid(), and have login move each session to its own signal group
Permit client disconnects w/o server ack; along with I/O interruption,
	this should permit a client to interrupt out and disconnect
	from a moribund server.  It also solves an interesting deadly
	embrace in the exit of a server where a cache MMAP reference
	still exists.
Protect against buggy server operating against non-requesting client
Fix bug in explicit server port closing
Fix bug in fseek() from relative position
Revamp mouse handler
Add port of MGR windowing system

1.5.1:
Bug fixes for kernel preemption
Performance: remove unneeded entries from default namespace
First implementation of ABC, Asynchronous Buffer Cache library
Semaphore server
Kernel-level thread mutexes
More MGR cleanup (less memory, slightly faster)
vFAT entries don't kill DOS server any more
Floating point support
popen/pclose
funopen/fropen/fwopen
Ports of sc, bc, Tiny Smalltalk

1.5.2
vstafs fsck will now repair damage (not just find it)
vstafs now uses ABC
namer entries are cleared when the registering server exits
added "purge" command to clean up old entries in vstafs 
	versioning filesystem.
Prototype of proxyd for doing proxy VSTa messages over TCP/IP
A couple really painful MGR bugs fixed; it's now usable
Taught various commands about window sizing (ls, editors, less, termcap)
ar won't croak vstafs (edge case, renaming on top of active file)

1.6
Conversion to gcc 2.x.  Now requires an FPU to use gcc, sorry!
Port of gdb using a.out stabs.  Symbolic source debugging (both
	under gdb as well as dynamic attach) works.
Emulations of environ[], sys_errlist[], and sys_nerr.
Stubs for setrlimit stuff.
Proxy functions over KA9Q TCP/IP now working.
Ports of GNU awk, bison, flex, make, text utils, file utils.
VSTa is Multiboot compliant; boots from GRUB loader.  Boot from under
	DOS is no longer used.

1.6.1
Fix KA9Q so it doesn't lock up on "real" network interfaces.
Add packet buffering to srv/mach/ne.  TCP/IP is now actually
	usable.
Convert srv/dos to getopt().
Add -B flag to dos and vstafs to set buffer cache size.
Fix PATH inheritance bug in /bin/sh; shell scripts could otherwise
	fail pathname lookup for their commands.
Fix bug in environ[] emulation; garbage chars at end of some strings.
Help for kernel debugger.
PID's now start at 1 so even the first process can be notify()'ed.
Enable SIGINTR/SIGQUIT generation from console keyboard.  Fix login
	to mark process group to TTY, and TTY mode handling to permit
	updating of the TTY input signal state.  Said signals are
	generated with the assumed identity of the client who set
	the process group.
Add -k to rs232 server so it's easy to control whether ^Z puts you
	into the kernel debugger.

1.6.2
Add rcsdo/changed, my tools for working with RCS trees.
Fix docs on rawrite'ing, also more spots missed in the great
	filesystem server command line change fiasco.
Update sample boot/menu.lst to reflect file server command line syntax.
On usage() errors, have DOS and vstafs put out a message to syslog
	as well as stderr (which, DOS being a boot server, isn't active).
Fixed memory leak in ethernet driver
Added memory leak instrumentation to libc malloc.c
Added standard filesystem switch support to all filesystems
KA9Q and proxyd now work for open/close/read/write/stat.  So distributed
	kernel messaging is now working.  Mount remote filesystems.
	Even /proc!  Kill remote processes!  Wheee!
Implement support for ISA bus limitation "bounce buffers".
Use bounce buffers in our two ISA DMA drivers--SCSI and floppy disk.
Fix a nasty race condition in vstafs.

1.6.3
FAT-32 support.
Fix race condition in parallel threads faulting same vaddr.
Fix bug in execvp which would sometimes hose the last argument
M_TIME is gone.  RIP.
Add select() emulation.  select() is supported by ka9q/networking,
	MGR terminals, and the console(s).
Fix bug in grep(1), which used the wrong value of O_RDONLY.
Fix crash when fork()'ing while another thread is blocked in
	a msg_connect attempt.
Fix hang when quitting MGR (had to hit a key on the terminal to
	actually let it exit).
MGR's $HOME/mgr.rc file now works... example in /vsta/guest.
Port of ctags.
Cleaned up MGR's "resetwin" command.
Implemented ephemeral threads to support alarm(), SIGCHLD, ABC, etc.
	See sched_op().
Implemented ANSI C atexit().
Low-level VSTa event handler API, handle_event() from <event.h>
Fix crash when m_to_sm() fails, but a segment cleanup is attempted anyway.
DOS now maps ".<file>" to "_<file".  Renamed sh.profile to _shrc,
	rh.rc to _rhrc, mgr.rc to _mgrrc.  _exrc for vim remains the same.
Re-org of makefile structure; creation of global makefile.all.
Move a bunch of binary ports to a new vsta/src/bin/ports subdir.
Create a vsta/src/include, which holds the RCS-managed versions.
	The "make install" phase copies header files to their
	place in vsta/include.
POSIX signal emulation.  This is all the signal set handling stuff
	beyond the basic signal() API (which has existed for a while).
User and system CPU times of getrusage() are now filled in.
clock_t and clock() are now supported.
A <linux.h> has some stuff useful for porting Linux programs.
testsh wouldn't wait and retry to connect with the console.  In some
	scenarios, this would put it in an endless silent tight loop.
Added a fionread() to <fcntl.h> to provide the ioctl FIONREAD function.
Ported zmodem rz/sz.  Not working exactly right just yet....
Ported svgalib and jpeg6b.  Got some of the svgalib demo apps working.
Ported PD m4 from FreeBSD.
Ported the 8-bit color driver from mgr-0.69 into the VSTa MGR port.
	Adapted it to use svgalib.  Got high res working with MGR.
Added BSD's err/warn API's.
Added true/false/whoami commands.

1.6.4
Added -o to MGR's "startup" command.  Lets output be written to the
	named file.
Added VFAT (long filename) support to DOS filesystem.
Ported Plan 9's nroff/troff.
Generalized system shared library support; converted libm,
	libregex, and libtermcap.
Allow dumping of ranges of sectors in dumpsect.
Accomodate various flavors of RCS directory names for rcsdo.  Save quite a few
	cycles in its operation.
Port of PDP-11 emulator; runs V7 UNIX under VSTa!
Avoid gcc lame inline support; -O isn't needed any more to correctly get
	an inline compilation of getc/putc.
Auto-flush stdout when read from an interactive stdin happens.
Conversion of man pages to nroff -man format.
Ported BSD's "units" command.
vstafs, file/dir creation inherits protection of parent dir.
less's help ('H' command) fixed.

1.6.5
Added a little flexibility in use of MAP_FIXED.
Port of GNU Smalltalk.
Added realpath(), gettimeofday().
Added prototype for rename() to <stdio.h>.
Added rmap_grab() to the <rmap.h> library routines.
Fixed long-standing edge case bug when resource map is too fragmented.
Added alias remove() mapping to unlink().
Added two new partition types to disk partition support.
Added "xkeys" stat -w message to console server, so you can disable
	F<n> and arrow key escape sequence generation (if you want).
	Default is they still generate their escape sequences.
	(But I hate'em, so my personal config has them shut off!)
Fix memory leak in selfs server.
Fix "make distribution" to include new DLL's in distribution.  This
	manifested itself as any of your -ltermcap type programs dying
	when you tried to run them.  Sorry!
Implement inbuf/outbuf counts for console.  fionread() now works there.
Always let owner (UID) to chown operations on vstafs.  Otherwise you
	can paint yourself into a corner, where you remove all abilities
	of all users to touch the file!
Fix some more long-filename compilation errors.
Have DLL loader ld.shl try the truncated 8.3 filename in addition to
	the full DLL name.  This helps when the VSTa distribution was
	loaded via a utility which only supports 8.3 filenames.

1.6.6
Added FS_BLK{READ,WRITE} operations to support true sector-oriented
	I/O.  Offsets and counts are in units of 512-byte sectors, and
	thus the 4 gigabyte offset limit of byte-oriented I/O is
	avoided.  vsta/src/lib/abc.c uses this, and falls back to
	the old I/O primitives if it finds these not supported.
	For now, IDE supports it.
Filename completion is available in the shell.  TBD... right now it's
	a separate plug-in from libusr.a; should it be made a part of
	getline()?  When should it be active versus the regular tab
	expansion function?
TTY state (vsta/src/lib/tty.c) is now per-TTY.
Added "dev" FS_STAT parameter to the console server, also fixed a bug
	where interrupts didn't clear typeahead.
Fixed shift key rollover--if you hold one shift, then the other,
	then release the first, you'll still be shifted until you
	release the final key.
Converted current regexp package to use libregexp.a (note the new 'p').
	This is made possible by long filenames in VFAT, and makes
	room for...
Ported POSIX libregex.a package.
Ported BSD's expr.
Added lots more details on how to implement select() in a server.
	See /vsta/doc/select.txt
RS-232 server now supports select().
Fix output positioning so things like "make > make.log" now give you
	usable output.  Fixed some latent race conditions in port
	duplication messaging.
Made the shell use wait.h macros; non-zero exits don't get listed
	as signal terminations now.
Shell doesn't hang on pipe when doing some types of here documents.
Add some options to kill, and convert to getopt().
Create aliases for awk (=gawk), egrep/fgrep (=grep), [ (=test).
	We still have cc (=gcc).
hostname emulated in shell script using uname.
Fix long-standing latent bug in "fstab" with no arguments.
Ported vim-5.7... multiple edit buffers, filename completion,
	lotsa good stuff.  The new one is more than 3x the size
	of the old one, though, so I'm going to keep the old
	one available for now as "ovim".
access for W_OK doesn't change the file's mtime any more.
Since the output positioning fix spares us needing to do clone()
	operations on each fork(), I've decided to live it up and
	have /vsta/bin mounted as /bin as a standard configuration.
	This means standard shell scripts which start with #!/bin/sh
	will now work, too.
Ported file utility.
Fixed up libgcc.a so it holds all the functions needed for floats,
	doubles, and long longs.
Port of dosfsck... native filesystem checking of DOS filesystems
Fix DLL loader so short filename conversion always works (missing
	null termination)
Fix MGR's startup so it gives a clear message and exits when it can't
	attach to the mouse.

1.6.7
Ported unzip
Fixed output corruption problem in fmt(1)
Fixed race condition in aborting a kernel read request which completes just
	as you abort it.  Could leave the server hanging.
Fixed edge condition in signal generation from mach/cons2 which
	could keep future select() clients from working.
Fixed subtle bug where using the kernel debugger and then continuing
	could corrupt the first page of console server code.
Tweak kernel capability handling so that the default process label
	isn't ever changed to reflect a "root" capability (which, being
	zero-length, isn't a good label to use for ownership).
3c509 network driver added
KA9Q networking generic ether driver now takes driver path as argument
Tightened up some TLB treatment in the page allocator and
	debug memory examination code.
Fix edge condition where large reads from /tmp would complete with a
	short count--many apps interpret this as EOF, instead of reading
	further data.  tmpfs will now always return the full read request
	(assuming the data's there!).
Ported GNU chess 5.00
Added basic CPU profiling support--see vsta/src/lib/mcount.c.
Alias view->vi (for read-only viewing via vim)
Fix annoying behavior where some program exceptions either don't
	get caught by the debugger ("process exited normally") or
	the stack frame doesn't include the failing routine.
Fix environment variable inheritance between processes; in some cases,
	you wouldn't get variables you expected.  In others, variables
	would hang around in places which were not expected.
Nice facelift to "ls" courtesy of Erik Dalen.
Erik also contributed some section 1 man pages.
A port of Tim Budd's latest/greatest "Tiny Smalltalk".  Actually, this was
	 total revamp of his design, but he stopped working on it before
	 it was really shaken out.  Check the RCS logs to get an idea of
	 what I fixed. :->  The result is a pretty nice little language
	 environment.
Have fputc() honor unbuffered flag in IOB.  Fixes problem where things
	like fprintf to stderr or perror would misplace a trailing newline.
ash missing from "shells" package due to pathname mismatch... fixed.
