Inferno 3rd Edition - 28 June 2002 Update

Release Notes

1. Base for update

This set of updates applies to the 18 June 2001 base. The installed software must therefore be that of 18 June 2001, whether installed directly, or the result of updating the original July 2000 release with update packages to the 18 June 2001 level. This set of updates can be applied, however, whether or not the previous update of 3 October 2001 was installed; this package includes all those changes too.

2. Contents

This update offers the following, compared to the 3 October 2001 release.

The following sections provide short summaries of the more interesting or important changes. There are many more minor or cosmetic changes.

New commands and modules

Fc(1) is a floating-point calculator.

∙ A new page man(6) describes the formatting commands used in manual pages.

∙ Support for system-level memory monitoring has been made available as an optional component of emu, with the interface provided by a new driver /emu/devmem.c. It is not compiled in by default, since it is relatively intrusive. Details of how to enable it will be provided with the applications that use it.

Strings(1) extracts strings from a file.

9export (see export(4)) serves a name space to a 9P client (mainly useful for interacting with Third Edition Plan 9 systems at the moment).

cdfs, which was described by dossrv(4) but not actually shipped is now included.

csquery, described in cs(8), queries the connection service and prints the result.

newer, described by ftest(1), is a shell predicate that compares the modification times on two files.

Print(2) is a new module that provides an interface to directly-driven printers.

Repairs and changes

cp has been reworked extensively; amongst other things, it can now safely traverse arbitrary name spaces without becoming confused by complex mounts.

Listen(1) and dial both accept a -A option to cause it to authenticate a connection.

Diff(1) compares binary files and also does not quit (during recursive diffs) when it finds a file it cannot open.

Ls(1) implements the -u and -t sorting operations properly. A new -e option prints the time as a decimal integer (seconds since the system Epoch).

Sh regards all of ‘../’, ‘./’, and ‘#’ at the front of a command name as a request to use the name as-is.

Tail has been changed to avoid some boundary cases.

Touch uses standard argument processing and returns an error exit status if it fails.

Zeros accepts new options -r to generate random bytes and -v to produce blocks with a given value.

∙ The network games software in /appl/games uses port 6660 for its signer, not the standard Inferno signer’s port.

Charon: disguises itself as Mozilla to satisfy agent-name probes; retries fetches on error; supports multiple windows; detects HTML vs plain text correctly; has many Javascript fixes, including fixing a day one bug in operator precedence (!). In general, it has undergone extensive changes, particularly to the cookies and Javascript implementation. It also insists that it be run under the window manager wm(1). It can be set to plumb schemes that it does not implement internally.

∙ The installation software now uses the numeric time as-is to name output packages; the temporary fix introduced in Ocotober of converting leading 10 to A has been removed.

/appl/lib/dis.b prints offsets from MP correctly (it previously printed them as offsets from FP).

/appl/lib/parseman.b accounts for enough extra troff commands to display man(6) correctly.

/appl/lib/profile.b binds #P only if needed.

/appl/lib/translate.b (translate(2)) now computes the right hash value.

∙ Several run-time checks that were missing or incomplete for array access and slicing have been added.

lib/isrv no longer starts a new shell.

Wm-ftree(1) has several new options: -E, -p and -d.

wm/rt now correctly updates stack size (if set).

Xd(1) correctly implements -r to suppress repeated lines.

gettar(1) documents the lstar output format

man(6) describes the manual page documentation format

Interface changes and extensions

Security-password(2) provides a new entry setpwfile to allow the default name /keydb/password to be changed.

Dossrv(4) has changed extensively, to support rename and long names in FAT format correctly. It uses a smaller number of IO buffers.

Createsignerkey(8) has a completely different invocation, documented in that manual page, with a conventional option structure replacing a rather idiosyncratic chain of optional arguments. The old syntax is temporarily secretly still supported, but only for the benefit of any shell scripts that might so use it; if you have any, please change them to use the new syntax before the old usage finally vanishes in a later release.

Sum(1) documents the new sha1sum command.

Bufio(2) returns an error if a seek fails rather than stopping the process(!).

/lib/convcs has several more character sets: koi8-r, windows-1250 and windows-1252.

Keyring-sha(2) documents two new functions, hmac_sha1 and hmac_md5, which are keyed versions of the corresponding secure hashing functions, as defined by RFC2104. The new definitions are in /module/keyring.m.

Keyring-getstring(2) makes it clear that it does not provide delimited I/O but rather requires it (eg, as provided by ssl(3)) for successful operation.

Security-ssl(2) no longer requires #D to be bound into the name space (since it can only be used locally in any case). Consequently, bind calls have been removed from several modules that used SSL.

/appl/lib/crypt/ssl3.b has several critical bug fixes, allowing secure connections to work correctly in Charon; an important bug fix was also made to /appl/lib/crypt/x509.b.

Imageremap has been changed to allow concurrent use.

Translate(6) and /appl/lib/translate.b have changed as required to put the locale-specific dictionaries in directory /locale/locale/dict; the directory for a chosen locale is then normally bound onto /locale/dict, where translate looks by default.

∙ The documentation for button(9) no longer claims that -padx and -pady are supported options for that widget.

sys.m has some new constants defined for use by a later Styx revision.

Tk changes and extensions

∙ The canvas code provides extensions to Tk: grab set tag, grab release tag, and grab ifunset tag. See canvas(9) for details.

∙ Also in canvases, object-specific hit tests have been added, rather than using a bounding box in most cases.

∙ Borderwidth defaults to zero in the entry widget.

∙ Tk multiplexes the cursor amongst top-level windows.

∙ Text and other items selected use foreground/background colours

Limbo compiler

∙ Constant tuple and adt values can be used as values in con constant declarations.

∙ In an array value, the use of reference values for different pick alternatives of the same adt no longer draws a diagnostic but causes the array value to be an array of ref to the adt, not a particular pick alternative.

∙ The C language stub declarations support pick adts.

∙ The alignment of big and real is now correct in C stubs.

∙ The string escape \f is form-feed (to simplify translation of C programs).

Compilers and utilities

Iar’s source directory has been renamed from ar to iar.

mk understands the long-name table in Windows’ archive files, preventing spurious out-of-date status and other confusing results in builds.

sqz and zqs can compress larger ARM and PowerPC executables.

kprof uses a table now provided by /dev/kprof to provide profiling results to the resolution selected by a given platform.

Hosted and Native Inferno

Changes common to hosted and native kernels:

∙ The HOSTMODEL and TARGMODEL for Plan 9 are now Plan9 not, rather confusingly, Inferno. A good few source files have been renamed accordingly.

∙ The memory allocation functions have been modified slightly to support the addition of memory monitoring and profiling. Some functions have also been added to the C library supporting emu and the kernels, with an eye to starting the revision of Styx, based on the current 9P2000. Consequently, the include file lib9.h for all platforms has been modified: to add new functions such as setmalloctag; to make the types of parameters to the malloc calls uniform (and reflect the documentation, as it happens), so that sizes are always unsigned; to change the type of a parameter to strchr and strrchr from char to int; to remove obsolete definitions such as UMFILE and UMDIR; and to add new functions for use inside the kernels. Several new functions are strictly for internal use (and thus might change in future), and they have not been added to section 10. One exception is the new function tokenize, documented in getfields(10.2) and used by parsecmd(10.2). Getfields replaces the function called parsefields, which has been removed, and all calls to it changed to use getfields. The higher aim of some of these otherwise fussy changes is to work towards making Inferno and Plan 9 drivers interchangeable (as best we can).

∙ To help decouple authentication methods from identity setting, two new files caphash and capuse have been added to #c (a temporary location for them), supported by code in auth.c (/os/port/auth.c). Their use will soon replace the setid functionality of keyring-auth. They will not be documented until then.

/emu/exception.c and /os/port/exception.c no longer trap the use of the exit statement (by accident of implementation). /emu/dis.c and /os/port/dis.c do not leave a process in Broken state when it receives an exception because a kernel memory allocation failed.

∙ The JIT compilation of case statements has fixed a day one bug that caused a degenerate form of case (with only a default arm) to be compiled incorrectly.

∙ The 386 JIT will allow rescheduling, and the scheduling is finer grained on the ARM.

∙ ARM code generation produces correct code for some list accesses that were previously wrong (the Dis operator HEADM)

Emu has the following changes specific to it:

- The mouse event queue in devcon.c is now a circular queue without locks as in the native kernel; this prevents a scheduling problem under Linux.

- The READSTR constant defined by the native kernels is now also defined by emu.

- The function previously called rendezvous is now called erendezvous to avoid a type clash with a library function on Plan 9 (its ‘rendezvous’ function takes an unsigned long as first parameter, not void*). lib9.h has changed accordingly where required.

- devcon.c acquires caphash and capuse.

- A new file auth.c must be included in every build.

- Several drivers in emu have been changed to use

    switch((ulong)c->qid.path ...)

to force 32-bit operations to be used when path eventually becomes 64 bits.

- Also in emu the function oserrstr now takes a buffer length, rather than assuming ERRLEN.

- Obsolete code for time and directory mode conversions (!) has been removed from os-*.c.

- Obsolete code for ‘daemonize’ has been removed from os-*.c and lib9.

∙ For the native kernels:

- /os/port/devprof.c has been added but is not yet supported (it is not configured in to any kernel, so no existing kernels are affected by its presence).

- /os/port/devcons.c has caphash and capuse

- Every kernel configuration file must now include auth in the port section to include /os/port/auth.c.