Release 0.60
Sep 1, 1996

Version 0.60 of the Flux OS toolkit is now avaliable.

For complete information about the toolkit, see the software pointer off
our project page, http://www.cs.utah.edu/projects/flux/.
For those without Web access, use ftp://flux.cs.utah.edu/flux/oskit.

Changes since 0.50:

* New libraries "libfdev" and "libfdev_linux" containing very
  preliminary device support.  There are new example programs
  "fdev_test.c" and "part_read.c" that exercise the SCSI driver.

* New library "libmemdebug" for debug versions of malloc et al.

* New library "libsmp" containing preliminary SMP support.
  "multiboot-smp.c" in the examples/x86 directory demonstrates some of
  these features.

* Now builds with a.out tools, including native FreeBSD tools.

* Now builds with older assemblers such as FreeBSD's as, which lacks .p2align.

* Includes the "boot adaptor" from our Mach4 work (in the boot
  subdir.)  This allows booting multiboot oskit programs with normal
  BSD or Mach bootblocks.  The alternative is to use GRUB.

* New configure option: --enable-debug to #define DEBUG.  It used to
  be on by default.

* Works with GRUB-0.3.  A patch to fix this was issued soon after the
  initial release of 0.50.

* New libkern code:
	- outb_p etc ala Linux: pausing versions of outb etc.
	- rtcin/rtcout ala BSD: access NVRAM registers such at the
	  Real Time Clock.
	- cpu_info_min: determine the least-common-denominator of the
	  contents of two cpu_info structures.
	- multiboot_info_dump: dump a multiboot_info struct.
	- base_critical_enter/leave: simple "global critical section"
	  implementation.
	- direct_cons_getchar: the "direct" analogue for com_cons_getchar
	- more PIC functions such as pic_enable_irq.

* New libc code:
	- smalloc, sfree etc: versions of malloc etc that expect
	  the caller to track the size.
	- hexdump: dump a region of memory  hexdump style.
	- mustmalloc and mustcalloc: get memory or die.
	- snprintf etc ala BSD: length restricted versions of sprintf etc.
 
* For a new version of the doc with changebars indicating changes since 0.50,
  see ch-*.ps in the doc dir.


Flux OS toolkit -- release 0.5 available for the x86
July 12, 1996

Today we make our first release of the "Flux Operating System Toolkit."
The toolkit is a framework and set of modularized library code
together with extensive documentation.  Its goal is to make it easier
for OS developers to create a new OS, to port an existing OS to a
platform supported by the OS kit, or to enhance an OS to support a
wider range of devices, file system formats, or executable formats.

The toolkit has been developed by the University of Utah Flux project
under DARPA support, primarily by Bryan Ford.  Other project members
have helped, including Shantanu Goel and Kevin Van Maren.

For complete information, see the software pointer off our project page,
http://www.cs.utah.edu/projects/flux/.
For those without Web access, use ftp://flux.cs.utah.edu/flux/oskit.

To be added to appropriate mailing lists, send mail to
oskit-users-request@cs.utah.edu and oskit-announce-request@cs.utah.edu.

DOCUMENTATION
The OS kit documentation includes a 293 page document -- but there's
lots of whitespace due to man-style pages and some incompletely
documented interfaces.  Thanks to Bryan for his yeoman effort in
producing most of this document.  Two sample mini-kernels which use
the toolkit are also provided.

GOALS
The toolkit's purpose is to provide, as a set of easily reusable
modules, much of the infrastructure "grunge" that usually takes up a
large percentage of development time in any operating system or
OS-related project, and allow developers to concentrate their efforts
on the unique and interesting aspects of the new OS in question.  The
goal is for someone to be able to take the OS toolkit and immediately
have a base on which they can start concentrating on ``real'' OS
issues such as scheduling, VM, IPC, file systems, security, or
whatever, instead of spending six months first writing boot loader
code, startup code, device drivers, kernel printf and malloc code, a
kernel debugger, etc.

The toolkit is designed to be usable either as a whole or in arbitrary
subsets, as requirements dictate.  It can be used either as a set of
support libraries from which modules are linked into an operating
system kernel and/or its support programs, or it can be used merely as
a collection of ``spare parts'': clearly documented source code to be
ripped apart and cannibalized for whatever purpose.

The toolkit is also intended to be useful for things that aren't
kernels but are OS-related, such as boot loaders or OS-level servers
running on top of a microkernel.

PLATFORM
Although the toolkit contains substantial machine-independent code, it
currently only contains machine-dependent code for the Intel x86.
Ports to other platforms are planned, and contributions are welcome.

DETAILS
Some of the components of the current release include:

libkern	Kernel support code for setting up a basic OS kernel
	environment, including providing default handlers for traps
	and interrupts and such.  This library includes many general
	utilities useful in kernel code, such as functions to access
	special processor registers, set up and manipulate page
	tables, and switch between processor modes (e.g., between real
	and protected mode on the x86).  Also includes facilities for
	convenient source-level remote debugging of OS kernels via GDB.

libmc	A simple, minimal C library which minimizes dependencies with
	the environment and between modules, to provide common C
	library services in a restricted OS environment.

liblmm	A flexible memory management library that can be used to
	manage either physical or virtual memory.  This library
	supports many special features need by OS-level code, such as
	a multiple memory types, allocation priorities, and arbitrary
	alignment and placement constraints for allocated blocks.

libmemdebug
	A comprehensive, drop-in memory allocation debugging library.
	Provides backtraces, file and line info, on a variety of
	memory errors--overruns, underruns, double frees, leaks, etc.

libexec	A generic executable interpreter and loader that currently
	supports the popular executable formats a.out and ELF, either
	during bootstrap or during general operation.

libdiskpart
 	A generic library which recognizes various common disk
	partitioning schemes and produce a complete ``map'' of the
	organization of any disk.

(libfsread)
	This is in the distribution, but not yet integrated and
	"libraryized": a simple read-only file system interpretation
	library supporting various common types of file systems
	including BSD FFS, Linux ext2fs, and MINIX file systems.

Device support is currently being implemented, generalizing the
Linux-drivers-on-Mach work done by Shantanu Goel at Columbia and Utah.
The oskit document contains substantial documentation on our overall
approach and design, as well as some incomplete details on interfaces.
(libfdev)
	A generic, well-defined device driver framework that allows
	existing device drivers to be adopted from various sources and
	used in a variety of kernel and user-space environments.  A
	support library is provided to allow arbitrary OS environments
	to adopt this framework easily in either kernel or user space
	with a minimum of implementation effort.  Several sets of
	reusable device drivers running under this framework are also
	provided as independent libraries, including robust,
	well-tested drivers taken from Linux and FreeBSD.

Jay Lepreau
Dept. of Computer Science
University of Utah
lepreau@cs.utah.edu
