Main changes of this release:


Multiple installation media are provided for PC and Raspberry Pi. For PC, burn an .iso file to CD, or dd it directly to USB media. For Raspberry Pi, dd an .img file directly to sdcard.

The pi.img file can be used for Raspberry Pi 1, 2, and 3. The pi3.img file can be used for Raspberry Pi 3 and 4.





   ; sha1sum -2 256 9front-8963*gz
   7104645614dccc60332009bf1524850e87ae31379d44a9634b90a9effff48287      9front-8963.f84cf1e60427675514fb056cc1723e45da01e043.386.iso.gz
   ee0fda9ba816b81b43e785882bb7cbd19213f06984adeb8bb54d5ea6b2769506      9front-8963.f84cf1e60427675514fb056cc1723e45da01e043.amd64.iso.gz
   4b308ecdb6bef642669406e3adf2992b3f21d529dc4114a14ef9c649f7d79aaf      9front-8963.f84cf1e60427675514fb056cc1723e45da01e043.pi.img.gz
   475540ecb6fd4ae29ef88c3f7eef0cab6e3a054d219d6938b5ac27f15168f10a      9front-8963.f84cf1e60427675514fb056cc1723e45da01e043.pi3.img.gz










dash 1 manual: http://9front.org/propaganda/books


by sl



igor (fast reaction)


9boot: fix isowalk() for directories spanning multiple sectors

archacpi: leave acpi enabled with *acpi=

arm64: use generic timer virtual counter for cycles()

audiohda: Add DID for Intel 200 Series PCH HD Audio

audiohda: add support for intel cannon point-lp (t490s)

audiohda: add support for intel comet lake-s, fix typo

audiohda: add ztom z36/z37 device id

audiohda: fix syntax error

aux/wacom: fix race in read queue

bcm: fix rebootcode linkage

bcm/emmc: remove unused cardr wakeup(), use MACHP(0) as tick reference

bcm64/sdhc: add *emmc2bus kernel parameter to set dma dram bus address

bcm64: make the kernel use virtual timer counter register for cycles()

bcm64: parse the emmc2bus/dma-ranges device-tree property and provide *emmc2bus kernel parameter

devbridge: fix vlan range parsing

devbridge: implement experimental vlan support

devbridge: improve locking, unbind ports automatically on read error and more…

devdraw: printmesg: implement “z” fmt arg (safe since printmesg is disabled)

devenv: allow environment total size of up to 1MB

devgpio: make reading ctl file return 0 bytes

devip: add comment to ip.h explaining Routehint struct

devip: allow setting the “trans” flag on a logical interface

devip: cache arp entry in Routehint

devip: dont hold ifc wlock during medium bind/unbind

devip: implement ipv4 arp timeout with icmp host unreachable notification

devip: implement network address translation routes

devip: improve tcp error handling for ipoput

devip: properly rlock() the routelock for v4lookup() and v6lookup()

devip: use better hashipa() macro, use RWlock for arp cache

devip: use top bit (type) | subnet-id for V6H() route hash macro

devsd: cache SDunit pointer in Chan.aux, improve error handling

devssl, cpu, import, oexportfs: delete

devswap: improve setswapchan()

devtls: fix bwrite memory leak when channel stops being open

devtls: implement “hangup” ctl message

devtls: reject zero length records (thanks sigrid)

devuart: allow serial console on late detected uarts

devvmx: skip tsc offset writing if CPU doesn’t support it

ether8169: support rtl8402 variant

ether82563: add 0x15bd i219-lm variant (thanks crab1)

ether82563: add pci id for ethernet on dell optiplex 7090 micro (thanks leimy)

ether82563: add pci id for i219-v on t490s

ether82598: add pci device id for ixgbe i52899 (thanks izaki)

etheriwl: add did for Intel Centrino Advanced-N + WiMAX 6250 (thanks Nessa)

etheriwl: add support for wireless ac 7260 (thanks kemal!)

etheriwl: fix botched merge…

etheriwl: fixes for 7260 ac

igfx: add TypeILK, since it differs slightly from SNB

igfx: add x1 carbon 3rd gen (broadwell)

igfx: fix FDI link training on ironlake

igfx: fix some typos in comments

igfx: maintain single/double-channel LVDS mode from BIOS

igfx: Support for igfx on Celeron® 2957U (thanks Lorenzo Bivens)

igfx: add x1 carbon 3rd gen

igfx: add missing pci did’s for hwblank for known mobile models

kernel/rdb: need to reenable polling mode on the uart, remove cruft

kernel: add extra negative and power-of-two check to pcibarsize()

kernel: call freebroken() for kproc() when out of processes

kernel: dont block allocating kstack for new processes

kernel: ensure that all accesses to Mhead.mount is done with Mhead.lock acquired

kernel: fix off by one for $cputype buffer (thanks anthony martin)

kernel: fix stat bugs

kernel: increase bootfs.paq compression level and blocksize

kernel: make Page.txtflush into an array

kernel: make growfd(), findfreefd() and newfd2() static

kernel: move waserror() macro to port/portfns.h

kernel: page counts a ulong, not usize

kernel: return error from sysrfork instead of waiting and retrying

kernel: simplify /boot/boot: 28K down to less than 4K.

kernel: support large 64-bit pci membars, increase pc64 VMAPSIZE to 1TB

kbdfs: allow X and x to be used not just for hex composition

nusb: Fix handling of interface altsetting.

nusb/audio: use setalt(), make sure endpoint has right direction.

nusb/cam: fix mistake (nil vs -1)

nusb/cam: use setalt()

nusb/disk: use setalt(), print argv0 in prints instead of “disk:”

nusb/ether: remove csp check for rndis, already done in nusbrc

nusb/ether: use setalt()

nusb/lib: provide a setalt() function to set the interface to its altsetting

nusb/serial: fix pl2303 usbcmd error checks

nusb/usbd: use per hname collision counter instead of device address to resolve collisions

nusbrc: fix FTDI detection

sdide: add pci id for AMT IDE-r controller on x230

sdmmc: do card init in a background process after the first try

uartpci: AMT SOL Redirection interface (x200s)

uartpci: add serial-over-lan uart from x230/AMT

usbxhci: endpoint address needs to be masked with Epmax from endpoint number

usbxhci: xhcirecover proc does not need to check status every 10ms

vga: add eeepc1005ha graphics (thanks Andrew Eggenberger)

vga: return modes according to EDID timing priority order

vga: use vlong for pci bar size

vgadb: add 3rd gen intel hd graphics did (thanks mora)

vgadb: add cyber938x bios offset for cyber 9525 (thanks lyndsay)


/sys/lib/acid/pool: format addresses using A format, instead of X (32 bit)

6c: extern registers must be considered used on return

cc: do not expand function-like macros for non-function invocations

cc: fix incorrect octal range condition in mpatov

reduce: use if() to test for exit status of pipeline


ape: add missing idn2utf, utf2idn to lib9

ape: allow exporting rc functions in environ[]

ape: export mktemp() in <stdlib.h> when _BSD_SOURCE is set

ape: fix wrong write size for _assert()

libFLAC: update to 1.3.4

libaml: implement ObjectType instruction (thanks sigrid)

libaml: implement ToString instruction

libaml: resolve refs in ObjectType instruction

libc: change usize to 64-bit for amd64 and arm64, make memory(2) functions use usize

libc: fix overflow of domain component rune buffer for idn2utf()

libc: idn2utf()/utf2idn(): check for < 1 buffer, can’t insert terminating NUL.

libc: use usize for sbrk() increment

libc: qsort: allow usize-sized arrays.

libndb: move mkptrname() into libndb to avoid duplication

libpanel: rename to match clean rule

libsec: decode international domain names in certificat subject, fix overflow botch

libsec: fix bugs in tls extension handling (thanks kemal)

libsec: fix operator precedence bugs (thanks kemal)

libsec: fix wrong assert condition (introduced in 775a4bea4386c12067057de0e56dd8baa34f43ec)

libsec: fix wrong tls1.0 prf regression

libsec: handle international domain names in certificate request

libsec: no point in checking for “xn–” marker, just call idn2utf().

libtags: flac: check sample rate before dividing by zero; also check number of channels

libtags: id3v2: make sure extra id3 tag does not cause infinite loop

libtags: m4a: do not div by zero

libtags: no tags is still fine if format is known

libtags: opus: fix duration on truncated files

libtags: wav: do not div by zero

libthread: deal with schedfork() and schedexec() returning -1

libthread: fix debug prints, simplify

libthread: remove more garbage: threadnotefd, threadpasserpid.

libthread: remove unused _workerdata() prototype from threadimpl.h

libthread: remove unused skip() function


9fs: 9front.org files now live on port 9000.

9fs: remove case 9bugs (defunct)

9fs: update case 9contrib for new server

9fs: update case 9front

acme: don’t let tag button draw over tag border.

acme: fix hiding of top windows when loading a dump file (thanks Xiao-Yong)

acme: fix leaking memory allocated by getenv(“font”)

acme: fix plumb message leaks (thanks igor)

acme: fix window and scrollbar display glitches at bottom fringe of column

acme: remove superfluous print arguments (patch from plan9port)

acmed: add external command flag -e, improvements, bugs

acmed: handle international domain names

acmed: import acme (RFC8555) client

acmed: move from ip/ to auth/

acmed: pass original utf8 subject domain to challengefn, simplify

acmed: reject -t flag when -e is given, dup stderr to stdout of -e cmd

acmed: remove unused define

acmed: tokenize domains from subject also with spaces (fixed multidom cert)

acne/Mail: fix double-free (Bterm() in mesgshow())

aescbc: flush before exit and report an error (if any)

ape/mkstemp: better options

ape/psh: provide /dev/fd

audio/flacdec: handle read errors properly to avoid endless looping saturating cpu

auth/as: fix wrong filesystem permissions due to wrong factotum being attached

auth/rsa2jwk: add code to produce jwk rsa keys

aux/cddb: include album name and correct track number key

awk: fix off-by-one string buffer overflow from gsub

cat: remove stupid long cast

cmd/mkfile: major cleanup

date: remove ‘-m’ flag

diff: fix -u when comparing identical files

diff: revert last change, this breaks git/diff

exportfs, oexportfs, iostats: make -d log to stderr

exportfs: make -d log to stderr

exportfs: revert e524e8d65a7573c46d7beb49e77bfc2d55a5563d

flacdec: do not loop forever on write/decode errors

g: fix duplicate files with directory argument

g: show all file names when grepping

g: use xargs instead of finding complete file list before greping

games/gb: minor style fixes

games/gb: various RTC fixes

gba: fix flash chip id for 128k and add setting

git/branch: fix order of operations (thanks qwx)

git/branch: fix typo in error message

git/branch: make ‘-n’ use HEAD when ‘-b’ unspecified

git/branch: remove duplicate assignment of dirtypaths

git/commit: remove trailing ‘subst -g’

git/commit: squelch error when run outside repository

git/compat: add support for ls-remote [-d]

git/diff: clean up diffs

git/export: use ‘date -f’ instead of ‘date -m’

git/fetch: be more robust

git/fetch: fix overly eager ’s/pack/idx/g' in refactor

git/fetch: improve detection of dumb http protocol

git/fetch: use read for reading packfiles instead of readn

git/fs: remove trailing null bytes from parent file (thanks mcf)

git/pack: check pf->pack for nil before Bterming it

git/query: fix spurious merge requests

git/query: leave range commits in topological order

git/query: refactor graph painting algorithm (findtwixt, lca)

git/revert: fix empty invocation

git/revert: update modification time on revert

git/save: leave submodules unmangled

git/serve: add a ‘\n’ after HEAD

git/serve: don’t show progress when not interactive

git/serve: one more silencing of non-interactive prints

git/{diff,import}: make it easier to handle manually-asembled patch emails

git: better handling of absolute paths, regex metachars

git: fetch all branches by default.

git: fix non-interruptible temporary warning

git: fix typo in git/log output

git: fully init objq

git: improve pack cache heuristics

git: revert c947bf808 – it triggers a bug.

git: separate author and committer

git: size cache in bytes, not objects

git: use commit date as traversal hint instead of author date

git: when stealing from the old packs list, keep what we stole.

gzip, bzip2: add -n flag to suppress modification timestamp

hjfs: fix group ownership of home dirs created by newuser command

iostats: bind /srv into the namespace, its magic

ip/dhcpd: ignore icmp advice

ip/dhcpd: ignore ipv6 addresses when looking up static binding

ip/sol: add intel AMT serial-over-lan console program

ip/sol: use httpdigest authentication

ip/sol: kvm (vnc) redirect, bring back plain authentication as a fallback (when unsupported)

ip/tftpd: add -m argument for name substitution using regular expressions

joy: joystick script for all emulators, and docs

mixfs: add reading (audio loopback)

mklatin: fix compose sequences starting with a space char (␣ and ı)

mkplist: add -s option to enable “simple” sort (thanks qwx)

mothra: fix rendering of tag

ndb/dns: fix ndb serialization of RR*

ndb/dns: fix wrong ndb attribute “txtrr” vs. “txt” for caching server

ndb/dns: handle txt rr strings as binary, remove nullrr ndb code

ndb/dns: implement caa record type in ndb

ndb/dns: make dblookup() consistent with cachedb operation, bring back txtrr for compatibility

ndb/dns: use correct attribute when serializing caa record in ndb format

ndb/dns: use decimal encoding for txt rr string escapes

ndb/dnsdebug: dont duplicate rrfmt()

ndb/dnsdebug: make usage flags consistent

ndb/dnsquery: make ! bang work with reverse lookups, document in ndb(8)

netaudit: fix auth check, can have multiple auth servers!

netaudit, ndb(6): the dom= attribute in ndb should be specified without the trailing period

netaudit: check for sys= attribute to be free of periods

netaudit: simplify

page: performance fixes

pc: do not access out of bounds array element

plumber: remove $plumbsrv, add optional srvname, usage check

rc-httpd: fold two sed calls into one when computing location

rc-httpd/handlers/error: restore fn 400 (thanks, qeed)

rc-httpd/handlers/{dir-index, serve-static}: commit the correct files this time (thanks, igor)

rc-httpd/handlers/{dir-index, serve-static}: fix directory traversal bug (thanks, igor)

rc-httpd/{rc-httpd, handlers/error}: do some minimal sanitization on $SERVER_NAME before handing it off to select-handler.

rc: Xerror is not a instruction, remove from pfnc

rc: add Xhereq instruction to trace

rc: add err != nil check for early exit

rc: fix everything

rc: fix globbing with lists (thanks qwx)

rc: fix here document handling with quoted end-marker (thanks sigrid)

rc: fix leaking runq->cmdfile

rc: fix pwrd() regression, forgot <= ‘ ’ case from needsrcquote()… sorry :(

rc: make it portable (for UNIX)

rc: only have single instance of a symbol, extern in header (thanks mcf)

rc: read heredoc when receiving ‘\n’ (thanks Eckard Brauer)

rc: rstr() shouldnt skip trailing NUL bytes (thanks ori)

rc: simplify Makefile, use yacc default rule (thanks k0ga)

rc: remove useless exit $staus at the end of rcmain

realemu: fix typo in usage message.

rio: allow spaces in working directory path (-cd) when creating a new window via wctl

rio: fix parsing of directory path (-cd) when creating a new window via wctl

sam: fix spurious overwrite message (patch from plan9port)

screenlock: don’t poll to top window (thanks Stuart Morrow)

snoopy: … and fix the memory leak for new dns rr types

snoopy: add vlan protocol (802.1q)

snoopy: adjust for new dns txt rr format

snoopy: dns: add caa record type, fix rrtypestr()

snoopy: fix dns nil pointer crashes when formating dns packets (thanks sl)

ssh: fix typo (thanks izaki)

ssh: use RSA/SHA-256 instead of RSA/SHA-1 as the public key algorithm

sshfs: prefer error codes over error strings

tinc: fix spelling and update manpage (thanks unobe)

tinc: fix typo in unknown host error message

troff: we are not htmlroff

tweak: add missing return to fix double close(…) on file descriptor…

upas/fs: add missing newline to a debug print

venti: fix fprint format string

venti: fix memory layers

vmx: fix PCI ID for virtio block devices

vmx: update openbsd kernel heuristics

vncv: enable connecting to Darwin hosts

vncv: some fixes to work with intel amt kvm

webfs: do not reuse digest Authorization headers

webfs: implement RFC2617 qop extension for http digest authentication

x509: encode empty sequence as constructed

zuke: do not change volume with delta == 0

zuke: fix search function ignoring matching artist name

zuke: reset before tokenize, increase player thread stack

zuke: simplify volume control logic

zuke: support other volume handles, update volume when /dev/audio is opened


0intro(1), acme(1), con(1), rcpu(1), rio(1), namespace(4), authsrv(6), aan(8): cpu -> rcpu

9p(2): fix a typo (thanks humm)

acme(1): fix reference to 9front default acme font

acmed(8), rsa(8): add role=client attribute to rsa keys

acmed(8): add bugs section

acmed(8): fix typo

acmed(8): fix typos, formatting, and missed name change.

acmed(8): ip => auth: missed a reference to the old name

acmed(8): missed a spot

acmed(8): more improvements

acmed(8): typo…

addpt(2): fix inconsistency in description

audio(1): replace references to juke(7) and playlistfs(7) with zuke(1) (thanks unobe)

brk(2): …. we define lowest addres not used by the program above, so use that instead

brk(2): sbrk(0) returns end address, not the base

consolefs(4): import -> rimport

date(1): sync with reality

dial(2): dial returns an open data file, not a ctl one. also fixed little typo.

draw(3): .IR on memlorigin(2), fix wrong “t” param name (should be “top”)

draw(3): add a missing .br

fork(2): document new error behaviour when out of resources

ftpfs(4): import -> rimport

git(1): “see also” consistency (thanks sirjofri)

git(1): fix git/add -r spacing and wording in BUGS section

git(1): fix quotes in git/conf example

git(1): fix typo in git/push section

ip(3): document the trans argument for add/try.

ip(3): use flags instead of tag for 8 column route add/remove

ipconfig(8): add -t flag to enable source address translation

joy(1): fix typo (thanks lyndon)

leak(1): document how to generate pool.$objtype.acid

listen(8): get rid of old ports

listen(8): remove old cpu, exportfs and rexec listeners

man(1): reference /rc/bin/sig in SOURCE section

ndb(2): document txt and txtrr attributes.

ndb(6): add caa

nusbrc(8): fix typo in BUGS section

prep(8): fix typos, wording, and formating

rc(1): fix synopsis

rc-httpd(8): document how to use HTTP basic authentication

rsa(8): document rsa2jwk

rsa(8): fix spelling and adjust macros to fix formating

sam(1): fix description of ctrl+g

sega(1): fix typo

snap(4): remove non-existent -s from snapfs

pushssl(2): remove

ssl(3): remove

venti(8): change documented behavior to match actual


/lib/ndb/local: add dnschallenge ndb file for acmed(8) by default

/lib/theo: Once you understand the mechanism you’ll realize it will never work.

/lib/theo: We don’t need to make statements people perceive as promises.

/lib/theo: You obviously don’t know what you are doing, and I think you don’t deserve help.

/sys/doc/troff.ms: give correct path for -m flag (thanks kyle)

/sys/games/lib/fortunes: GPU.js

/sys/lib/newuser: fix wsys botch, crate bin/arm64

/sys/src/9/mkfile: add bcm64 (thanks stuart morrow)


keyboard: ++ = ⧺

keyboard: add ∵ (because) and ∷ (proportion)

keyboard: complete double-struck capital set; change SS → Ss for §

rootstub: create /sys/lib/tls/acmed directory





This is the first official release after the migration from mercurial distributed version control system to ori’s git9.

Mercurial and Python have been removed from the distribution, but can still be installed from the snakeoil repository:



Multiple installation media are provided for PC and Raspberry Pi. For PC, burn an .iso file to CD, or dd it directly to USB media. For Raspberry Pi, dd an .img file directly to sdcard.

The pi.img file can be used for Raspberry Pi 1, 2, and 3. The pi3.img file can be used for Raspberry Pi 3 and 4.





   cpu% sha1sum -2 256 9front-8593*.gz
   5673ba7f7a0e42d500b923ad8861e5032eae2f990b546d82a307e4184e4113f7      9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.386.iso.gz
   af6dfae894dcb1e43f1e7e3d085b50f6d1dcf396e09a37d23c174ea94d8bf244      9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso.gz
   d0a5127c4ab531668232271359054107b884aeb43aec99eecadc7441f4380e97      9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.pi.img.gz
   07563f2d76061753614dac9b9b256e3b35932465ecc47844e651c5cc82087930      9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.pi3.img.gz











dash 1 manual: http://9front.org/propaganda/books


by cinap_lenrek




khm (propaganda assist)


archacpi: make *acpi=1 the default

bcm: try ATAGS/DTB pointer from R2 on entry

devloopback: fix wrong device character (thanks romano)

devmouse: default to no blanking instead of 30 minute blank timeout

devvmx: remove unncessary locking in gotcmd() sleep test function

ether82563: add pci id for i219-LM from ThinkPad P17 Gen1 Professional Mobile Workstation (thanks tschak909)

kernel: clean up Mach structure

kernel: export pcienumcaps() for custom capability enumeration in drivers (virtio)

kernel: use 64-bit virtual entry point for expanded header, document behaviour in a.out(6)

nusb/ether: rndis: add standard class code (tested by jmi2k with OnePlus 8)

nusbrc: ignore rndis ethernet in /rc/bin/nusbed, handled by /sys/src/9/boot/nusbrc (thanks romano)

nusbrc: rndis with csp 0104ef

pc, pc64: increase confmem slots to 64

pc64: avoid getcr3() in mmuflushtlb()

sdvirtio: accept multi-queue devices

virtio: add non-legacy virtio 1.0 drivers for disk and ethernet

virtio: set FeaturesOk flag after feature negotiation, and enable queues before DriverOk flag


cc: create .$O files with DMTMP

lex: fix uninitialized fds (thanks きゐ)


lib9p: add auth* functions to man page

lib9p: expose Srv.forker handler and srvforker(), threadsrvforker() and threadsrv() functions

lib9p: remove Srv.srvfd, make postsrv() and threadpostsrv() return the mountable file descriptor, update documentation

lib9p: remove unneccesary headers

libaml: fix gc bug, need to amltake()/amldrop() temporary buffer

libc: add encode(2) variants for custom alphabets

libpanel: fix text sliding around in libpanel text entry widgets.

libsec: add X509reqtoRSApub() function and return subject alt names in X509to*pub() name buffer

libsec: emulate openssl asn1 when generating x509 csr

libsec: move zero check to curve25519_dh_finish()

libsec: take just the CN part of Distinguished Name in subjectAltName

libsec: various changes to tls

libtags, zuke: add *.mod support (thanks kemal)

libtags: modules: ignore empty title

libtags: trim text tags and ignore empty values

libtags: upstream updates

libtags: use CP437 as the default encoding for module formats

libtags: use nelem

libthread: generate correct acid files

thread.h: threadnonotes does not exist

threadimpl.h: remove Printsize as well (unused)

threadimpl.h: remove unused fields from Proc struct


B, sam: remove sam srv file

B: expand path when plumbing files

Mail: correctly track the number of messages (thanks igor)

Mail: remove impliicit headers (thanks unobe)

Mail: remove message about cyclic threads

acme: fix border size, autoindent undo: imported from plan9port (thanks jxy)

walk: properly format permissions

aux/cddb: freedb.org is dead, use gnudb.org

aux/cddb: Provide -e option to print commands to rip audio with tags.

cal: fix days of week alignment for year view (thanks igor@9lab.org)

cpu: properly handle end of file in readstr()

crop: allow no-ops for pipelines

disk/fdisk: add OpenBSD partition type

file: detect webp files (thanks kemal)

file: recognize executable scripts, etc.

g: add lua, mk, ml, mli, myr, and sh suffixes

games/opl3: don’t buffer output and simplify (thanks umbraticus)

games/opl3: use correct sampling rate

git/add: clear qid cache as side effect

git/branch: diff clean and dirty lists correctly

git/branch: mark files we couldn’t update as dirty

git/branch: merge correct set of files

git/branch: preserve checked in permissions on branch update

git/branch: reduce execs to sync working dir

git/branch: resolve implicit branch switch before using it

git/branch: somewhere in the syncing, the fix for junk files was lost

git/commit: allow passing absolute paths

git/conf: check in /sys/lib/git/config as a fallback to user-wide config

git/export: make output pipable to /bin/mail

git/fetch: ensure we clean packfiles on failure

git/fetch: fix overly eager ’s/pack/idx/g' in refactor

git/fs: move mount point to $repo/.git/fs

git/fs: use a better heuristic for permissions.

git/import: handle mails with line wrapping and mime

git/init: create fs dir

git/log: handle absolute paths gracefully.

git/log: show first commit as file change

git/push, git/send: get better about erroring out early

git/revert: fork the namespace before running git/fs

git/revert: handle absolute paths gracefully (thanks deuteron)

git/send: allow the remote to have refs that we don’t

git/send: pick minimal delta set correctly (thanks igor)

git/serve: remove undocumented -n namespace option and -r /usr/git default

git/{branch,pull}: merge files correctly

git: add missing file

git: allow local repository directories as remote uri’s

git: avoid uninterruptible temporary warning

git: create .git/objects/ on git/init

git: got git?

git: handle absolute paths better

ip/dhcpd: work around raspberry pi pxe firmware by providing dhcp option 66

ip/ftpd: Add explict and implicit FTPS support.

ip/ipconfig: ODtftpserver (dhcp option 66) is of type string

ip/tftpd: add a syslog message about what error we return to the client on a NAK

ircrc: freenode -> oftc

iwhois: add some improvements (thanks gall0ws)

kbdfs: allow to escape ctlr-alt-del with shift for vmx and vnc.

mkpaqfs: allow setting compression level

mothra: read the content-type header over file(1) to determine type (thanks james palmer)

page: fix for kerTeX dvi

patch for imap when imap fails

plumber: fix substrings in match rules

printfont: load all fonts for printfont all

python, hg: tow outside the environment.

rc: add subshell-function syntax

rc: correct line numbers

rc: skip arguments to Xsrcline, Xsrcfile in codefree

juke: remove (use play or zuke instead)

remove old, broken scripts: fedex, u(s)ps, weather (thanks fulton)

resample: improve performance (thanks José Miguel Sánchez García)

rio: avoid re-triggering clicks on resize/hide/unhide and send wctl when focus is lost

rio: match background screen color format (thanks noam)

sam: remove refrence to /srv file in man page

troff: fix mangled fonts and character files

trofftable.rc: make work

upas/Mail: avoid showing empty To: and CC: lines in compose windows

upas/Mail: fix CC addresses in “Reply All” compose windows

upas/Mail: fix bug where Redraw must be executed twice to have an effect

vac: add -t flag to exclude temporary files and directories (thanks foura)

venti: fix detection of available RAM (fixes -m)

venti: inform user when reducing memory consumption

venti: make error messages consistent, remove duplicate messages.

venti: warn when opening /dev/swap fails

vmx: avoid strdup() register names for register cache

vmx: emulate ps/2 intellimouse scrolling

vmx: fix 9p debug server and make it compatible to /proc

vmx: implement long mode page table translation

vmx: reset virtio queue state on device reset

vt, ssh: don’t send interrupts on window resize

vt: allow scrolling with the mouse.

zuke: add mkplist, readtags

zuke: fix middle-click restarting playback if held while mouse pointer is moving

zuke: fix position formatter using a wrong type

zuke: fix seeking in paused mode

zuke: include libtags in CFLAGS

zuke: remove -G option (old playlists not supported anymore)

zuke: treat toggle as play in stopped state


9pfid(2): document Srv* in Req (thanks kjn)

Remove ap(1)

a.out(1): update manpage to be 64 bit inclusive

acme(4): document rdsel, wrsel (thanks foura)

add zuke(1) manpage (thanks kemal & humm)

/sys/man/mkfile: drop reference to non-existent realtime(3)

/sys/man/mkfile: run eqn(1) for usb(3) section of book

date(1): document ‘-f’ option

date(1): list all option characters in SYNOPSIS

fs(4): describe the noauth toggle better (thanks izaki)

git(1): we have rebase

graphics(2): fix typo

memory(2): mention tsmemcmp (thanks kemal)

mouse(3): mousein is NOT exclusive, see 30907f1d00a7646ccbb420a18f60ccb0bf36e740

nusbrc(8): fix typo (thanks igor@9lab.org)

opl3(1), exec(2): fix manpage typos (thanks umbraticus)

pic(1): restore example section

rsa(8): document auth/x5092pub, fix usage lines

sched(9): replace ‘–’ with ‘-’ in NAME section

segment(3): restore missing phrase

strcat(2): 0 → nil in manpage in refrence to pointers

sysinfo(1): we don’t do ‘-i’ for sysupdate any more.

sysinfo(1): we’re on git now.

tmdate(2): “ttt” is a valid format too, mention it

webfs(4): fix typos

zuke(1): engrish (thanks qwx)

zuke(1): more fixes (thanks humm)


/sys/lib/dist/mkfile: test for .git directory

/sys/lib/kbmap/colemak: map capslock to backspace (thanks jacob wb)

/sys/src: add arm64 to installall list

vga: Add U+29FA DOUBLE PLUS (thanks jmi2k)

distproto: remove .hgnore and .hg and add .git directory

distproto: sync with hg

fortunes: revision: allow pseudo options after –end-of-options

fortunes: unremove

homespool: remove obsolete lp config tool

legal: mercurial -> git

legal: remove references to python and mercurial

manual: don’t match nonexistent file while preprocessing

sysupdate: clean up transitional code

sysupdate: insert tombstone

termrc, cpurc: silence /net/ether* error message when there are no ethernet devices





F�r PC und Raspberry PI sind mehrere Installationsmedien bereitgestellt. Brennen Sie f�r PC eine .iso-Datei in CD, oder dd direkt an USB-Medien. F�r Raspberry Pi, DD eine .img-Datei direkt an SDCARD.

Die PI.IMG-Datei kann f�r Raspberry Pi 1, 2 und 3. Die Datei PI3.IMG kann f�r Raspberry Pi 3 und 4 verwendet werden.





   cpu% sha1sum -2 256 9front-8392*.gz
   59888dc6ca47461c4267d3c0d3bbe6869d90894607d42590d9a9ef3b52904dce      9front-8392.16c5ead832f2.386.iso.gz
   8b309dad3b1fd1a88bc79082d0b1b45bcc8f1a645cb575e4d727fe2a852067bb      9front-8392.16c5ead832f2.amd64.iso.gz
   4476afc5c5b9589b3d401df8319b1240849ab11708f253c3f4686336fb280efd      9front-8392.16c5ead832f2.pi.img.gz
   9dd26386b3358f5560e3e55ee2a630cc312e38e3550d08747455800387b7a13d      9front-8392.16c5ead832f2.pi3.img.gz











dash 1 und die mannseiten im druck : http://9front.org/propaganda/books




9boot: Automatische Länge für 64-Bit-Werte in hexfmt() für Framebuffer-Adresse verarbeiten(danke Michael Forney)

9boot: Markieren Sie die efi-Boot- und Laufzeitdienstregionen als reserviert

9boot: bevorzuge plan9.ini von ESP, von dem wir geladen haben

audiohda: PCI-ID für Intel C610/X99 hinzufügen

amd64, vmx: unterstützt avx/avx2 für Host/Gast; Verwenden Sie * noavx = in plan9.ini, um es zu deaktivieren

amd64: FP: Verwenden Sie immer genügend Speicher, um den AVX-Status anzupassen und auf 64 Byte auszurichten

audiohda: AMD Starship/Matisse HD Audio Controller hinzufügen(danke uramekus)

audiohda: Interrupts nicht aktivieren, bevor intrenable()

audiohda: lass es mit qemu funktionieren(danke Unfug)

audiohda: setze irbsts Bits in hdainterrupt() zurück(danke LordCreepity)

aux/acpi: Leere Dateien nicht verfügbar machen

aux/kbdfs, kbmaps: Aktivieren Sie Kmod4 für andere Layouts, nicht nur für neo2

aux/kbdfs: benutze getuser() von libc

aux/kbdfs: Fehler beheben, übrig gebliebene statische Benutzervariable entfernen(danke umbraticus und igor)

aux/realemu: Verwenden Sie # $/pci/B.D.Fraw, um auf den PCI-Konfigurationsbereich zuzugreifen

aux/vga: Schwenken entfernen, Bildschirmneigungsunterstützung hinzufügen

ether2114x: Stellen Sie sicher, dass pci bar0 E/A ist

ether2114x: Überprüfung des Treibers auf pc64

ether8169: Interrupt-Panik vor Init beheben, Initialisierung bis zum Anhängen verschieben

ether82563: PCI-ID für i219-LM auf thinkcenter hinzufügen(easypeasy, danke hiro)

etheriwl: Bringt die Wiederherstellung nach dem Flushq-Timeout zurück

etherm10g: Doppelte PCI-Fähigkeitsaufzählung entfernen

bcm64: Ruft die Basisadresse des eingehenden und ausgehenden PCI-Fensters aus dem Gerätebaum ab

bcm: Farbwechsel auf RGB24 ändern(danke p.kosyh)

bcm: dtb-Dateien für rpi-400 und rpi-cm4 herunterladen

devfs: Sperren korrigieren und undokumentierte Konfigurationssignatur “fsdev:\n” ignorieren

devmouse: Redundante Prüfung entfernen

devpccard, pci: pccard-Unterstützung korrigieren und pci-Erweiterungs-ROMs handhaben

devproc: Erlaube jedem, den Benutzer seiner eigenen Prozesse in “keine” zu ändern.

devsons: entferne # c/pgrpid

devvga: Bildschirmneigung implementieren, Schwenken und Ãœberlagerungen entfernen

Kernel: Portable pcimsienable()/pcimsidisable() hinzufügen, MSI/MSI-X auf pcidisable()/pcireset() deaktivieren

Kernel: Palloc Lock während mmurelease vermeiden()

Kernel: Handle tos und pro Prozess Pcycle Counter in Port /

Kernel: Implementiere das OCEXEC-Flag pro Dateideskriptor, lehne ORCLOSE ab, wenn du/fd,/srv und/shr öffnest

Kernel: Addbroken() statisch machen, irreführendes Proc * -Argument entfernen

Kernel: Entfernen Sie das Proc * -Argument aus der Funktion procsetuser()

Kernel: ucalloc.c-Duplikate entfernen

Kernel: Nicht verwendete Funktion pcinextcap() entfernen

Kernel: Update procsave() Kommentar, wir halten nicht mehr auf-> rlock

Kernel: Verwenden Sie eine 64-Bit-Maske, um eine Compiler-Warnung in port/pci.c zu vermeiden

Kernel: Befreien Sie sich von der physischen Seite Bank-Array und verwenden Sie stattdessen conf.mem[]

kw: benutze ethermii.c von port/(danke stuart)

mtx: PCI-Zugriffsroutinen korrigieren(siehe Änderungssatz 8012: 78891f472fbf)

nusb/cam: nicht videoclose(), wenn das Öffnen fehlgeschlagen ist

nusb/ether: Verbesserung von -t rndis (danke romano)

nusb/kb, nusb/joy: Versuchen Sie nicht, das Protokoll auf Nicht-Boot-Geräten festzulegen

nusb/kb: korrekter Mod4-Scancode(125 → 91, passend zu dem, was kbdfs hat)

nusb/kb: Schaltflächenstatus aktualisieren, wenn das Ereignis tatsächlich empfangen wurde, Tippfehler korrigieren(danke umbraticus)

nusb: Erstelle keine rw iso Endpunkte(von Michael Forney)

nusbrc: delect lenovo kamera

pc, pc64, xen: Interrupt-Behandlungscode neu schreiben

pc, pc64: add * nomtrr = Kernel-Parameter

pc, pc64: Fügen Sie einen minimalen HPET-Treiber hinzu, um die LAPIC- und TSC-Frequenzen zu messen

pc, pc64: ordne dma bounce buffer direkt nach xinit() zu

pc, pc64: Weisen Sie E/A-Port-Speicherplatz für nicht zugewiesene PCI-Balken zu und verschieben Sie ioalloc() nach port/iomap.c

pc, pc64: Bereinigung cpuidentify() und einige Kommentare

pc, pc64: Deaktiviere alle PCI-Geräte für/dev/reboot

pc, pc64: Deaktiviere alle PCI-Geräte in pcicfginit()

pc, pc64: Speicherbereiche mit ungewöhnlichen MTRR-Cache-Attributen ausschließen

pc, pc64: grub multiboot reparieren

pc, pc64: MTRRs ignorieren, wenn MTRRCap.vcnt und MTRRCap.fix Null sind

pc, pc64: Deaktivieren Sie die Deaktivierung von MSI-Interrupts

pc, pc64: idt früh in trapinit0 laden()

pc, pc64: Stellen Sie sicher, dass die Schreibkombination in MTRRs unterstützt wird, bevor Sie sie einstellen

pc, pc64: Verschieben Sie den gesamten fpu-spezifischen Code von main.c nach fpu.c.

pc, pc64: Verschieben Sie den allgemeinen IRQ-Handhabungscode aus trap.c

pc, pc64: neuer MTRR-Code, der AMD TOM2 MSR und feste mtrr-Bereiche unterstützt

pc, pc64: Hinzufügen des Aufrufs von pcireset() zu pcicfginit() rückgängig machen

pc, pc64: Warnung bei fehlenden conf.mem [] -Einträgen in meminit()

pc, pc64: Umgehung aller nicht zwischengespeicherten MTRRs

pc, xen: fpu setup/fork/save/restore handler auf pc/fpu.c verschieben

pc/devarch: benutze m-> cpumhz anstatt es neu zu berechnen

pc/dma, pc/sdide: Verwenden Sie uintptr für die physikalische Adresse anstelle von ulong

pc/l.s: Laden Sie den virtuellen GDT-Zeiger nach dem MMU-Schalter

pc/l.s: Entfernen Sie nicht verwendete m0gdtptr/m0idtptr-Strukturen

pc/pc64: fpc, pc64: ix fehlerhafte mtrr slot wiederverwendung(danke Fulton)

pc64: AMD64 fordert SSE-Unterstützung an, entfernen Sie die Prüfung in fpuinit()

pc64: weise fpsave/fprestore nur einmal in fpuinit() zu

pc64: reservierte Bits in CR0/CR4 für amd64 in mtrr setstate() beibehalten

pc: Anzahl der Conf.mem [] -Einträge von 4 auf 16 erhöhen

pc: Verschiebe den Prototyp ldmxcsr() nach fpu.c.

sdiahci: 64-Bit-PCIWADDR() annehmen

sdiahci: aktiviere pci busmaster vor ahciconfigdrive()(behebe qemu Absturz)

usbehci: 64-Bit-Basisadresse verwenden, resetlck entfernen, scanpci() vereinfachen

usbohci: 64-Bit-Io-Basisadresse verwenden, Interrupts vor dem Zurücksetzen deaktivieren, rresetlck entfernen

usbuhci: resetlk entfernen, scanpci vereinfachen()

vesa: Nicht unterstützte Funktion nicht fehlerhaft machen, Rückgabestatus setzen

xen: Fix für die letzten avx-Änderungen

xen: benutze pc/fpu.c


Säure: Hash-Größe erhöhen(danke jonas.amoson)

5c, 6c, 7c, 8c, kc, qc, vc: Verwenden Sie explizite gmove(…, nn) ​​in cgen() für das Ergebnis von OAS *, OPREINC, OPOSTINC

5l: Verschiebungen um Null korrigieren

cc: Vergleichswarnung mit konstanter LHS korrigieren

cc: Entfernen Sie unnötige 128-Bit-Add-Funktionen

cc: Fügen Sie den Kommentaren zu Flags einige Anmerkungen hinzu

cc: mk clean sollte cc.a $ O löschen

[12kq] l: Unix-kompatiblen Code für cputime() entfernen


Affe: Entfernen Sie den _SUSV2_SOURCE-Schutz aus inttypes.h

Affe: füge fehlende isnan() und isinf() Makros für 386 hinzu(danke Jonas)

Affe: wende unendliche rekursion in fmod() fix an(danke jxy und ality)

Affe: Implementiere getlogin() erneut, indem du/proc/$ pid/status angibst

Affe: synchronisiere flaot.h makros mit u.h.

Affe: vereinige math.h kopien

Affe: implementiere log2 in libc

Affe: Exponieren Sie fd2path(danke phil9)

Affe: sync arm getfcr.s Implementierung

Affe: fix _startbuf, überprüfe rfork return(danke pixelherodev)

Affe: libap: füge strndup hinzu

lib9p: Verbesserung von reqqueuecreate()

lib9p: open/mnt/factotum/rpc mit OCEXEC-Flag in auth9p()

lib9p: Interner Dateideskriptor mit OCEXEC-Flag in getremotesys() öffnen

libFLAC/mkfile: Version aktualisieren und mit -DNDEBUG erstellen

libaml: add(nop) “signal” op

libaml: IndexField- und BankField-Implementierungen korrigieren(danke Michael Forney)

libauth: Fügen Sie die Funktion procsetuser() hinzu, um die Benutzer-ID des aufrufenden Prozesses zu ändern

libauth: Ändern Sie die Programme, um die neue Funktion procsetuser() zu verwenden

libauth: Öffnen Sie interne Dateideskriptoren mit dem OCEXEC-Flag

libauth: Implementieren Sie procsetuser() erneut, um/proc anstelle von # c/user zu verwenden

libauthsrv: Öffnen Sie interne Dateideskriptoren mit dem OCEXEC-Flag

libbio: füge aux pointer zu bio hinzu

libc/arm: Öffnen Sie die Datei # c/sysstat mit OCEXEC(interner Dateideskriptor).

libc: Implementiere getppid() und lese/proc/$ pid/ppid anstelle von/dev/ppid

libc: Öffnen Sie den internen Dateideskriptor mit dem OCEXEC-Flag

libc: Implementieren Sie getuser() erneut, indem Sie/proc/$ pid/status angeben

libc: Rekurs auf kleinere Hälfte des Arrays

libcomplete: Öffnen Sie den internen Dateideskriptor mit dem OCEXEC-Flag

libdraw: Bezierpts hinzufügen

libdraw: Erzwinge Flushimage() nicht auf Freescreen()

libdraw: enter/eenter: Fix Kleft für Nicht-ASCII-Text

libdraw: enter/eenter: fix ^ W Entfernen des Textes auf der rechten Seite des Häkchens

libdraw: Öffnen Sie den Dateideskriptor mit dem OCEXEC-Flag in readcolmap()

libdraw: Öffnen Sie interne Dateideskriptoren mit dem OCEXEC-Flag

libdraw: Nicht verwendete Fehlerbezeichnung in freescreen() entfernen

libndb: Öffnen Sie interne Dateideskriptoren mit dem OCEXEC-Flag

libndb: Entfernen Sie die Größenbeschränkung für DB-Dateien

libsec: Öffnen Sie interne Dateideskriptoren mit dem OCEXEC-Flag

libstdio: Synchronisiere Bits von vfprintf von Affe

libsunrpc: Umgehung des Arm64-Compiler-Fehlers in sunStringUnpack()

libthread: Reduzieren Sie die StAffelverwendung für ioprocs, öffnen Sie/proc/n/ctl mit dem OCEXEC-Flag

libthread: Reduziert die StAffelverwendung von threadkill *(), open/proc/n/ctl mit dem OCEXEC-Flag

libthread: Nicht verwendete _times() -Funktion entfernen

libthread: vereinfache threadsetname()

libvorbis: 1.3.5 → 1.3.7(behebt eine Reihe von CVE und anderen kleinen Problemen)

libvorbis: fix free() hat einen falschen Zeiger aufgerufen

stdio: Entfernen Sie fehlerhafte Behauptungen in dtoa

strndup: gehe nicht davon aus, dass der Puffer beendet ist


9fs: Bell Labs ist sehr tot

B, Bfn: Aufruf mit mehreren Dateien korrigieren, Handbuchseite verbessern

B: Verschmutzen Sie nicht die Umwelt

Töten: Umwelt nicht verschmutzen

töten, töten, pleite: Umwelt nicht verschmutzen, $ user verwenden

Mail: Richtiges Rendern verschachtelter mehrteiliger Nachrichten

Mail: Endlos-Löschschleife korrigieren

Mail: Invertierte Antwort-All-Bedingung behoben

Mail: Nur bei Änderung gepflegte Flaggen löschen(danke deuteron)

Mail: Separates Löschen vom erneuten Verknüpfen von Nachrichten

acme: fix use nach free in warning() call(danke igor)

acme: benutze getuser() in fsinit()

acme: Verwenden Sie anstelle von getuser() eine globale Benutzerzeichenfolgenvariable.

acme: Fixieren Sie den Selbstmord * und * Ressorcen-Leck in ECMD.C (danke igor)

aout2uimage: Fehlende \ n im Verwendungsdruck korrigieren(danke James)

Audio/Flacenc: Fehlerprüfung für fseeko behoben

Audio/Flacenc: Verwendung korrigieren

Audio/Flacenc: Ein Argument in fprintf() wurde verpasst.

Audio/WAVDEC: Option -s hinzufügen

diff: Änderungsmarkierung für -c-Modus korrigieren

dpost Prolog: Update/Radikalex zur Korrektur der quadratischen Verschiebung(danke umbraticus und Ethan)

Gesichter: Option -c hinzufügen, um Gesichter mit Knopfdruck 1 zu entfernen(danke sirjofri)

fax, psfax, vwhois: Verwenden Sie $ user anstelle von/dev/user

Datei: ftyp mp4 * ist auch Video/mp4

Mimetyp: Eintrag für .patch-Erweiterung hinzufügen

aux/cpuid: Blatt 7 dekodieren; Dekodierung von Blatt 13 verlängern

aux/cpuid: korrigiere die letzte neue Zeile auf printbits()

aux/cpuid: Korrigieren Sie die Null-Terminierung nacheinander.

aux/status ^(bar msg): einige kleine Korrekturen(danke umbraticus)

awk: abgeschnittene Eingabe nach fflush korrigieren

cal: Option add -s, um den Starttag der Woche anzugeben

cal: fix -s 7

cal: Verwenden Sie in jedem Fall Sa/Su, vereinfachen Sie auch den Code

cwfs: Interpretation des Startdump-Arguments korrigiert

dc: fix Abstürze mit: operator(danke istvan bak)

dd: Fehler mit ungültigen Größensuffixen, füge ’m' hinzu

fplot: füge abs und hyperbolische Funktionen hinzu

g: Verzeichnisargumente filtern

g: Dateien initialisieren env var

Spiele/GB: fix umgekehrte Audiokanäle

Spiele/gb: Timer-Teiler für Eingangstakt 0 korrigieren

Spiele/gb: verschiedene HDMA-Korrekturen

Spiele/Mix: SLAX- und SRAX-Anweisungen korrigieren(danke nicolagi)

Spiele/Mix: Korrektur der Dekodierung von Schichtanweisungen

Spiele/mix: Implementierung der MOVE-Anweisung korrigiert(danke nicolagi)

Spiele/Snes: BRR-Dekodierung mit den Filtern 2 und 3 korrigieren

Spiele/Snes: DSP-Echo implementieren

Spiele/Snes: Implementieren Sie DSP-Rauschen

Spiele/Snes: Verwenden Sie zum Resampling die 4-Punkt-Einsiedlerinterpolation

Spiele/Snes: Verwenden Sie anstelle ihrer Werte die Enum-Konstanten KON und ENDX

Spiele/glendy: Ihre Komplikation hatte eine Komplikation (god damn it kemal)

hpost: Verwendungstext korrigieren

hpost: unterstütze benutzerdefinierte Header(danke julienxx)

html2ms: 0xFFFD → Runenfehler

ico: Vermeiden Sie mögliche Null-Zeiger-Dereferenzen

ico: Interpretation von 0 Breiten/Höhen korrigieren

imap4d: imap4date sollte Zeit und Zeitzone ignorieren(RFC3501, 6.4.4)

iostats: dup 9p Pipe zu fd 0 und fd 1 für exportfs

ip/cifsd: Fehlender int-Rückgabetyp für vpack() behoben(danke pr)

ip/tftpd: füge -n Namespace-Dateiflag hinzu(danke sam-d)

ip/tftpd: Verwenden Sie procsetuser(), anstatt # c/user zu schreiben

ip/tinc: Fix Reportedge()

jpg: behandle EOF als EOI-Marker

mothra: “d”: Lite-Version verwenden, Umleitung deaktivieren

mothra: füge den Befehl “d” hinzu, um im Internet nach einem Text zu suchen(mit duckduckgo)

mothra: füge nach div keinen Zeilenumbruch ein(danke phil9)

mothra: verknüpfe Text beginnend mit gemini: // und ftp: //

mothra: URLs mit mittlerem Klick auflösen. hilft beim Schnüffeln von relativen URLs

mothra: Optimieren Sie die Eingabesteuerungslogik für eine einfachere Textbearbeitung

Marschall: Debug-Junk entfernen.

mklib, upas/common: bereinige libcommon richtig(danke mikan)

ndb/dns: behandle dnskey RRs(danke launisch)

ndb/dns: Implementieren Sie den Berechtigungsdatensatztyp der RFC6844-Zertifizierungsstelle

news: mach -a und -n miteinander aus(danke lyndon)

Molch: fn f entfernen, durch walk ersetzen

pc: Exit-Status abhängig von Fehlern einstellen

pc: Behandle EOF anmutig und erlaube so eine einfachere Verwendung in der Befehlssprache sam

Lot: Fehler beim Klicken auf falsche Klickattribute korrigieren(danke umbraticus)

Klempner: Lecken Sie den srvfd-Dateideskriptor nicht in Unterprozesse

Klempner: Öffnen Sie Regeldateien als OCEXEC, um zu vermeiden, dass sie an Unterbefehle weitergegeben werden

Beweis: Verwechseln Sie nicht “”(1)(danke Stuart Morrow)

ptrap: fehlgeschlagen, wenn ohne Argumente aufgerufen wird

ptrap: Filterung nach Lotattributen implementieren

qr: Beenden Sie den Exit-Status

ramfs: truncfile() für nicht ein Vielfaches der Erweiterungsgröße(64k) korrigieren

rc: Zeilennummern bei Fehler anzeigen

rio: Erlaube Fenster, die so klein wie eine Textzeile sind und dennoch gescrollt werden können

rio: Vermeiden Sie das Neuzeichnen von Fenstertext beim Ändern der Größe für Programme, die libdraw verwenden

rio: formatiere pid’s als ulongs

rio: goodrect: kläre die minimale Höhe und verwende tatsächlich den kleinsten vernünftigen Wert

rio: Fensterfokusänderungen deterministisch vornehmen, Wind bereinigen.c

rio: open/dev/snarf mit OCEXEC-Flag beim Schreiben

rio: Stellen Sie den Windows-Inhalt unter/dev/mouse close ordnungsgemäß wieder her

rio: schreibe eine bessere Funktion von portion() um

rio: vereinfache filsysinit() mit getuser() und formatiere pids als ulongs

rio: benutze libdraws badrect() um einige extreme Fälle in goodrect() auszuschließen

sam/{address.c, sam.h}: STRSIZE auf 512 MB erhöhen(danke, Ori_B)

screenlock: benutze initdisplay(2), öffne das fenster(danke stuart morrow)

Sekunden: Entfernen Sie Junk aus der Verwendung

sort: Speicherleck beheben(danke Igor Boehm)

src: arbeite auch an awk-skripten, siehe “src tal”(danke phil9)

start, stop: Vermeiden Sie eine Nullliste in der Verkettung ohne Argumente. Verwenden Sie $ user

Statistik: Fragen Sie Batterie und Temperatur nicht so oft ab, wenn Sie acpi verwenden

syscall: verlass dich nicht auf. auf dem Weg sein(danke Silas)

Test: Ausdruck Parser korrigieren

text2post: Überprüfen Sie den Schriftindex auf einen Bereich außerhalb des Bereichs

Tweak: Unterstützung Showdata Plumb Action(danke Sirjofri)

upas/*: bereinige mkfiles(danke amavect)

upas/*: mkfile Probleme behoben(danke amavect)

upas/common: Bibliothek auf ‘mk clean’ löschen

upas/fs/mbox.c: Behebung eines kosmetischen Tippfehlers

upas/fs: vertauschtes Argument, toter Code behoben

upas/marshal: füge -S saveto hinzu, um ausgehende E-Mails zu speichern, behebe -F

upas/marshal: nicht vorhandenen Speicherordner korrekt behandeln(danke sirjofri)

upas/marshal: benutze login anstelle von user(danke sirjofri)

upas/ml: Berühren Sie das Bildmaterial

upas/runq: bring -a zurück

upas/runq: Tippfehler behoben

upas/runq: Unterstützt die parallele Warteschlangenverarbeitung, drop -a

upas/runq: Code bereinigen, Fehlerbehandlung beheben.

upas/send: füge \ n zum Fehler in verweigern() hinzu(danke josuah)

upas/vf: MIME-Grenze von temporären Anhangsdateien ausschließen

upas/vf: Installiere den Formatbezeichner% Ï„

upas/vf: Debugging-Druckanweisungen entfernen

upas: mk nuke reparieren

upas: mache ‘all’ zum Standardziel

vmx: Allokationslecks beheben

vmx: Option -D hinzufügen, um Debug-Meldungen zu aktivieren. Verwenden Sie vmdebug für nicht schwerwiegende “Fehler”.

vmx: Fügen Sie das Flag -v | -w hinzu, um das Verhalten beim Erstellen von Fenstern zu steuern

vmx: Füge fmt-Überprüfung hinzu, behebe fmt-Fehler, entferne Duplikate für vmdebug

vmx: bereinige mksegment, memset nur wenn segment vorhanden ist(devsegment löscht neue)

vmx: Maskiert die Bits 0: 2 und 24:30 von pci CONFIG_ADDRESS beim Lesen

vmx: nanosec(): Nicht unterbrechbare temporäre Fehler beheben, fasthz nur einmal nach xstart zuweisen

vmx: Reduzieren Sie die CPU-Last, indem Sie die NOP-Schleife entfernen

vnc: Ich mag dein Gesicht nicht.

vncv: Wenn Sie frühere Änderungen rückgängig machen, ist eine weitere Überarbeitung erforderlich

vncv: ordne Kaltgr NICHT Meta zu, füge Mod4(Super) als Extra-Schlüssel, der stattdessen verwendet werden soll

vncv: Wählen Sie einen von uns unterstützten Authentifizierungstyp aus

vt: Verbessern Sie das Chording-Verhalten

vt: rfork Umgebungsvariablen(danke fshahriar)

Webcookies: Entfernen Sie den umständlichen benutzerdefinierten Datums-Parser

WHOIS: Unterdrücken Sie fehende Deteifehler (danke kivik)

winwatch: immer reflow wenn möglich(danke telephil9)


acme(1): Verweise auf entsprechende Manpages hinzufügen

acmemail(1): Nail => Mail

Audio(1): Behebung eines kleinen Tippfehlers.

Audio(1): Es ist jetzt 2021

CPU(1): Siehe oexportfs(4)

ctime(2): füge tmdate(2) zu “see also” hinzu

dd(1): Manpage aktualisieren, um sie an das Programm anzupassen

mothra(1): eu-vorschriften verlangen, dass wir offenlegen, dass wir suchanfragen an duckduckgo senden.

9boot(8): Aktualisieren Sie das Handbuch, um Änderungen in der Suchreihenfolge des Efi Loader widerzuspiegeln

9pfid(2): document struct Qid(danke sirjofri)

fplot(1): benutze abs()

import(4): siehe oexportfs(4)

vmx(3): Behebung eines kleinen Tippfehlers

nusb(4): Tippfehler korrigieren

Marschall(1): Fixbeispiel: upas/mail -> mail(danke fulton)

Maus(3): Dokument “scrollswap” ctl Nachricht, Stil ein wenig korrigieren(danke umbraticus)

mp(2): korrekte Dokumentation der Fehlerbehandlung(danke LordCreepity)

nan(2): Dokument isInf(x, 0) stimmt mit + ∞ und -∞ überein

newuser(8): Verweis auf falschen Dateiserver-Konsolenbefehl korrigiert

plan9.ini(8): document * nohpet = option

plan9.ini(8): document * nomtrr = und ordne die Tabelle

pop3(1): Schreiboptionen konsistent

rio(4): listet die Fensterzustände in der richtigen Reihenfolge auf(danke umbracticus)

Sega(1): Schlüssel reparieren(danke Bigato)

tmdate(2): korrektes Beispiel in der Manpage

tmdate(2): Fehler beim(p) ass

tmdate(2): Lüge entfernen

troff2png(1): Manpage hinzufügen

upasfs(4): kleine Tippfehler beheben(danke igor)

vmx(1): vmxgdb standardmäßig erstellen, ebenfalls bereinigen

vt(1): optionales Befehlsargument dokumentieren(danke sl)

zerotrunc(8): Manpage hinzufügen


legal: mit neuer lizenz: mit

/lib/keyboard: Anführungszeichen unter(danke sirjofri)

/lib/keyboard: füge Finger und weitere Pfeile hinzu(danke umbraticus)

Schriftart/Terminus: Sie können keine Schriftart ausführen, dumm

Vermögen: SATAN

Vermögen: Das hängt davon ab, wie Sie native definieren. - Andre Garzia

kbmap: Unterstützung für neo2 kbmak hinzufügen(danke jstsmthrgk)

kbmap: füge einen fehlenden Schlüssel zur türkischen Keymap hinzu(danke kemal)

kbmap: türkische Keymap hinzufügen(danke Kemal)

kbmap: kroatische kbmap hinzufügen(danke skerbergs)

kbmap: lettische keymap hinzufügen(danke freddy)

kbmap: Vermeiden Sie die Division durch Null, wenn das Fenster zu klein wird

kbmap: Finnische kbmap aktualisieren: ¤ auf Shift + 4 korrigieren und weitere AltGr-Varianten hinzufügen

Klempner/Basic: Griff Tga, WAV, Au, Mid und Mus

Profil: Erstellen Sie kein $ wsys, wenn es nicht vorhanden ist

theo: falsch.





Multiple installation media are provided for PC and Raspberry Pi. For PC, burn an .iso file to CD, or dd it directly to USB media. For Raspberry Pi, dd an .img file directly to sdcard.

The pi.img file can be used for Raspberry Pi 1, 2, and 3. The pi3.img file can be used for Raspberry Pi 3 and 4.





   cpu% sha1sum -2 256 9front-8013*.gz
   e8a224a8220e472593dd17a2479ba5a9497f6790cac23de2522400930a4dd626      9front-8013.d9e940a768d1.386.iso.gz
   7771be88148560a8e59283a93c98b9ecc37172e7a2acff356f12e64aac9e5c77      9front-8013.d9e940a768d1.amd64.iso.gz
   a63a87272258b17fdd24f2807252134aee311af243ec8274f715f8dcf1b86f1f      9front-8013.d9e940a768d1.pi.img.gz
   5b5baa5c3fd0b69a71aaa7bca867508210fac25d8ad17d76b97d8aece1c9f3dd      9front-8013.d9e940a768d1.pi3.img.gz









dash 1 and man pages in print: http://9front.org/propaganda/books




New date/time formaring/parsing API in libc

Kernel updates for Raspberry PI4 8GB model

Intel wireless driver now supports 8000 and 9000 family cards

New Thinkpads now fully supported: T480, T495

Big kernel PCI code overhaul


archacpi: use 64-bit uvlong for physical addresses

audioac97: use 64-bit physical addresses

audiohda: use 64-bit physical addresses, check pci membar types

audiohda: use PCIWADDR() instead of PADDR(), handle 64-bit dma addresses

audiosb16: cleanup audioprobe(), cast ISAConf.port to ulong

aux/acpi: connect EC region handler, fixes battery status on eeepc 1000px (thanks Peter Kosyh)

aux/acpi: forgot to commit -p option

aux/acpi: write a man page, fix usage, call threadexits

aux/vga: eepc igfx support (thanks p.kosyh)

aux/vga: use 64-bit physical addresses for pci membar

bcm64: bring pci code in line with the pc/pc64

bcm64: fix usb xhci controller on pi4 8GB variant (thanks richard miller)

bcm64: handle 8GB of physical memory for raspberry pi4

bcm64: increase maximum segment size to 8GB

bcm64: use 64-bit uvlong physical address in vmap()

bcm64: use uvlong for ISAConf.port

bootrc: allow kbmap to be set via plan9.ini (thanks Aaron Bieber)

devether: print Ether.port as 64-bit uvlong

devip: fix parseipmask() prototype in ip.h

devip: implement ipv6 support in ipmux packet filter

devip: pick less surprising interface address in header for incoming UDP packets

devlml: use 64-bit physical addresses

devmnt: print chanpath for unexpected reply tag

devpccard: use 64-bit physical addresses

devpnp, devether, devusb: cast ISAConf.port to uvlong (for 32-bit implementations)

devpnp: print pci membar as 64-bit uvlong

devusb: keep isochronous ep->hz consistent with maxpkt, ntds and pollival

devusb: print Hci.port as 64-bit uvlong

devvga: use 64-bit physical addresses for framebuffer

etherbcm: handle 64-bit host addresses, use PCIWADDR() instead of PADDR()

etheriwl: add Wireless 8260 card

etheriwl: add for Intel Wireless-AC 9260

etheriwl: add support for Intel Wireless AC 8265

etheriwl: delay before crystal calibration

etheriwl: don’t break controller on command flush timeout

etheriwl: remove stations after disabling binding quotas, drain all queues in rxoff7000()

kbdfs: add a compose sequence to type ⑨

kbdfs: allow >16 bit runes in /lib/keyboard

kernel: don’t strip binaries in bootfs.paq

kernel: fix Abind cyclic reference and mounthead leaks (thanks Alex Musolino)

kernel: get rid of unused ucallocb

kernel: make segments non-executable when icache is not maintained

kernel: massive pci code rewrite

kernel: remove unused segment argument in freepte()

kernel: segflush() needs to flush tlb of other processes

nusb/lib: use fmtprint for the entire dump to be printed out

nusb/serial: add ids for FT230X (thanks mischief)

pc, pc64: implement 64-bit pci membar support

pc, pc64: remove mystery “type” bits in pcicfgrw*raw() (fixes qemu, thanks mischief)

pc, pc64: use 64-bit physical addresses for ISAConf.port

pc, pc64: use 64-bit physical addresses for vmap() and upaalloc()

pc, xen: make PAT support optional (for xen)

pc64: disable interrupts in mmuwalk() for checkmmu()

pc/ether*: use 64-bit physical addresses and check pci membar types and sizes

pc/pcmciamodem: cast i/o port to ulong

pc/pmmc: check pci membar type

pc/vga*: use 64-bit physical addresses and check pci membar types and sizes

pc/wavelan: print Ether.port as 64-bit value

sd53c8xx: use 64-bit physical addresses

sdiahci: use 64-bit physical addresses

sdiahci: accept AHCI controllers from ASMedia vendor id (thanks mischief)

sdmv50xx: use 64-bit physical addresses and check pci membar type

sdnvme: handle machines with more cpu’s than submit queues (thanks mischief)

sdnvme: make sure pci membar type is memory

sdnvme: use PCIWADDR() instead of PADDR()

sdodin: use 64-bit physical addresses and check pci membar type

uartaxp: use 64-bit physical addresses and check pci membar types

usbehcipc: use 64-bit physical addresses and check pci membar type

usbuhci: make sure pci membar type is i/o

usbxhci: implement isochronous in transfers (for webcam, audio recording)

usbxhci: use 64-bit physical addresses

wifi: add packet timestamping support


7c: fix wrong type on OASxxx operations

cc: promote integer constants according to c99 spec.

cpp: fix mutually recursive macros


ape/ctype.h: add isblank, fix functions (thanks staalmannen)

ape/libdraw: add missing eenter (thanks phil9)

ape/limits.h: fix typo in (U)LLONG_MAX

ape: add missing rerrstr.c

ape: make libplumb available under ape.

ape: simplify mkfile (thanks amavect)

ape: stdio.h: correct return type of putc

ape: stdio: fix warnings, make code more standard

libaml: fix fault when the second operand of comparison cannot be converted

libc: introduce new time and date apis.

libc: ignore ‘?’ in date format strings

libc: make yday 0-based, as docs suggest

libc: tmparse: should ignore leading whitespace

libc: tmparse: put in local timezone hack

libc: tm2sec: clear new fields in tm

libndb: order subnets by prefix length for ndbipinfo() lookups

libplumb: add missing mkfile

libttf: check directory() result

libttf: fix cmap subtable offset type and rank UCS-4 higher (more codepoints). fixes runes > 0xffff


abaco: add fonts.h to HFILES in mkfile (thanks eekee)

acme/win: add trailing space to window tag

acme/win: fix window recreation command

acme: add missing logf.c

acme: implement ‘scratch’ ctl command (thanks Drew DeVault)

acme: implement position-dependent scroll-wheel scrolling

acme: import changes from plan9port (thanks jxy)

acme: import event log from plan9port (thanks fshahriar)

audio/flacdec: add -s SECONDS option to seek before decoding

audio/mp3dec: add -s SECONDS option

audio/mp3dec: mad timer duration is all wrong, use samples instead

audio/oggdec: add -s SECONDS option to seek before decoding

audio/oggdec: allow -s 0

audio/oggdec: give it enough chance to seek from the start, where first seek might be still too close to the beginning of the file

aux/cpuid: flush instruction cache of after patching trampoline

aux/getflags: fix named rune arguments.

aux/ms2, aux/na: fix warnings

aux/trampoline: Implement inactivity timeout (-t option)

cwfs: update mtime and qid.vers for directory on rename

date: use new libc date apis.

dc: increase exponent limit (thanks unboe, lyndon)

deroff: fix out-of-bounds access if runes above 0X80 are inside EQ clauses (thanks mmnmnnmnmm, via plan9port)

diff: support unified diff via -u

faces: remove log support

g: add ‘.hs’ and ‘mkfile’ to the walk. (thanks joe9)

games/4s: increase thread size (thanks majiru)

games/nes: workaround for truncated chr

hjfs: update mtime and qid.vers for directory on rename

htmlroff: fix out of bounds access (thanks Rei-sen, via plan9port)

imap4d: fix missing return in %δ format of Dfmt()

imap4d: fix mkfile to have the correct default target

imap4d: get rid of unixdate/unixfrom handling

imap4d: reject invalid month in date2tm()

imap4d: respect errors from read(), remove debug prints

ip/6in4: request ipv4 packets only in ipmux filter


ip/ftpd: handle “allo” command by treating it as a no-op

ip/httpd: fix ‘mk nuke’

ip/tinc: run script sub-shell in its own environment

ip/torrent: fix size check in 64-bit “v” unpack (thanks pr)

ip/torrent: try harder allocating ports

ndb/dns: allow multiple txt, nullrr, cert, key and sig records (thanks kvik)

ndb/dns: mark ns record authoritative when in our area for delegation

ndb/dnsdebug: add -c flag to debug caching dns server behaviour

nedmail: don’t try to shoot down subcommand on interrupt

png: remove bogus chanlen warning

pre-lib9p servers: fix incorrect Tversion handling

ptrap: fix /env/status always being set on main process exit

qball: remove unused #include <stdio.h>

ramfs: make Elocked[] more consistent (thanks fazlul)

rc-httpd: fix invalid test(1) invocation in dir-index

rc: avoid forking for final command that has variable assignments (to get $apid right)

rc: avoid stat calls for directory globbing

replica: fix mkfile script installation (thanks Amavect)

rio: move the code for ‘send’ into a function

seconds: use new libc date api

seconds: tolerate trailing whitespace in dates

snoopy: add ipmux pseudo protocol

sshfs: update usage text to match man page

sshnet: prevent ssh process from keeping the mount alive

syscall: utility overhaul

syscall: don’t append ‘\n’ to the output

syscall: fix build problem caused by stale tab.h

upas/fs: extract proper date from unix header

upas/fs: fix handing of multi-line header fields (thanks theinicke)

upas/fs: fix memory leak in ref822()

upas/fs: fix truncation of plumb date

upas/fs: fix wrong nparts field index (changed in previous commit)

upas/fs: move unixheader handling to parseheaders()

upas/fs: port date parsing to libc apis

upas/fs: put date822 into the index, fix from and replyto handling

upas/fs: remove now unused Mtrunc mimeflags constant

upas/fs: remove unused function date822tounix

upas/fs: use memchr() instead of strchr() in hdrlen()

upas/fs: wait until the index becomes unlocked

upas/fs: make imap debug logging less noisy

upas/marshal: make attachment failure fatal

upas: appendfolder(): don’t be picky about the timezone of ctime()

upas: appendfolder(): skip the address from unix header before date

upas: convert to tmdate, change timezone format

upas: fix appendfolder timestamps (thanks umbraticus)

window: fix error exit with the -m flag

vmx: add Kmod4 key

vmx: does not do well with certain fb widths, so restrict it

vmx: set xstart to either nsec or cycles depending on what is available

vmx: use actual system kbmap

vmx: use _tos->cyclefreq (thanks cinap)

vmx: use cycles() instead of nsec() when possible

vncv: implement rfb 3.8 protocol (thanks Iruatã)


9p(2): fix typo

acme(1): document log file in manpage

audio(1): add new -s SECONDS option

ctime(2), tmdate(2): document ctime/tmparse incompatibility

chdir(2): add reference to getwd(2) in SEE ALSO section

cifsd(8): fix typo (thanks senthil)

faces(1): remove bespoke date parser

getwd(2): add reference to chdir(2) in SEE ALSO section

graphics(2): fix typo

ip(3): fix typo in manpage (thanks jstsmthrgk)

mk9660(8): fix reference to proto file format

tmdate(2): document tz field

tmdate(2): fix missing arg, fix formatting (thanks joe9)

tmdate(2): fix examples, stale references (thanks deuteron)

tmdate(2): fix mistakes in prototype (thanks moody)

tmdate(2): fix name of tm struct

tmdate(2): fix typo (thanks mveety)

torrent(1): update url in examples section

walk(1): clarify how -n argument works (thanks umbraticus)

walk(1): improve wording, formatting

walk(1): fix typos


/lib/rob, /lib/rsc, /lib/theo: So it sounds like everyone is in favor of the entire generics proposal and all the semantics, and all we have left to hammer out is the bracket characters? Do I have that right?

bullshit: decentralized ActivityPub



front 9FRONT "PLAN9-HATERS front


Multiple installation media are provided for PC and Raspberry Pi. For PC, burn an .iso file to CD, or dd it directly to USB media. For Raspberry Pi, dd an .img file directly to sdcard.

The pi.img file can be used for Raspberry Pi 1, 2, and 3. The pi3.img file can be used for Raspberry Pi 3 and 4.









   cpu% sha1sum 9front-7781*.gz
   3c20a32558536f751673215d7f543f8e9b1946ed  9front-7781.38dcaeaa222c.386.iso.gz
   e58a3f7d67e3937593ae0bf8b8c0dc7ed47c7535  9front-7781.38dcaeaa222c.amd64.iso.gz
   038a7c343dcbe687b4aec4e7ad84daea9f304b8d  9front-7781.38dcaeaa222c.pi.img.gz
   eed089e5be64a34e668cc4cd376b7c96524d035a  9front-7781.38dcaeaa222c.pi3.img.gz









dash 1 and man pages in print: http://9front.org/propaganda/books




*.386.iso 386 pc (more drivers)

*.amd64.iso amd64 pc (less drivers)

*.pi.img arm paspberry pi 1, 2 and 3

*.pi3.img arm64 raspberry pi 3 and 4


9bootpxe: continues the war against random DHCPv6 DUIDs

audiohda: add pci vid/did for AMD Raven HD Audio Controller (T495)

aux/acpi, aux/apm: remove nopipe -i flag

bcm: change ARGB32 to XRGB32 for framebuffer to avoid slow drawing

bcm: fix software cursor avoidance for loadimage() case (thanks bitmapper)

bcm: use extended small pages so XN bit can work

bcm, bcm64: dancing to the drum of the linux clowns for device tree memory size detection (thanks kenji)

bcm64: fix kernels cmpswap() function

bootrc: fix wrong redirections after &

bootrc: suppress error from grep if ethernet ifstats file is not found

bootrc: fix comment typo (thanks Robert Ransom)

bootrc: for wireless netbooting, set the WPA/WPA2 preshard key with wpapsk=password boot parameter

cycv: a cyclone v kernel: fpga support, fix CONFADDR NEW

cycv: add cycv kernel

cycv: support for registers

devcons: fix permissions for reboot and sysstat

devcons: fix write length of writebintime() (thanks BurnZeZ)

devdraw: fix topnwindows() panic when images are not windows (thanks aiju)

devip: fix ifc recursive rlock() deadlock

devip: fix packet loss when interface is wlocked

devip: use the routing table for local source ip address selection

devproc: cleanup procwrite size checks

devproc: don’t allow /proc/$pid/ctl to be opens for reading

devproc: fix syscalltrace read for ratrace

devproc: make sure writewatchpt() doesnt overflow the watchpoint array

devproc: return process id when reading /proc/n/ctl file

devshr: unmount service on #σc/share/mount removal

devswap: dont assume Proc* structures returned from proctab() are continuous

ether8003: use physical addresses for ISAConfig ether->mem

ether82543gc, ether82557, ethervirtio: do kproc() call ouside of spinlock

ether82563: fix multicast for i210

ether8390: remove unused variables

ethercycv: add cycv ethernet driver

ethercycv: dont spin on MDIO

kernel: add missing FPillegal definition for kw and omap kernels

kernel: add portable memory map code (port/memmap.c)

kernel: avoid selecting the boot process in killbig()

kernel: avoid useless mmu flushes, implement better wait condition for procflushmmu()

kernel: cleanup makefile for $CONF.$O target

kernel: cleanup the software mouse cursor mess

kernel: fix checkpages() and segflush() on SG_PHYSICAL type segments

kernel: fix multiple devproc bugs and pid reuse issues

kernel: implement portable userinit() and simplify process creation

kernel: improve diagnostics by reversing the roles of Proc.parentpid and Proc.parent

kernel: improve page reclaimation strategy and locking

kernel: make sure we wont run into the tos when copying exec() arguments

kernel: remove relics of CPU ‘load balancing’ policy in scheduler (thanks Robert Ransom)

kernel: remove scheddump() comment for delay() in */fns.h

kernel: remove unused mem2bl() prototype

kernel: remove unused macro from chan.c

kernel: simplify exec()

pc, pc64: clear debug watchpoint registers on exec and exit

pc, pc64: do page attribute table (PAT) init early in cpuidentify()

pc, pc64: fix cputemp decimal handling in amd10temprd (thanks Robert Ransom)

pc, pc64: fix wrong mtrr physmask() for machines without extended address size msr

pc, pc64: ignore the 64-bit bar flag when reserving membar

pc, pc64: add new memory map code

pc, pc64: remove “got unassigned irq” prints

pc, pc64: use softscreen double buffering for *bootscreen= framebuffer

pc: fix ldt memory leak in procsetup()

pc: fix mp boot regression due mistake in mkfile

pc: replace duplicated and broken mmu flush code in vunmap()

pc: zero rampage() memory (thanks LordCreepity)

pc64: adapt vgaradeon driver to 64-bit (thanks Robert Ransom)

pc64: enable uartpci (thanks taw9 for testing)

pc64: remove rampage() nil check

ppc: remove old duplicate of devtls.c

mtx, ppc: use proctab() to index into process table

sd53c8xx: fix the driver for amd64, fix alignment/padding issues, fix freechain handling

sdiahci, sdodin: avoid calling kproc() while holding ilock()

sdiahci: force Hudson SATA Controller to AHCI mode

sdiahci: implement reset timeout for ahciencreset(), make blink() never block, fix map[] access in ledkproc()

usbehci: avoid kproc() while holding poll lock

usbehci: release ctlr ilock before calling pollcheck()

usbxhci: fix wrong control endpoint 0 output device context address

vgai81x: remove unused mach0 variable

xen: fix rebootcode linkage

nusb/audio: set frequency only when supported

nusb/kb: add quirks for Elecom HUGE trackball

nusb/usbd: cleanup processes on unmount

nusb/usbd: fix /env/usbbusy bug

nusb/usbd: fix portreset error handling


ape/cc: stop spamming arguments that are only needed once

cc, ?[acl]: fix gethunk() and move common memory allocator code to cc/compat

cc, ?a, ?l: change thunk type to uintptr

cc, ?l: fix gethunk() to actually grow allocation

cc: dont export gethunk(), hunk, nhunk and thunk

cc: get rid of hunk pointer fiddling and just use alloc()

cc: get rid of sprint() and temporary buffer for type conversion fuction

cc: remove mysbrk(), exponentially increase gethunk() allocation delta

cc: simplify macexpand() and off-by-one error

cc: fix ccom idempotency

cc: fix special case for null pointer constants in cond expressions

cpp: Improve the posix preprocessor.

cpp: Make priority array max size explicit.

cpp: copy all the tokens from the tokenrows with a paste.

cpp: dont overflow the stack

cpp: evaluate #if expressions using vlong

cpp: fix operator associativity

cpp: missing headers rate a FATAL.

6c: conserve registers for floating point operations

6c: remove mystery sys.c file

7l, ql: dont assume . is in the path for running mkcname (thanks sam-d)

7l: handle dupok flag in TEXT/GLOBL data

?a, ?c: fix macro debug prints

?a, cc: fix buffer overflows in built-in preprocessor (macbody)

?a: catch symb[NSYMB] buffer overflow in lexer, cleanup, assume thechar is a rune

?c: fix Bconv() misusage of strncat()

?c: get rid of sprint(), strcpy() and strcat()/strncat(), cleanup

?l: remove direct hunk manipulation from linkers, just call malloc()

[257]l: cleanup fmt routines, replace sprint()

qa: remove ALLOC() and ALLOCN() macros

vl: remove unused mysbrk() prototype

yacc: normalize error messages, stop writing to closed fd.

yacc: fix crash with absolute paths

yacc: stop fiddling with path construction.


ape: #pragma ref no longer exists

ape: Add stdbool.h to ape

ape: Fix scanf scans of more than one character in %[]

ape: add intmax_t/uintmax_t as required by c99

ape: add missing conversion flags for scanf

ape: add va_copy macro, conforming to c99

ape: bring stdint.h closer to spec

ape: fix alignment in malloc()

ape: fix name clash, have to use _SLEEP syscall instead of ape sleep in plan9 code (thanks jamos)

ape: fix scanf ‘%[]’ specifiers and ‘%n’ (thanks phil9)

ape: remove C99_SPRINTF_EXTENSION define.

ape: turn ptrdiff_t into a 64 bit type

ape: use #error when missing define

lib9p: fix re-use of root Qid when using createfile(); remove unused dirqidgen

lib9p: fix typo

lib9p: get rid of Srv.nopipe and Srv.leavefdsopen hacks

lib9p: implement automatic remove-on-close cleanup in postsharesrv(), remove postfd() and sharefd() functions

lib9p: reject reads on closed fids and writes on directories

lib9p: zero out per connection state in Srv template for listensrv()

libFLAC: 1.3.1 -> 1.3.3

libaml: implement ToDecimalString and ToHexString operations

libc: always zero initialize Tm structure for tm2sec()

libc/arm64: work around linker bug for cas()

libdraw: fix mount() error handling in newwindow()

libmemdraw: remove inexistent build targets

libsec/base58enc: null-terminate the result

libsec: move AES XTS function prototypes to AES definition section in the header file

libsec: remove hash pickle functions, document ripemd160, cleanup sechash(2) manpage


9fs: replace dead plan9.bell-labs.com with 9p.io server

“”: output previous action to stderr

acme, sam: handle >1GB files correctly

acme/Mail: show and update flags

acme/win: exit winfs once acme shuts down the window

acme/win: pass on flags to winfs (fix undocumented -e flag)

acme: Apply each -/+ only once (#156)

acme: Apply http://www.9paste.net/qrstuv/patch/acme-movetodelmesg/

acme: Reset click count on mouse motion.

acme: Restore call to movetodel() in colclose

acme: add missed error checks

acme: avoid division by zero when resizing col (#189)

acme: fix double free

acme: fix off by one in colclose(), make dellist() code consistent

acme: fix some memory leaks

acme: fix typo: mouse->xy, not w->mc.xy

acme: split win into winfs and rc script, get rid of lib9p leavefdsopen hack

acme: triple click selection

auth/disable, auth/enable, auth/status: add usage messages

aux/aout2uimage: Add a.out to uImage converter NEW

aux/getflags: improve flagfmt parser

aux/getflags: remove rogue debug print

aux/getflags: support named flags

aux/kbdfs: fix kbmapread() not accounting for reads smaller than the size of the line

aux/kbdfs: Changes to allow support for neo2 keyboard layout

aux/realemu: fix exit code

aux/realemu: run cpuproc in same fd group as fileserver

aux/timesync: open /proc/n/ctl with OWRITE, not ORDWR

awk: fix race condition with sub-mk in mkfile

awk: make empty FS unicodely-correct.

backup: Set execution bits in backup scripts

date: make ISO 8601 time output compatible to RFC3339

doctype: fix -T option

dossrv, 9660srv, hjfs: stop READING standard OUTPUT with -s flag

dossrv: fix falloc() for >31 bit sector numbers (thanks sl)

dossrv: output iotrack error message to stderr

dtracy: show line numbers in errors

file: add (very) basic support for detecting mpeg4 formats

file: try ismp4() before ismp3()

file: fix filetype detecton by suffix so that multiple dots dont confuse it. (thanks kvik)

g: walk arguments

games/playlistfs: open /proc/n/ctl OWRITE, not ORDWR

games/turtle: do exit instead of crash in redraw() when there where no lines drawn

games/linden: NEW

games/turtle: NEW

games/v8e: NEW

grep: error if sbrk fails

grep: fix handling of -b flag

hgfs: fix loadrevinfo() breakage on long lines using libbio (thanks deuterion)

hgfs: fix loadrevinfo() for empty log bug

hoc: don’t nest calls to follow() when lexing ++/+= and –/-= (#287)

ip/cifsd: implement SMB_SET_FILE_UNIX_BASIC for wstat

ip/cifsd: implement primitive per-share unix id mapping for wstat()

ip/dhcp6d: work around non-ethernet based client duid

ip/dhcpd: prevent client from increasing max reply size beyond the reply buffer capacity

ip/ipconfig: ignore default routes targeting ourselfs

ip/ipconfig: keep on sending router solicitation after initial RA

ip/ipconfig: resolve ipgw to an ip address as neccesary (thanks k0ga)

ip/tinc: accept udp connection from any udp source port

mothra: add Plumb menu item, and update man page. sl’s original changes sanity-checked by Ori_B.

mothra: (facelift) flat ui is in.

mothra: fix a few errors in previous patch

mothra: make user interface monochrome

mothra: remove extraneous lines and decoration (fake 3d). patch extracted from sl’s forked mess by Ori_B.

mothra: restore original fonts. dejavusans was sl’s change, sl’s fault. it never looked right outside of drawterm on osx (mea culpa). this is easy to change for anyone who prefers something else, but it’s difficult to imagine native users preferring our very fuzzy dejavusans to anything else.

ndb/dns: handle empty $DNSSERVER

paint: change colors in the palette with button 3

ramfs: don’t use Srv.nopipe

rc-httpd: append carriage return to content-length header

rc: fix code serialization for PIPEFD (thanks BurnZeZ)

rc: fix heredoc crash

rio, kbdfs: increase read buffer for high latency kbdfs support

rio: fix bug causing short reads of wctl files

rio: fix goodrect() bug (thanks mike)

rio: pad window status strings in wctl files

rio: triple click selection, reset click count on mouse motion.

sam: ^ does not need current file

sam: add $%dot (thanks kvik)

sam: Bump protocol version for Ttclick

sam: triple click selection

samterm: don’t scroll invisible (command) window (thanks umbraticus)

samterm: Make ctrl+g focus text windows and cycle zeroxed copies (thanks kvik)

samterm: fix typos in time calculation

seconds: hack around timezone issues.

sed: accept and ignore -E and -r flags for unix compatibility

sed: allow whitespace after ! negation (thanks k0ga)

sshfs: fix dir2attrib() memory leak in wstat error case (thanks BurnZeZ)

sshfs: fix race condition between sendproc() and recvproc()

sshnet: fix fork race conditions

tar: Add pax extended header support

tar: fix memory corruption in extract1 (thanks petter)

tar: Fix directory heuristic for long file names.

tar: Parse global pax header in the right place.

upas/fs: Fetch IMAP flags from server. This makes us sync read/answered/… flags with unix.

upas/fs: fix handling of numeric timezone offsets in strtotm

upas/fs: fix sending of “delete” plumb messages

upas/fs: imap fixes and improvements

upas/fs: only ensurecache() on doplumb().

upas/fs: plumb flag changes.

upas/fs: plumb modify messages for self-changed flags

upas/fs: remove useless loop in rf822()

upas/fs: Check if ’m' is null when updating messages.

upas/fs: fix ref882 reference parsing.

upas/fs: fix typo: we don’t have cache insurance.

upas/fs: simplify flag parsing.

upas/marshal: fix printinreplyto function

vt: triple-click to select non-whitespace segment

walk: add D and T fmt characters (fileserver device/type)

walk: remove superfluous newline

Mail: Remove reply print.

Mail: delete obsolete comments (replies are flagged elsewhere)

Mail: show urls in html messages.


acme(1): fix scrolling when swiping text at the top or bottom of a frame

atari(1), nintendo(1), sega(1): document common emulator keys

crop(1): remove duplicate -b option in synopsis

listen(1): implement one-shot mode flag for listen1 (thanks kivik)

mail(1): fix typo

mothra(1): add description of Plumb menu item.

os(1): add c implementation of inferno os command and cmd(3) device manpages

page(1): fix troff manual example

sam(1): document $% and $%dot

seconds(1): add SOURCE section

tar(1): document ’T' flag misbehavior (thanks rgl)

vac(1): assimilate manpage additions from plan9port and complete usage lines (thanks joe9)

walk(1): formatting/corrections

dial(2): we prefer nil over 0, make the example show it.

draw(2): fix manpage typo (thanks rgl)

flate(2): fix typos (thanks rgl)

9p(2): document all the effective rfork flags for postmountsrv()

9p(2): document the filedescriptor sharing behaviour of postmountsrv()

9p(2): fix sentence for wstat function (thanks jsmoody)

notify(2): fix typo

thread(2): fix description of when/why procexec(l) functions return

thread(2): fix manpage typos (thanks rgl)

cmd(3): fix typo, Close -> Closed (thanks kivik)

draw(3): typo dp

ip(3): document special null-address hack for accepting all incoming connections

ip(3): remove outdated maximum ipstack number limit.

kbd(3): fix a typo (thanks Alex Musolino)

rio(4): fix bad cross-reference format

rio(4): update description of wctl file format

upasfs(4): fix manpage typo (thanks rgl)

image(6): fix typo

9boot(8): Document 9bootfat limitation.

boot(8): Specifiy the restrictions on 9boot file names more clearly.

console(8): add console command and manpage

man(9): add start of section 9 manpages (thanks rgl) NEW

delay(9): improve language

kproc(9) and sleep(9) corrections

sleep(9): recover comment with the right reference


/lib/face: add .dict entries for andrew.1 face files

/sys/lib/kbmap: update 0xf860 to Kshift value, fix fake shifts on esc1

/sys/lib/kbmap/colemak: add colemak keymap (thanks Silas McCroskey)

/sys/lib/kbmap/sg: add swiss german kbmap (thanks mike)

/sys/lib/plumb/basic: open nedmail windows with -noscroll

/sys/lib/plumb/basic: include section 9 in manpage plumb rules.

fortunes: As much as I’d love to I feel I have to let it go – rminnich

hgignore: ignore section 9 manpage indices, ignore init, kernels and bootloader binaries

riostart: when system uses serial console, provide a system shell on it

timezones: change DST timezone string for South Australia

tmac.eai: wrapper around -me: auto indexing sections, .TC macro (thanks sirjofri)

troff: add missing /sys/lib/tmac/me files (thanks sirjofri)

words: transgender



front (v1)






dash 1 and man pages in print: http://9front.org/propaganda/books

THANKS: momus


kernel: catch execution read fault on SG_NOEXEC segment

kernel: clear FPillegal in pexit() and before pprint()

kernel: expose no execute bit to portable mmu code as SG_NOEXEC / PTENOEXEC, add PTECACHED bits

kernel: get rid of tmperrbuf and use syserrstr swapping instead in namec()

kernel: make exec clear errstr, stop side-channels and truncate on utf8 boundary

kernel: make user stack segment non-executable

kernel: move common ethermii to port/

kernel: prohibit changing cache attributes (SG_CACHED|SG_DEVICE) in segattach(), set SG_RONLY in data2txt()

kernel: simplify pgrpnote(); moving the note string copying to procwrite()

bcm, kw, omap, teg2: implement setregisters()

bcm: add cache invalidate before accessing prop buffer

bcm: fix typo in gpio.c on unused AFedge0 constant

bcm: flush out early boot messages on uart and screen initialization

bcm: invalidate cache on Fbinfo after firmware completion

bcm: set XN bits for kernel device mappings

bcm64: add addarchfile() prototype to fns.h (for qeed)

bcm64: add config for raspberry pi 4

bcm64: add driver for emmc2 controller

bcm64: add gic interrupt controller driver for raspberry pi 4

bcm64: add gisb arbiter driver to catch bus timeouts

bcm64: add pci express driver for raspberry pi 4

bcm64: add support for more than 1GB of ram (untested)

bcm64: deal with discontinuous memory regions, avoid virtual memory aliasing, implement vmap() proper

bcm64: do not use OTP_BOOTMODE_REG to determine OSC frequency (thanks richard miller)

bcm64: enable devgpio in kernel configuration (thanks qeed)

bcm64: enter page tables in mmutop AFTER switching asid in mmuswitch()

bcm64: fix mmu0clear() mistake from previous commit

bcm64: fix wrong prescaler for generic timer on rpi4

bcm64: generalize mmu code

bcm64: implement dtracy support

bcm64: implement reboot support

bcm64: no need to flush instruction cache when switching TTBR0

bcm64: poll gisb arbiter for asynchronous bus errors

bcm64: remove unneccesary tlb flush on mmuidmap()

bcm64: reorganize virtual memory map for rapberry pi4

bcm64: replace emmc2 driver with richard millers sdhc driver

bcm64: set XN bits for kernel device mappings

bcm64: strip debug symbols to make sure .img file is multiple of 4 bytes

bcm64: switch to 64k page size

bcm64: update io.h for pci express and raspberry pi 4

bcm64: work in progress genet ethernet driver for raspberry pi 4

bcm, bcm64: add BCM2711 support for gpiopull(), fix gpiomeminit(), cleanup

bcm, bcm64: add dmaflush() function and make virtio size and virtual address configurable in Soc.virtio and Soc.iosize

bcm, bcm64: add support for device tree parameter passing

bcm, bcm64: add vcore support for raspberry pi 3 GPIO expander

bcm, bcm64: clean dma destination buffer before issuing dma in case of non cache-line-size aligned buffer

bcm, bcm64: fix cache operations for dma and emmc

bcm, bcm64: make irq.$O optional and add intrdisable(), use intrenable()

bcm, bcm64: preserve memsize across reboots, avoid trashing atags while parsing cmdline

devdtracy: make machlocks and dtktab static

devip: fix permission checking

devip: if the server does not support TCP ws option, disable window scaling (thanks joe9)

devproc: fix fishy locking in proctext(), check proc validity, static functions

devproc: move proctab() call after Qnotepg special case in procwrite()

devproc: restore psstate info string in procstopwait()

devuart: make sure uart is enabled in uartkick()

ethergenet: fix flow control negotiation

ethergenet: remove debugging

emmc: 50MHz highspeed support (from richard miller)

pc: move low-level allocation details out of mmu.c into memory.c rampage() function

pc64: fix compiler warning in rebootjump() entry calculation

pc64: implement NX bit discovery, map kernel mappings no-execute

pc64: map kernel text readonly and everything else no-execute

pc64: preallocate mmupool page tables

sdide: silence compiler warning in atadebug()

usbehci: introduce dmaflush() function to handle portable cache invalidation for device drivers

usbehci: silence “param declared but not used” compiler warning in itdinit()/sitdinit()

usbxhci: fix mysterious ENABLESLOT failures (update to XHCI spec revision 1.2 (2019))

usbxhci: implement portable dma flush operations and move to port/

usbxhci: fix endpoint stall recovery, handle Ep.clrhalt flag

vgai81x: use vmap() for uncached access to cursor data instead of manipulating kernel page table


7l: don’t hardcode 4k pagesize, use INITRND

8c, 6c: LEA x, R; MOV ®, R -> MOV x, R

8c, 6c: avoid allocating index registers when we don’t have to

8c, 6c: fix INDEX node #reg calculation

8c: skip 64-bit regpair allocation for OINDEX nodes in cgen64()

8l, 6l: fix “unknown relation: TEXT” xfol() bug (thanks mischief)

cc: fix void cast crash

cc: remove nullwarn() from OCAST codegen, zap void casts

cc: use 7 octal digits for 21 bit runes

cc: Allow address expressions in ?c after int casts.

cc: Import compiler warnings and bugfixes from Charles.

acid/kernel: fix procstk() for arm64, set kdir for arm/arm64 to bcm/bcm64

acid/kernel: for stacktraces, try to use context from error stack when process is not sleeping


ape: Add mkstemp to /sys/src/ape/lib/ap/gen/mkfile

ape: don’t hardcode list of ape library directories in /sys/src/ape/lib/mkfile

ape: fix stdio putc() macro, avoiding “result of operation not used” warning

ape: reimplement rename() - fixing compiler warnings and handling more error cases

ape: revert rename() change

ape: Include integer limits from generic stdint.h in system-specific stdint.h

ape: Add missing UINTsz_MIN defines to ape stdint.h

ape: Add test for pow.c

ape: Add toascii()

ape: Handle NaN and Inf edge cases as specified by posix, instead of barfing.

ape: Turn on warnings when building libap.

ape: Add mkstemp to stdlib.h

lib9p: fix listensrv() filedescriptor leaks

libauth: do not set errstr in auth_rpc() for ARdone result (thanks majiru)

libflac: Tell it that we have stdint.h so it finds SIZE_MAX

libstdio: fix putc(), plan9 version

libventi: define VtEntryNoArchive constant

libventi: implement vtreconn and vtredial functions

libventi: implement vtsha1 and vtsha1check functions


ape/cc: Add arm64 and remove alpha, add spim

awk: no need to call getargv() twice to get the value for FILENAME

cwfs: fix listen filedescriptor leaks

date: Add RFC2822 (email style) formatted dates

g: Make it grep recursively by default.

auth/rsa2asn1: implement private key export with -a flag (thanks kvik)

snoopy: add support for dhcp classless static routes option

snoopy: avoid extra spaces in dhcp filter output

snoopy: include dhcp.h instead of replicating bootp/dhcp options enum

ssh: work around github.com’s broken cipher negotiation code (thanks Ori_B)

cmd/ip/*: chown the network connection after authentication

cwfs: fix root access time qid path comparison

cwfs: properly handle 64 bit qid path

cwfs: remove old some assert() debugging

cwfs: remove orphaned lrand.c

disk/format: implement long name support

file: recognise unified diff output

gs: apply fixes for CVE-2018-16509 (thanks jsmoody)

gs: apply mitigations against CVE-2017-8291 (thanks jsmoody)

gs: fix missing type check in ztype (thanks jsmoody)

ip/cifsd: add basic support for UNIX extensions

ip/cifsd: dont return garbage in upper 32 bit of unix extension stat fields

ip/cifsd: exit to close connection when we get malformed smb header (fixes linux mount hang)

ip/ipconfig: don’t leave behind null address when dhcp gets interrupted

ndb/dnsquery, ndb/csquery: write “>” prompt to stderr (thanks kvik)

pcc: Always turn on the -+ flag in cpp

plumber: loop will go out of bounds when *++s == ‘\0’; replace with strstr

rc-httpd: avoid duplicate log output in dir-index handler

rc-httpd: only emit charset option for text/plain content type

rc-httpd: serve markdown with text/plain content-type

rc-httpd: set charset=utf-8 for all text/* content types

sshfs: use threadexits() instead of exits()

upas/fs: remove read timeout via alarm(2) in pop3resp

upas/fs: speedup mtree and henter()

upas/smtp: handle temporary authentication failures

vmx: handle build arch exclude in /sys/src/cmd/mkfile

vncv: fix snarf buffer realloc memory corruption


2c(1): document 7c (arm64)

draw(3): memlorigin

nusb(2): remove startdevs() reference, document getdev() (thanks BurnZeZ)

rsa(2): document asn1encodeRSApriv() and asn1encodeRSApub() functions

rune(2): complete source references

sshnet(4): … and incoming TCP calls

tinc(8): add history section

vmx(1): update BUGS

walk(1): add history section


/sys/lib/dist/mkfile: adjust 2GB for pi3 and zynq img

/sys/lib/dist/mkfile: storage vendors idea of 2GB is deflating

/sys/src/cmd/mkfile: fix PCONLY exclude (thanks stefan)

/sys/src/boot/bcm/mkfile: add missing device tree file for raspberry pi 4

/sys/src/boot/bcm/mkfile: add raspberry pi 4 kernel and bootloader to pi3.img target

bootrc: remount devip after /dev/hostowner has been written by factotum

bootrc: unmount devip before starting factotum

mkone: fix man target (thanks Amavect)



Stun a burglar by hurling one volume after another at the unsuspecting intruder. Stun yourself by actually learning something. Sell them later at a profit.



The usual suspect. An overview of what the fuck just happened today, Re: 9front.

Online: http://fqa.9front.org

Print: https://amzn.to/2Qg0v92



The standard, venerable man pages, divided into eight sections. The rainbow books, each with a different color border drawn from the paint(1) palette. Verified complete. It’s a good idea to read them all.

Online: http://man.9front.org


V1: https://amzn.to/2YgpRqc

V2: https://amzn.to/2J46iuV

V3: https://amzn.to/2XoGmna

V4: https://amzn.to/2J6mTyx

V5: https://amzn.to/2WW2RQO

V6: https://amzn.to/2WYgSxm

V7: https://amzn.to/2xagwEQ

V8: https://amzn.to/2XBY7j7


front (v1)



Online: http://fqa.9front.org/dash1.skinofevil.pdf

Print: http://9front.org/propaganda/books

THANKS: miron lukyanov


bootrc: add nora6= option to disable automatic ipv6 configuration

bootrc: handle automatic ip configuration on gbe media

bootrc: fix $rootdir and $rootspec handling (thanks lucio)

kernel: exec support for arm64 binaries

kernel: export freepages() function so it can be used in mmurelease()

kernel: get rid of TSTKTOP, USTKTOP is the end of user address space

kernel: get rid of KSTKSIZE alias for KSTACK

kernel: get rid of PTR2UINT() and UINT2PTR() macros

kernel: get rid of checkpagerefs() debugging

kernel: include lock pointer in error report, stop spamming lockloop prints when we are panicing

kernel: insert memory barrier in the scheduler before setting up->mach = nil

kernel: remove ptclbsum dependencies from configs

ktrace: arm64 support

qio: handle common case in trimblock()

bcm: add pl011 uart driver, dont touch line control while uart is enabled

bcm: don’t call nil on PADDR() in dmaaddr(), return busdram dummy address

bcm: don’t use PADDR() to convert bus address to physical in vcore

bcm: dont assume PHYSDRAM 0 in dmaaddr(), fix dmaioaddr()

bcm: include sdmmc in pi kernel configuration

bcm: list devswap only once in devtab array

bcm: move CONFADDR parsing into bootargs.c, simplify initcode start() args handling

bcm: move fiq saved pc adjust into lexception.s so it can be shared with arm64

bcm: move interrupt handling out of trap.c into irq.c, add irq.c to mkfile

bcm: move okay() from uartmini.c to devarch.c

bcm: make sure fiq is on enabled on cpu0

bcm64: add experimental work in progress arm64 kernel for raspberry pi 3

bcm64: get rid of usb workaround delay

bcm64: map framebuffer write-through to allow unaligned access

bcm64: provide idlehands() function

bcm64: use MOVP instruction for saving and restoring registers

bcm64: use exclusive monitor on nrdy to wake up idlehands()

pc, pc64: fix %.*s format in multibootargs

pc, pc64: properly track dependencies for mem.h on autogenerated apbootstrap.h and reboot.h targets

pc, pc64: pci: add AMD FCH LPC bridge to southbridges

pc, pc64: devarch: recognize AMD Ryzen model

pc64: properly handle faulterror in faultamd64()

devdraw: get rid of softscreen==0xa110c hack and make attachscreen() return Memdata*

devdraw: simplify drawgen()

devip: fix block list handling for icmp/icmp6, use proper MinAdvise for icmp6

devip: fix fragment forwarding

devip: fix ip fragmentation handling issues with header options

devip: handle packet too big advise for icmp6, remove fragment header

devip: ignore icmp advise about laggard fragments

devip: ignore reserved fragment offset bits

devip: ignore the evil bit in fragment info field

devip: ipv6 loopback ::1 has link-local scope

devip: reject bad numeric ports (such as 9fs -> 9)

devip: remove unused eipconvtet.c and ptclbsum.c files

devip: simplify ip reassembly functions, getting rid of Ipfrag.hlen

devip: tcp: Don’t respond to FIN-less ACKs during TIME-WAIT (thanks Barret Rhoden)

devip: use common code in icmp for handling advise

devip: use parseipandmask() for ipifc and route control message parsing

devip: zero fragment offset after reassembly, remove tos magic, cleanup

devip: avoid media bind/unbind kproc reader startup race, simplify etherbind

devip: do not lock selftab in ipselftabread(), remove unused fields from Ipself

devip: make sure ifc is bound in add6 ctl command

devip: remove unused c->car qlock, avoid potential deadlock in ipifcregisterproxy()

devip: reset speed and delay on bind, adjust burst on mtu change, ifc->m nil check, consistent error strings

devsd: fix panic when using “delpart” to remove a partition that was already removed

devswap: simplify, don’t panic when writing swapfile fails

devtls: remove static “already” flag in tlsinit(). this function is only run once.

audiohda: add support for Gemini-Lake audio in Intel NUC nuc7pjyh (thanks sam-d)

audiohda: recognize AMD Family 17h hd audio controller

ether8169: fix thinkpad A485 ethernet (thanks mischief)

ether82563, ether82598, etherx550: round rbsz to multiple of 1K

ether82563: fix bogus FCA write and link detection for i217

ether82563: use 9018 byte mtu from datasheet for i217, i218, i219

ether82563: work around spurious jumbo packets on i217 (thanks k0ga)

ether82598: fix multicast filter (thanks aiju, joe9)

etherx550: add intel 10GB ethernet controlller x550 driver (thanks joe9)

igfx: add support for 915gm

nusb/audio: fix %.*s format usage

nusb/disk: implement 64 bit lba read/write commands (16 byte commands)

nusb/disk: don’t unnecessarily unstall devices.

nusb/kb: fix continuous scrollwheel delta not being reported (thanks sam-d)

nusb/usbd: fix dump %U formatter

nusb/usbd: stop sending port enable commands

nusb/usbd: work around devices that ignore the high byte of wLength in control transfer reads

nusbrc: detect “keyboardio model 01”, appears as multifunction device with IAD csp(0102EF) (thanks sam-d)

usbdwc: enable Slowbuilkin workarround, improve split transaction timing, handle erroring sleep(), debugging

usbxhci: make stuck usb transactions interruptible.

wifi: fix %.*s format in wifictl


7c: add arm64 c compiler and assembler (thanks Charles Forsyth)

7a: fix indexreg operations, fix post increment operands

7c: don’t emit SXTW for non-register source operand

7c: fix long to vlong/pointer conversion, avoid negative immediate offsets

7c: fix registerization of vlong constants

7l: add arm64 linker from Charles Forsyth (initial sync)

7l: add missing AFMOVD with EXT/AUTO/LOREG operands to optab

7l: deal with huge (negative or > 24bit) register offsets, fix LACON, avoid DWORD in constant pool when we can sign extend

7l: fix bitcon instruction selection and encoding

7l: fix vlong constants in literal pool for non-MOV instructions

7l: there’s no BIC* $bimm variant

7l: implement MOVP instruction

5c: dont substitute (destination) registers contained in MOVM reglist

[5678vq]c: fix .safe node type for FUNC() = FUNC() sugen

cc: fix %.*s format usage in lexer “token too long” error

acid: add arm64 support

dtracy: avoid dmachlock() race

dtracy: avoid pointer to integer truncation warning on amd64

dtracy: fix &&

dtracy: fix conditional branch generation


ape: initial support for arm64

ape: fix malloc to deal with more than 4GB of memory on 64 bit systems

lib9p: fix zero msize abort() due to unknown version (thanks kvik)

libauthsrv: authdial smprint() out of memory autism

libc: Sand edges down on GBIT64()/PBIT64() macros.

libc: initial arm64 support

libc: fix NaN check precedence bug in modf() (thanks BurnZeZ)

libc: provide arm64 assembly versions for memmove() and memset()

libc: use MOVP instruction for arm64 memmove() and memset()

libip: don’t reject ipmask in v6 form for v4 address

libip: move optimized 386 assembly version of ptclbsum() from kernel to libip

libip: prefer v4 over v6 for myipaddr()

libip: replace v4parsecidr() with new parseipandmask()

libip: return -1 in parseipmask() and parseipandmask() when mask is not ipv4 and v4 argument was set

libmach: initial arm64 support

libmach: support for MOVP instruction disassembly for arm64

libmemdraw: handle memarc() phi == 0 and phi <= -360, keep alpha in bounds

libmemdraw: remove static Point p00 and use ZP instead

libmp: add dummy mkfile for arm64

libndb: provide parseipmask() v4 argument in subnet(), use snprint() instead of sprint()

libpanel: fix %.*s format in pl_snarfentry()

libsec: dummy mkfile for arm64

libthread: initial support for arm64


abaco: fix %.*s format in findctype()

atazz: fix %.*s format in special command processing

aux/depend: fix %.*s format in path concatenation

aux/statusmsg: fix %.*s format

aux/wpa: fix %.*s format in debug prints

awk: fix nextfile crash (thanks leetspete)

cifs: fix pruning of . and .. directory entries (thanks steve simon)

cwfs: fix %.*s format in cmd_printconf()

dossrv: make GLONG() return ulong, handle getsect() error in dostat()

dossrv: use 64 bit vlong for sectors

gs: arm64 support

gs: avoid stupid shifts by casting to uint64_t

hgfs: fix %.*s usage in walk

ip/6in4: use parseipandmask(), use ipvmp() instead of equivip6()

ip/ayiya: use parseipandmask(), use ipvmp() instead of equivip6()

ip/cifsd: fix %.*s format xdirflush() path

ip/dhcpd: add rootserverip read in lookupip() (thanks k0ga)

ip/dhcpd: change swap to rootserver (thanks k0ga)

ip/dhcpd: provide v4 argument for parseipmask()

ip/dhcpd: remove undocumented dhcpgroup mechanism, group related ndb attributes together

ip/dhcpd: send vendor ndb attribute if available (thanks k0ga)

ip/ipconfig, ndb/dns, libndb: handle parseipmask() errors

ip/ipconfig: format ipmask with %M instead of %I

ip/ipconfig: use defaults for loopback

ip/ipconfig: use ewrite() to enable routing command for sendra

ip/ipconfig: use new parseipandmask() function

ip/ppp: fix %.*s format in debug print

ip/pppoe: fix %.*s format in debug prints

ip/rip: use new parseipandmask() function

ip/socksd: fix %.*s format in dialstring

ip/tftpd: fix %.*s format for homedir path

ip/tinc: 4096 bit RSA, (passive) pmtu discovery, fix udpfd close() race, cleanup

ip/tinc: fix mistake from previous commit

ip/tinc: honor TcpOnly and IndirectData settings, script support, prefer incoming udp connections

ip/tinc: use new parseipandmask() to parse subnets, use ipcmp()/ipmove(), remove prefixlen

ip/torrent: fix %.*s format in dialstring

ip/torrent: avoid trying to fetch blocks past file

mk: fix closing random fd from uninitialized stack variable (thanks BurnZeZ, mycroftiv)

ndb/dns: provide v4 argument to parseipmask(), use snprint() instead of sprint()

postscript: use PI

python: arm64 support

python: clean and nuke pgen and libpython.a for all $CPUS

python: remove /$objtype/lib/ape/libpython.a, track graminit.h dependencies, remove graminit.c

ratfs: implement ipv6 support, replace v4parsecidr() with parseipandmask()

rc: clear out redirections on “rfork F” (RFCFDG)

ssh: add experimental mux mode

ssh: don’t assume error messages are ASCII. format number of complete runes, not bytes.

ssh: implement -W option for making remote tcp connections

ssh: print usage for unknown flags, cleanup

sshnet: actually make sure ssh established connection before exiting main proc

sshnet: allow 0 port

sshnet: bring back sshnet using ssh(1) mux mode

sshnet: don’t leak “Dialing” connections when “connect” ctl write gets interrupted

sshnet: don’t leak error string

sshnet: fix eof and close handling, use proper packet size, cleanup

sshnet: fix memory leak

sshnet: fix write count for ctl message writes

sshnet: get rid of Announced state, simplify

sshnet: implement listen (port forwarding)

sshnet: pass on open failure error message, simplify

sshnet: reduce memory consumption by lowering stack sizes

tcs: clean up old port code, and avoid writing 0 to stdout

troff: fix -ms mug (thanks aksr)

upas/fs: don’t put messages on the lru that cannot be uncached

upas/fs: fix %.*s format usage

upas/fs: fix infinite loop in putcache (again)

upas/fs: include mkupas in mkfile last to get default target

upas/fs: release mailbox syncing lock after encountering error

upas/fs: remove unused function pop3log

upas/ned: fix %.*s format in parsesearch(), improve mkfile

upas/scanmail: fix %.*s format in xprint(), improve mkfile

upas/smtp: fix %.*s format for challenge in smtpcram()

upas/smtpd: implement ipv6 support for ip blacklist, replace v4parsecidr() with parseipandmask()

uptime: rewrite in awk

vmx: build vmx only for 386 or amd64

vmx: check for draw initialization errors

vt: dont make fs procs hang around when closing rio window

vt: fix %.*s in sendnchars()

walk: remove unused depth argument from dofile()

wadfs: avoid comma operator after PBIT32() macros

webfs: bracket literal ipv6 host in “Host:” header

webfs: properly handle %.*s in url path and debug prints

front (programmer's manual)


dhcpd(8), ndb(6): group related ndb attributes together

dhcpd(8), ndb(6): update documentation (thanks k0ga)

dtracy(1): fix print(2) reference

ip(3): document TCP ctl close command

mach(2): fix byteswapping function signatures

memdraw(2): remove references to iprint()

plan9.ini(8): add USB section, documenting various usb options

plan9.ini(8), boot(8): clarify the use of $rootdir and $rootspec

rsa(8): add example for tinc(8) (thanks k0ga, qwx)

segment(3): use bind -c in examples (thanks henesy)

ssh(1): add sshnet(4) reference

sshnet(4): add documentation

sshnet(4): fix user@host syntax, add BUGS section, add ip(3) reference

thread(2): threadsetname takes a fmt string

added walk(1)


arm64: add mkfile

/sys/lib/plumb/basic: make plumbing page bookmarks work with relative paths (thanks Tobias Heinicke)

fix DST begin/end timestamps for South Australia

fortunes: Open source may not be safe if it has no super excellent moderator.

inst/startether: skip ipv6 auto configuration when nora6 was specified

dist/mkfile: aux/stub -d /n/src9/usr to avoid overbinding /usr in case /n/src9 an / alias

dist/mkfile: add *.pi3.img target for ARM64 raspberry pi3

distproto: add /lib/ndb/dhcp/ and /lib/news/ directory (thanks lyndon)

rootstub: add /sys/lib/dist/ndb/dhcp/

rootstub: create arm and mips directories in /usr/glenda/bin (thanks timclassic)

rootstub: create arm64 directories

vgadb: add t43p 1600x1200 panel entry

lib: update pci database

timezones: add India (thanks joe9)









THANKS: to aiju for cover assistance


9boot: get rid of 64 byte line length limit

9boot: don’t let user erase the prompt (thanks mischief)

bootrc: NEW experimental reboot method to load another kernel

bootrc: remove $ff references (was old parsed /boot/boot argument list)

kernel: change peek to return number of characters left rather than 0/-1

kernel: fix allocb for BLOCKALIGN*2 >= Hdrspc

kernel: fix livelock in rebalance (thanks Richard Miller)

kernel: fix tprof on multiprocessor

kernel: remove unused static variable “sofar” from timerintr() (thanks mischief)

kernel: sync two longjmp fixes from drawterm

bcm: NEW import changes for raspi2/3 from richard miller

bcm: cleanup timer and clock code

bcm: fix /dev/reboot text/data corruption (thanks richard miller)

bcm: fix l2 cache maintenance routines for raspi3 (armv8)

bcm: fix mysterious core clock resets under SMP (thanks richard miller)

bcm: intrenable() can happen from any cpu in case of dma interrupts

bcm: provide /dev/cputemp in a format stats can understand

bcm: simplify irq handling by having per cpu Vctl chain

bcm: simplify reboot code

bcm: speed up co-processor operations by avoiding i+d cache flush on each operation

pc, pc64: add pcienable() and pcidisable() functions

pc, pc64: increase CONFADDR buffer from 4K to 24K

pc, pc64: park application processors in rebootcode with mmu off

pc drivers: use pcienable() to handle device power up and missing initialization

devbridge: fix runt packets going through the bridge (thanks cinap)

devip, ipconfig: avoid overflow on lifetime checks

devip: fix arpread, dont return partial entries

devip: fix default parameter calculation for router life-time

devip: fix swapped tcp snd.scale and recv.scale in tcpstate() format (thanks joe9)

devip: make updating ra6 router parameters atomic

devip: only add interface route for “on-link” prefixes

devip: remove unused QLock from udp and icmpv6 control blocks (thanks brho)

devip: valid and prefered life-time should be unsigned, add remove6 ctl command

devuart: don’t sleep in uartdrainoutput() when called splhi or without a process

devusb: use Enotconf[] string constant

devvmx: remove bogus . direntry

ether82563: ignore i82753 checksums, fixes T60 ethernet

ether82598: fix multicast filter (thanks aiju, joe9)

etherx550: NEW intel 10GB ethernet controlller x550 driver (thanks joe9)

etheriwl: NEW Centrino Wireless-N 1030 (thanks lksmk from brazil)

etheriwl: NEW support type 2000 devices and the 2200 chip in x230t

mtx, ppc: remove cistrcmp() and cistrncmp() redefinition

nusb/disk: also drive usb attached scsi devices

nusb/disk: implement 64 bit lba read/write commands (16 byte commands)

nusb/disk: dont issue capacity command when theres no media present

nusb/ether: NEW support for lan78xx (raspi3) (thanks richard miller)

nusb/ether: tune buffer size parameters for SMSC ethernet (raspi) (thanks richard miller)

nusb/joy: send magic packet to enable playstation controller events

nusb/joy: update misleading comment (thanks Tobias Heinecke)

nusb/kb: lilu dallas multitouch

nusb/kb: multitouch support (touchscreens, stylus)

nusb/kb: work arround broken split transaction on raspi’s dwc otg usb controller

nusb/serial: NEW support for CH340 serial converter

nusb/serial: fix wrong guard statement (thanks deuteron)

nusbrc: support for raspi3 ethernet

nusbrc: prevent nusb/kb from attaching to sony ps3 controller

usbehci, usbxhci: add noehcihandoff= and noxhcihandoff= parameters

usbxhci: delay after reset, preserve reserved bits in legacy status control register in handoff()

usbxhci: only clear RW1C bits when set.


5e: byte access incorrectly checked for long; brk has to round up addresses

5i ki qi vi: avoid buffer overflow in command read loop

ape/make: fix \ line continuation parsing

acid: fix transcript

cc: fix wrong “useless or misleading comparison” warning

dtracy: add support for aggregations

dtracy: avoid pointer to integer truncation warning on amd64

dtracy: call dtptrigger with a struct pointer rather than a list of arguments; put return value in arg9

dtracy: catch page faults

dtracy: fix lexer bug

dtracy: get rid of DTName struct, support more than three parts in a probe name, wildcard matching

dtracy: missing break in dteverify

kencc: make “function not declared” a warning unless compiling with -T

kencc: turn “function args not checked” warning into “function not declared” error if appropriate

kprof: fix precedence (thanks geoff)

snap: add debug flag, make debug less verbose

snap: be more conservative taking stack snapshot

snap: check for overflows, cleanup error handling

snap: consequently use ulong for page index and count

snap: use Mach->szaddr as the width of the stack pointer (fixes snap on amd64)


ape: declare gethostname

audio/libogg: sync to ogg v1.3.3

libaml: allow amlmapio() to re-enter the interpreter (can happen by pciadd() -> amleval())

libc: NEW procsetname()

libc: NEW utf2idn() and idn2utf() functions to deal with internationalized domain names

libc: return number of bytes produced for idn2utf() and utf2idn()

libdisk: catch null bytes in proto file, fix memory leaks

libdisk: check for proper line termination in proto file parser

libdraw: avoid deadlock for mouse ioproc sending on resizec

libdraw: fix gengetwindow()

libdtracy: wrong operator in XORI (thanks aiju)

libhtml: increase Nestmax to render some convoluted pages (thanks fernan)

libmach: change amd64 szreg to 8 (thanks charles forsyth)

libmp: add tests for integer conversions

libmp: mptov: make it actually work

libmp: declare mpfactorial

libmp: fix mptouv behaviour to match mptoui

libndb: add missing ndbdedup.c

libndb: make ndbipinfo() walk ipnet for all matching entries, concatenate and dedup result

libsec: fix memory leak in pkcs1_decrypt()

libttf: add SHZ[] instruction

libttf: dont unset LOOP in SHC

libttf: fix swapped argument in vscan()…

libttf: instruction 0x24 is DEPTH, not CLEAR

libttf: SHZ also uses 0x36


awk(1): fix append operator to avoid truncating file

acme: fix fd checks - initialize Window.rdselfd to -1 not 0

cfs: close mount half of pipe, fixes cfs not exiting when unmounted

cwfs: Disallow ‘/’ in file names.

disk/mkfs: remove unused cputype variable (thanks kvik)

dnstcp: temporarily switch on resolver mode so we can resolve the dnsslaves for axfr check

dossrv: use 64 bit vlong for sectors

dossrv: make GLONG() return ulong, handle getsect() error in dostat()

dossrv: cleanup

factotum: rsa: use mptober() to get right adjusted result instead of mptobe() and memset()

forp: change indexing to verilog-like semantics

fplot: add min/max operators

fplot: add support for readout with middle mouse button

fplot: color different curves

fplot: compute y range correctly when used with multiple graphs

fplot: fix operator associativity

games/blit: clean up cpu.c and make it pass tests

games/c64: make keyboard table more readable

games/doom: fix music for patch wads

games/gb: when the LCD is turned off, reset ppuy and ppustate to 0, fixes bug in dragon warriors iii reported by mischief

games/md: use cpu.c from blit

hget: do a HEAD request to check if the file is already complete (thanks miscief)

hgwebfs: read to eof by default to match urllib2 behavior

hgwebfs: write headers individually, so they are not limited by webfs iounit (thanks mischief)

ndb/dns: avoid format strings in procname

ndb/dns: do recursive lookup for dnsslave=

ndb/dns: fix format print warning for procsetname(), cleanup

ndb/dns: send_notify() to multiple ip addresses in parallel, filter myip()

ndb/dns: use libc’s new idn functions

ndb/dns: use nil for pointers in dnresolve() args

ndb/dnstcp: only lookup the expected address type in findserver()

ndb/dnstcp: restrict DNS zone transfers to clients listed as dnsslave=

ndb/dnstcp: return a proper non-answer when rejecting zone transfer

ndb/inform: handle internationalized domain names

netaudit: handle multiple ip addresses

ip/dhcp6d: handle internationalized domain names

ip/dhcpd, ip/tftpd: change default for tftp homedir to /

ip/dhcpd: Add swap server support in dhcpd (thanks k0ga)

ip/dhcpd: handle internationalized domain names

ip/dhcpd: implement rfc3397 dhcp search domain option (dnsdomain)

ip/ipconfig: default onlink and autoflag to 1

ip/ipconfig: handle internationalized domain names

ip/ipconfig: handle noconfig flag for router advertisement, add debug prints, cleanup

ip/ipconfig: implement rfc3397 dhcp dns search option (dnsdomain)

ip/ipconfig: increase maximum host and domainname size to 255 bytes. idn for -h option

ip/ipconfig: remove expired default routes on router advertisement

ip/ipconfig: silently ignore prefix information with Autonomous flag clear

ip/ipconfig: valid lifetime is in seconds, not milliseconds.

ip/tftpd: remove sunkernel hack

kbdfs: don’t get confused by broken utf8

pc: reference counting bug

plumber: fix memory and filedescriptor leaks (thanks BurnZeZ)

python: explicitly declare WaitForThreadShutdown as void

rc: ignore $cdpath for # device rooted paths (thanks kivik)

rc: implement $“x in terms of Xdol() and new Xqw() instruction

rc: skip searchpath for “”, “.” and “..”

rc: use searchpath() logic to handle $cdpath

rcpu: fix pvar to initialize empty variables (thanks mycroftiv)

rio: get rid of window delete thread, fix mysterious disappearing windows

sed: only dollars as first address are a problem for -u

ssh: fix spinning due to sticky intr flag on connection timeout


ssh: handle unknown MSG_CHANNE_REQUEST messages

sshfs: add exits(nil) to threadmain

sum, md5sum, sha1sum: set exit status properly on open/read errors

truetypefs: NEW (unfinished but working) truetypefs

truetypefs: fall back to width if advance is zero

truetypefs: fix subfont indices (thanks aiju!)

truetypefs: use /lib/font/ttf as default font path

upas/imap4d: ignore messages without digest info

upas/fs: allow msgincref() with mb->refs == 0

upas/fs: avoid switch on vlong breaking build (thanks k0ga)

upas/fs: checkfid() might be called with uninitialized fid, ignore

upas/fs: delete extra binaries

upas/fs: don’t enter mailbox into hashtree when it is being freed

upas/fs: fix broken body.ext in walk (thanks sl)

upas/fs: fix infinite loop in putcache

upas/fs: fix walk

upas/fs: handle errors from fetch for cachebody()/cacheheaders()

upas/fs: keep messages marked for deletion in the index

upas/fs: remove now unnecessary “force” argument to cachefree

upas/fs: rework the refcounting, use 64bit qid path, add checks

vt: fix backup/forward after resize

vt: implement line selection by double click

vt: implement word select

vt: make selecting() wait until all buttons are lifted avoiding menu when chording

webfs: fix memory leak in Nfmt(), use libc’s new idn functions

webfs: remove automatic Referer header

webfs: write headers individually so they are not limited in sum to the 8k buffer


add dtracy manpage

atazz(8): fix probe formatting

boot(8): document tls and reboot methods

2c(1): document some differences with ANSI C

kbdfs(8): fix nit

keyboard(2) spelling (thanks Amavect)

idn(2): add documentation for idn2utf() and utf2idn()

mp(2): clarify mptoa() and mpfmt() default base

mp(2): document mpfactorial

mp(2): fix spelling

namespace(4): document new TrueType path, drop unused Hershey fonts path

namespace(4): fix $home bin paths

procsetname(2): provide manpage

ptrap(4): fix formatting

rio(1): fix typo

sdahci(3): correct device name for top level control messages (thanks joe9)

truetypefs(4): document truetypefs, fix example path

vt(1): vt doesnt exit when the host process exits as claimed (thanks driusan)


add ndb entries for il rcpu

/sys/lib/dist/mkfile: add pi.img target for raspi sdcard image

add /sys/src/boot/bcm/mkfile to download raspberry pi bootcode firmware

cpurc: filter ipv6 loopback address for automatic ip address setup (thanks fhs)

cpurc: handle multiple auth servers

fortunes: [9fans] ….. UNSUBSCRIBE_HELP NEEDED

fshalt: wait for fileservers command file to vanish

get rid of /lib/tftpd

upas: get rid of broken validatesender example, remove redundant upas/misc and setup target








COMING SOON: Print edition!


9boot: DHCPv6 support for efi

9boot: detect SYSLINUX “memdisk” and pass to kernel via ramdisk0= parameter

bootrc: write fatal error message to fd2

kernel: don’t cap the minimum sleep time to TK2MS(1) for syssleep()

kernel: stop the practice of passing DMDIR to devir() perm argument

pc kernel: get rid of ugly and partially broken cpuid macros

pc, pc64: look for “RSD PTR ” in ACPI reserved memory region from e820 map

pc, pc64: make mapalloc() and mapfree() static in memory.c

pc64: fix fpu bug

pc64: update headers to match pc

pc: fix ugly and partially broken switch() statement

devarch: fix /dev/msr (thanks joe9, aiju)

devaoe: fix dotdot walk in devlinkdir, make perms consistent

devdraw: zero initialize DImage.dscreen pointer (vnc, drawterm)

devenv: make #ec files not show up as world writable

devip: arp: interface address only specifies the interface, not the source address for route lookup

devip: do not icmp reply on multicast destination

devip: don’t pad the tag for routing commands (fixes removing routes with < 4 character tags)

devip: don’t send arp requests from null address

devip: fix flush, copy tag when replacing route entry

devip: fix missing wunlock() for “ipifc not yet bound to device” case, don’t create multicast entry on error

devip: fix multicastarp() when ipconfig assigned the 0 address

devip: fix router adv/sol options validation (options padded to 8 bytes)

devip: fix udp checksum

devip: fix use after free in ipifcremmulti()

devip: make il connect fail quickly when theres no route

devip: reject incompatible multicast/interface ip address pairs for ipifcaddmulti()

devmnt: make sure auth chan is on said conection in mntattach()

devmouse: produce signed msec timestamp in /dev/mouse, accept unsigned on write

devvga: disable cursor on shutdown avoiding graphics glitches on reboot

nusb/ether: fix ethertype filtering

nusbrc: add LG G5 for nusb/ether

sdloop: NEW import sdloop driver (thanks erik)

sdram: NEW experimental ramdisk driver

sdram: NEW properly support multiple ramdisks, so that ramdiskX corresponds to sdZX

wifi: lilu dallas multirate

audiohda: support Intel Sunrise Point-LP on thinkpad X1

etheriwl: add pci did for WifiLink 5300 (thans senthil)

igfx: support blanking by turning off panel power and backlight

rtl8169: fix receive for nuc BOXNUC7CJYH


ape: add some common fields for stat, grp and pwd

ape: add strnlen

ape: fix auth.h

ape: floating point improvements (thanks spew)

libttf: NEW add libttf for truetype font rendering

libdraw: accept unsigned msec timestamp in /dev/mouse

libip: ignore ipv6 link local addresses for myipaddr()

libmach: substitute /dev/zero for /proc/$pid/fpregs when missing (for snapfs)

libogg: nuke old libogg.au

libvorbis: fix broken free() (thanks mischief)

mklib: add %.acid target


6c, 8c: Fix nocast cast bug which prevents address arithmetic from being computed at compile time

Bfn improvements

acme: add spacesindent mode

acme: pass pointer to int type to avoid pointer to int cast warning

asaudit: make error more explicit

authsrv: implement AuthNTLM

authsrv: log message when no AES key is found for pak

authsrv: separate MSCHAP(v2) and NTLM(v2) authentication

authsrv: work arround linux omiting final Z(4) after the AvrPairs

camv: fix leak on resize

cc: fix result of operation not used warning for void casts

cwfs: cwfs -a option misleading

dc: fix off by one in stack overflow check (thanks BurnZeZ)

dontkill: explicitely set exit status to ‘’

emulators ui: add option for fixed factor scaling and bound scale vertically

emulators ui: don’t call flushmouse twice

emulators ui: don’t drink and code

emulators ui: fix input botch and typo

fplot: draw axes; zoom more naturally; unzoom

games/dmid: NEW add games/dmid and games/opl3

games/dmid: NEW add support for midi streams

games/dmid: NEW better fnumber calculation and fix fine tuning for 2nd voice

games/doom: don’t set repl if scale is 1

games/doom: use wadfs to expose music lumps

games/dpic: NEW add games/dpic and games/todpic

games/gb: attempt at fixing sprite priority

games/gb: fix mbc5 register addressing (fixes warioland3 gamebreaking bug)

games/gba: handle 8bit writes to vram

games/midi: properly skip sysex messages

games/mines: add missing checks for UseGhost

games/mus: fix note volume and channel selection; simplify

games/snes: fix input botch

hjfs: fix unbounded recursion bug in hjfs

hjfs: set group of new files to that of the parent directory (thanks umbraticus)

ip/cifsd: fix ntlmv2 authentication

ip/cifsd: limit response data count in TRANS2 for remotebuffersize, avoid empty filename for the root

ip/dhcp6d: NEW add minimal stateless DHCPv6 server for network boot and DNS configuration

ip/dhcp6d: NEW make constants for message types, check server identifier in request, only recheck ndb every minute

ip/dhcp6d: NEW ignore short and from non-local source packets

ip/dhcp6d: NEW only announce all-dhcp-servers multicast address on interface with link-local address on it

ip/dhcpd: add varargck pragma for warning() and fatal(), do syserr with %r format

ip/dhcpd: handle multiple networks on the same interface, dont get confused by v6 interface address

ip/dhcpd: parseip() error handling, make sure client ip is ipv4, add explicit length arguments to lookupname() and lookupserver()

ip/dhcpd: reject bogus requests, handle multiple ether= attributes in ndb, cleanup

ip/ipconfig: add missing {} as DEBUG() is a macro

ip/ipconfig: add varargck pragma for warning() function

ip/ipconfig: call mklladdr() to get conf.hwa initialized for ipv6

ip/ipconfig: check for recvra 0 on timeout

ip/ipconfig: make ra6 daemon less chatty, log to /sys/log/ipconfig instead of /sys/log/v6routeradv

ip/ipconfig: simplify by combining mklladdr() into mkclientid()

ip/ipconfig: use ipmove() instead of memmove()

ip/tftpd: deal with block wrap arround

kbdfs: handle mouse control (Kmouse, Kshift button swap) in parallel, bring back ^X form handling

kbdfs: ignore first 16 scancodes (number row) in kbtabctl[] for control key reverse mapping

mothra: Persist ‘k’ command in mothra and add matching -k flag (thanks piroko)

ndb/cs: add -6 flag for v6 only lookups and “ipv4” control message to toggle v4 lookups.

ndb/cs: make ipv6 only host practical by checking ip version on local interfaces

ndb/cs: prevent deadlock with ndb/cs by mounting /srv/dns AFTER /net

ndb/cs: don’t do dns lookups when all we got is loopback or link local addresses

ndb/dns: fix delegation with norecursion (-R flag)

ndb/dns: fix encoding of srv record target

ndb/dnsdebug: handle .ip6.arpa names

ndb/dnsgetip: report errors when dns resolution fails

ndb/dnsquery: handle .ip6.arpa names, don’t mount the dns service

play: handle file names containing consecutive spaces

rc: fix Xpipefd unbalancing the redir stack

screenrc: bind ‘#v’ when not already done (for cpu servers)

ssh: add -r for extra raw mode

ssh: fix nil dereference when TERM isnt set and -r is requested

ssh: wait for remote channel close (thanks piroko)

sshfs: if we’re going to annoy everyone we should at least match documentation

stats: fix crash with -Y fag when window too narrow

stats: read cputemp as C, set scale max to 100 C

stats: fix etherstats, avoid vmax == 0

sysinfo: minor formatting fix

tcs: shift-jis: add support for half-width kana

tcs: support EUC-JP JIS X 0212 codes

upas/nedmail: marshal(1) options -n and -8 are mutually exclusive

upas/smtp: allow remote port to be set to something other than smtp (e.g. ssmtp)

upas/smtp: use current login id in absence of -u option (as per man page)

valley: call srand so that actual random phrases are used

vncs: fix mistake “screen” vs “gscreen”, thanks eekee

vncs: silence devdraw debug prints

vncs: support for desktop resize extension, update devdraw

vncv: adjust window size on desktop resize, fix canresize checks

vncv: handle [] enclosed literal ipv6 addresses in host

vncv: implement extended DesktopSize extension, cleanup

vt: implement proper selections (thanks Ori_B)

webfs: don’t handle unknown status codes as continuations, reset status when handling continuation to avoid infinite loop

win: bind the text file properly instead of a special case in "


avl(2): add avlmin/avlmax in synopsis

dc(1): add pi program as example

getuser(2): add source or sysname()

hgfs(4): fix typo (thanks piroko)

ip(3): document ipifc ipv6 connection and fix delay formatting

mothra(1): fix formatting

ndb(8): ndb/inform also publishes ipv6 address now

plan9.ini(8) iwlwifi essid/bssid misleading

sshfs(4): don’t drink and troff

sshfs(4): language

sshfs(4): replace the much maligned -r option

stats(8): document -z flag (thanks xcko)

ttfrender(1): NEW

wadfs(4): fix typo


/sys/lib/dist/ndb/common: synchronize root servers and link to root hints source

fix incorrect character range in vga/unicode.font leading to missing CJK characters

turkey simplified timezone (thanks erkin from 9front ml)

update pci database

fortunes: I’ve been looking into running Plan 9 in JSLinux – Skip Tavakkolian









kernel: add missing ethermii.h dependencies. patch from cinap_lenrek

kernel: fix missing header dependency for ethersink.$O

kernel: let /rc/bin/diskparts attach #k after #S partitions are loaded up

kernel: move devether and wifi to port/

kernel: properly handle bad attach specifiers

aijuboard bootloader: fix 10BASE-T / 100BASE-TX support

pc64: add magic _intrr() symbol for ktrace (thanks mischief)

pc64: fix intrr(), avoid the linker moving intrr() arround

zynq: fix 10BASE-T and 100BASE-TX support

devether: mux bridges, portable netconsole

devether: remove (unimplemented) detach, allow device creation on attach

devfs: only set configed flag if config was read successfully

devip: add “reflect” ctl message, fix memory leaks in icmpv6, fix source address for icmpttlexceeded, cleanup devip: fix crash on negative dev id on attach

devip: fix ipv6 icmp unreachable handling, fix retransmit, fix ifc locking, remove tentative check

devip: implement source specific routing

devip: improve arp and ndp code

devip: increment in counter AFTER acquiering the ifc lock or loopbackmedium

devip: make v4 ifc broadcast and multicast routes specific to address

devip: more v6 improvements

devip: pick source address for neighbor solicitations as of rfc4861 7.2.2, cleanup

devip: properly initialize the connection ignoreadvice and tos flags

devip: various icmp stuff

devip: verify ifcid on routehint check, check Route.ref for free’d routes

devip: add some primitive rate limiting knobs to counteract bufferbloat

devip: don’t set mtu of interface to zero when not specified (thanks joe9)

devloopback: reassign device letter from #X to #λ to avoid collision with devvmx

devusb: fix format print warnings for ep->ntds and ep->uframes

ethersink: after the experiment, the zeros get dismantled. and then destroyed.

ethersink: provide promisc and multicast functions for v6, set out queue limit to 0 on attach, add to pc64 config

audiohda: add device id for x260’s Intel Sunrise Point-LP. (thanks rodri)

igfx: add support for T510 (thanks mycroftiv)

nusb/cam: NEW usb video driver

nusb/ether: mux bridges, bring in line with devether

nusb/lib: add maxpkt and ntds to Altc struct

nusb/kb: add usb tablet support

nusb/ptp: set storage name to their human readable description string

nusb/usbd: increase buffer size to capture port information

nvidia: add pci device id for GeForce 6200 AGB (thanks bitmapper)

usbehci: add uframes control request to return uframes one at a time

usbehci: catch interrupt in tsleep

usbehci: fix medium- to low quality highspeed isochronous transfers

usbxhci: fix mistake in completering()

vmx: allow setting mac address of using ea:nnnnnnnnnnnn! prefix, use genrandom() to generate mac globally unique mac address


ape: improve assert macro

ape: add signed fixed size integer typedefs to u.h

libc: allow /net/cs to specify local address for dial()

libc: add signed fixed size integer typedefs

libmp: add awk-generated tests

libmp: add new tests

libmp: add mptod and dtomp

libmp: more tests

libmp: mpdiv: fix dividing 0 by a small power of two

libmp: mpdiv: fix sign bug

libmp: mpdiv: get signs right…

libmp: mplogic: don’t drop carry out

libmp: mpmagadd: force output sign +1 always

libmp: mpmagadd: oops…

libmp: mptod/dtomp: add to mp.h

libplumb: allow attributes larger than 4096, set some malloc tags

libplumb: fix old leak introduced in 18b8ed1a5ea3

libplumb: fix plumbunpackpartial()

libsat: NEW sat solver

libsat, forp: fix va_list hack on amd64

libsat: fix one of the satmore() bugs

libsat: satmore: don’t try to override user defined variables

libsat: setmalloctag, fix incorrect allocation size

libsat: satget: don’t duplicate binary clauses

libsat: satget: include unit literals


9fs: break 9front case into several cases: 9front, 9bugs, 9contrib, 9grep

audio/pcmconv: fix accidental cast to float instead of double

auth/asn12rsa: also convert ASN.1 encoded public key to plan9 format

camv: NEW camera viewer

camv: fix display locking issues

forp: NEW formula proover

forp: fix multiplication; change division to C semantics

forp: fix precedence for []

forp: fix ternary operator

fstype: make copy of first sector in /env to avoid unaligned reads on the disk (for devfs)

ftpfs: no caching by default, add -c flag to enable it (patch by mycroftiv)

g: revert accidental change, document missing file type

games/gb*: reverse savegame field polarity

games/gb*,blit,c64: fix phaser coolant leak during resize

games/2600: NEW add port of aiju’s 2600 emulator

games/mines -g: elements taken from list should be -2, not -1

games/mines: bikeshedding

games/mines: build a better ghost trap

games/mines: chain new CLists in splitknown correctly

games/mix: fix incorrect line numbers

ip/gping: icmpv6 support

ip/ipconfig: always refresh ndb/cs and ndb/dns when adding or removing ip addresses

ip/ipconfig: fix exit status for ndbconfig

ip/ipconfig: fix v6 ndp code, use source specific default routes

ip/ipconfig: populate /net/ndb from v6 router advertisements, configure multiple addresses in ndbconfig()

ip/ipconfig: setup per local address default routes

ip/ipconfig: stop spamming the console about router receiving RA’s

ip/ipconfig: use unique ip/ipmask/ipgw values close to match for ndbconfig

ip/ipconfig: fix parseip() error handling in ipconfig, ppp, tftpfs and dns

ip/linklocal: invert the localadm bit from mac address instead of just setting it

ip/ping: stop doing clever things with dialstrings, just let cs/dial figure it out

ip/ppp: remove old struct

ip/ppp: set source specific default route regardless of primary flag, set link speed thru new ctl message when -b is specified

ip/traceroute: icmpv6 support

ndb/cs: fix crash in ndbredorder due to ndbnew() not maintaining the ->line ring

ndb/cs: remove paranoia debug toggle

ndb/cs: remove single-ip-address assumptions

ndb/csquery: insert \n between read chunks

ndb/dns: lookup all entries in dblookup(), v4 and v6 queries in parallel, remove weigthed timeouts

ndb/dns: remove single-ip-address assuptions

ndb/dnsquery, ndb/csquery: handle long lines

ns, devproc: quote path and spec arguments for /proc/$pid/ns, namespace(6) does support quoting

ns: remove left over vararg check pragma

pc: add $ operator

ptrap: NEW plumber filter

sort: fix bug where it incorrectly included the field separator in the comparison if it was >= Runeself

sshfs: update qid and filename on Tcreate

upas/fs: fix imap atom quoting (thanks Piotr Kubaj)


forp(1): NEW manpage added

forp(1): document [] and some bugs

ip(3): document changes on /net/arp and /net/iproute

ipconfig(8): clarify -p and -P options

lock(2): fix typo

mines(1): fix misleading HISTORY wording, documentation and chronometric control of supernatural apparitions

pc(1): always allocate at least one mpdigit (itomp assumes this)

resample(1): document -n option

twsi(3): fix wrong unicode codepoint in manpage

upasfs(4): remove duplicate -m definition (thanks rodri)

manpages: shut up about tex(1)


fortunes, rob, rsc, theo: What’s this? https://plan9.io/

drop your /lib/keyboard sir william, I cannot wait till lunchtime.

cpurc: remove obsolete device binds, run diskparts after $sysname is known. remove /env/boottime. document.

termrc: put #u in front for endpoint renaming to be effective, handle multipe ether= tuples in ndb

remove ipv6on






dash 1 manual



this release featues some updates on wifi, especially support for transparent arp proxy on kernel wifi interfaces so wifi can be bridged just like ethernets (as used by vmx). improvements in ipv6 support. devbridge is in the default pc kernel configuration now. and many other bugfixes.


kernel: convert textmode cga screen contents to kmesg only once

kernel: initialize cyclefreq for machno > 0 in guesscpuhz()

kernel: remove Ipifc.mbps, unused.

pc: fix wrong simd exception mask (fixes go bootstrap)

pc64: fix kmap() and invlpg()

devbridge: disable write blocking on ethernets, fix mss clamping

devether: allow spoofing of source mac address for bridges; used by vmx

devether: dont forward loopback packets on bridges

devether: remove duplicated parseether() implementation (pull from libip)

devmnt: use u32int for tagmask, simplify alloctag()

devtls, devssl: avoid ~0UL comparsion (from drawterm)

devvga: removing #v/vgabios, use /dev/realmodemem instead

ether79c970: dont disable promisc mode when multicast table is not empty

ether8169: add Macv45 for RTL8111HN, rename Macv45 -> Macv42 (thanks qeed, sam-d)

ether8169: deal with kernel memory exhaution

ether82557: don’t turn off promisc mode when mcast table is not empty

etheriwl, etherwpi: limit transmit queue buffer bloat to 48k (at 22Mbit ≅ 20ms)

gre: don’t drop pptp packets when smaller than v4 header

ipv6: set router R-flag when sendra is active for neighbor advertisement

nusb/ether: dont forward loopback packets on bridges, remove read nonblocking hack

realemu: fix pit bcd mode, fix precedence bug in argconv() format routine (thanks dan cross)

usbxhci: add missing pexit() in xhcirecover proc (thanks sam-d)

wifi: don’t assume Wifi.rates[] is sorted, return net data rate for mbps (50% theoretical)

wifi: don’t implicitely update lastseen timestamp on nodelookup()

wifi: filter out loopback traffic from myself

wifi: get rid of custom hextob() routine, use dec16(), avoid copies in parsekey()

wifi: learn target ip address from neighbor advertisements in dmat proxy

wifi: matt damon wifi bridging support

wifi: revert rate adoption divider, breaks arpunks wifi

wifi: use protocol constants from ip/ip.h and ip/ipv6.h for dmatproxy()


libauth: add auth_respondAI() function to get AuthInfo for mschap/mschapv2

libauth: fix out of bounds memory access in _parseattr()

libauth: remove auth_wep() function, and non-existing httpauth() declaration

libauth: simplify _attrfmt() using fmtprint() avoiding stack buffer

libc: constant time implementation for encode(2) routines, fix base32

libc: make encXchr()/decXchr() functions available

libflate: force non-empty huffman table in mkzprecode() for deflate

libmp: use constant time encode(2) routines instead of lookup tables

libndb: retire deprecated csgetval(), ndbgetval() and ndblookval() functions

libsec: avoid unneccesary memory copies and redundant code in x509

libsec: fix mistake: strnchr -> strchr

libsec: get rid of dummy data[1] in Bytes and Ints types (thanks pr)

libsec: implement SPKI fingerprinting for okCertificate()

libsec: remove asn1toDSApriv()

libauth: remove auth_wep.$O from mkfile


auth/dsa: remove asn12dsa, dsa2pub, dsa2ssh and dsagen

auth/asn1dump: include in mkfile

authsrv: fix chap, implement mschapv2 authentication, include MPPE secret in the ticket

aux/wpa: get rid of custom Hfmt() routine, just use encodefmt. use %E for mac addresses

disk/edisk: allow printing and readonly inspection of hybrid MBR/GPT disks (thanks aiju)

factotum: implement mschapv2 role=server authentication (for ppp)

factotum: remove legacy wep protocol

factotum: remove unused sshrsa.c

factotum: replace custom hex parsing code with dec16() avoding timing side channels

ip/dhcpd: remove old testing code

ip/ipconfig: add v6 deault route from router advertisements

ip/ipconfig: set on-link flag in router advertisement prefix info (fixes windows7)

ip/ipconfig: use 2000::/3 instead of ::/0 for v6 default route

ip/ipconfig: don’t put automatic link-local address configuration in /net/ndb

ip/ppp: mschapv2 support

ip/ppp: remove left over debug print

ip/pptpd: don’t mess with ipifc (handled by ppp), slay note gorup on exit

ip/tinc: handle and set ethertype for ipv6

ip/tinc: handle single byte noop and end-of-option-list tcp options in clampmss()

ip: make pkt interfaces unbind on close (from inferno)

ndb/cs: handle v4 only case for rudp

ndb/dns: fix leak in myaddr(), normalize ip strings, cleanup

rconnect: support -t timeout for aan like in drawterm; also rcpu, rexport/import

stats: show amount of reclaimable pages (add -r flag)

sysinfo: #c/swap -> #¶/swap

tlsclient: allow dumping the server’s certificate with new -d flag

tlsclient: remove X509dump() call, writes to fd 1

tlssrv: remove usage reference to lost auth/secretpem

upas/fs: deal with imap returning more uid’s than allocated from previus “messages” command

upas/fs: fix precedence bugs, compare digest pointer to nil

upas/fs: try to deal with nil mail body (can happen when fetch fails)

venti/conf: fix padding so we write multiple of sector size

venti: fix wrong channel element size for amd64 (thanks mycroftiv)


arch(3): document #P/realmodemem file

auth(8): auth/debug tests both dp9ik and p9sk1

bridge(3): clarify manpage, this is a layer2 bridge

factotum(4): document dp9ik, update protocol list

ipconfig(8): remove dhcp mention from -6 example

listen(8): add -a option to restrict announce address

ppp(8): remove BUGS section, client auth has been fixed.

vmx(1): fix virtio network bloomfilter

webfs(4): document -d and -D flags


/lib/bullshit: +converged +blockchain

/sys/lib/dist/mkfile: fix cfg/plan9.ini dependency (only visible after binds)

/sys/lib/dist: split 9boot into 9bootproto, make .386.iso and .amd64.iso targets

inst: determine kernel for bootsetup from $bootfile and $cputype

fortunes: Subject: [oss-security] nvi denial of service







dash 1 manual



this release features AES-NI and SSE2 chacha20 implementation for amd64 using the new sse-in-syscall support of the kernel. SHA2 got up to 40% faster for some archs by loop unrolling. a bunch of improvements for pc plan9 console (handles resize, pre-kernel boot messages in /dev/kmesg). qu7uux implemented framebuffer extending in aux/vga so he can get resolutions higher than the bios allowed before. aiju got openbsd 6.2 working on amd64 vmx. Ori_B imported new version of spin. tinc mesh peer-to-peer vpn client got written.


kernel: introduce per process FPU struct (PFPU) for more flexible machine specific fpu handling

kernel: make isaconfig() consistent, not inplace tokenizing the conf string

pc64: allow using the FPU in syscall and pagefault handlers

pc64: set ts flag before schedinit()

cga: capture cga console contents on boot, make sure cgapos is in range

devvga: properly handle physical screen size and panning

devvga: re-render text from kmesg after resize

igfx: allocate backing memory for framebuffer and hw cursor when not done by bios (from qu7uux)


libauth: replace proto=p9cr with new proto=dp9ik/p9sk1 role=login for auth_userpasswd()

libmach: fix format for 8db sse shift ops

libsec: AES-NI support for amd64

libsec: make includes consistent for sha2block*.c

libsec: optimize aesCBCencrypt()/aesCBCdecrypt()

libsec: unroll portable sha1block and sha2block functions

libsec: write optimized _chachablock() function for amd64 / sse2


6l: fix typo in optab table for APSLLQ (0x7e -> 0x73)


6in4: add -m mtu option to specify outer MTU

audio/flacdec: add eof handler avoiding endless spinning on broken files (thanks deuteron)

auth/factotum: add role=login protocol variant to dp9ik/p9sk1

auth/login: add missing quotefmtinstall(), quote dom attribute

games/blit: update screen when display address changes (thanks aap)

inst/mounthjfs: use /dev/swap instead of #c/swap to determine memory size (thanks aap)

screenlock: some improvements

spin: Update to most recent version. (thanks Ori_B)

tinc: implement experimental mesh peer to peer VPN from http://www.tinc-vpn.org/

vmx: fix openbsd 6.2 amd64 !entrystate bug


errstr(2): add /sys/src/libc/9sys/rerrstr.c to SOURCE section

plan9.ini(8): 9boot(8) is not a DOS program, remove outdated BUGS section

tinc(8): spelling, thanks jpm


/lib/rsc: It only works when we’re in the process of preparing a release.






dash 1 manual



kernel: get rid of 36 bit Paerange mask in mtrr (supporting machines with more than 64GB of memory)

kernel: don’t tokenize inplace in isaconfig() to make /dev/reboot work

kernel: introduce devswap #¶ to serve /dev/swap and handle swapfile encryption

pc64: add ether82598 driver to configuration

devfs: rewrite cryptio()

ether82598: support for T540-T1, use physical addresses for isaconf port

sdnvme: identify namespace list fails on intel ssd, just assume nsid=[1]

xhci: do bounds checking in capability walking, check if controller vanished on init (thunderbolt unplug)


libauthsrv: preserve readcons() error message from read() error

libc: cleanup atexit and put exits() in its own compilation unit

libc: wunlock() part 2

libc: improve alignment of QLp structure on amd64, cosmetics

libsec: add AES CFB and AES OFB stream ciphers

libsec: allow \r\n terminated lines in decodePEM()

libsec: export asn1encodedigest(), asn1encodeRSApub(), asn1toRSApub(), pkcs1padbuf() and pkcs1unpadbuf()

libsec: make sectorNumber argument for aes_xts routines uvlong

libsec: fix the (ape) build, bring ape libsec.h in sync with plan9 version

libsec: rewrite aex_xts_encrypt()/aes_xts_decrypt()


aux/wpa: prevent PTK re-installation attack by replaying AP retransmits

cwfs: use /dev/swap instead of #c/swap to determine memory size

netaudit: check for fs=

hg: disable tag caching, allows accessing hg repo from dump

hgwebfs: simplify retry loop construction

ndb/cs: icmp only supports version 4 addresses, icmpv6 only version 6 addresses

rsa: add auth/rsa2asn1, check write error in auth/rsa2x509 and auth/rsa2pub, document in rsa(8)

ssh: remove extern declarations for pkcs1padbuf() and asn1encodedigest() (now in libsec.h)

sshfs: use mtime for qid.vers, fix wstat without name change, fix wstat memory leak

upas/fs: fix putcache(), sub-part messages should never go into the lru

upas/fs: replace fixed cache table with lru linked list

upas/smtpd: don’t call syslog() from the note handler, this can deadlock

vt: block when sending input to host (fixes truncated paste)

winwatch: show windows with empty labels (thanks jpm)


aes(2): document aes_xts_encrypt() and aes_xts_decrypt() functions

swap(3): document permissions and encryption behaviour, reference to memory(8)


9boot: limit read size to 4K for efi simple file system protocol


tinc(8): mash peer to peer VPN






dash 1 manual




devdup: remove useless OCEXEC check, handled by namec()

devsegment: handle ORCLOSE on segment directory correctly, fix wrong qid, missing COPEN flag for segmentcreate()

devusb: double READSTR buffer size to 8000 bytes for devusb

devusb: superspeed bandwidth allocation handled by controller, skip usbload() calculation

devvmx: lilu dallas multivm

devvmx: call vmxshutdown from reboot() function manually

devvmx: more efficient data structure for memory map; simplified (more reliable) step function

audiohda: Intel Sunrise Point-H support (thanks sam-d)

audiohda: add pci id for ICH10 (thanks echoline)

audiohda: add pci id for Intel 9 Series

audiohda: add pci id for nvidia GM204

ether82563: add more pci ids for i210 and i354 from 9atom / openbsd

ether82563: make the ethernet of thinkpad p50 work (thanks sam-d)

ether82563: support for i211 with iNVM. (thanks mfny and brennan for testing)

etheriwl: add pci id for Intel Centrino Advanced-N 6200 on x201 tablet (thanks arpunk)

igfx: add did for x220

igfx: fix cdclk and dpll settings for dual channel lvds on sandybridge

igfx: fix sandybridge fdi link training bits and ordering

sdiahci: Intel 200 Series Chipset Family PCH support (thanks aiju)

sdnvme: pass 0 instead of 0xffffffff as NSID for identify controller and create completion/submission queue commands (thanks Ori_B)

usbxhci: abandon multiple requests per endpoint, cleanup

usbxhci: handle out of memory in controller initialization

usbxhci: implement recovery from host controller errors

nusb/disk: add a 100ms sleep after ums reset, remove unused note handler, cleanup


libmach: support disassembling from memory


awk: allow string as exit status

awk: don’t get into a infinite loop with eof while in string (thanks BurnZeZ)

cwfs: -n always overrides postservice() name, no matter if config mode changes service

doom: add games/wadfs

doom: clean up temporary mus files

ssh: issue “winchon” ctl request to /dev/consctl to get interrupt on window size change from vt(1)

sshfs: fork ssh in its own namespace so it wont keep the mountpoint open

sshfs: start sendproc and recvproc in the same notegroup as the fs process so theadexitsall() works on sshfs: ending.

sysinfo: only dump #r/nvram on amd64,386

sysinfo: run aux/icanhasvmx with verbose flag

vmx: lilu dallas multivm

vmx: VGA framebuffer should be normal memory

vmx: don’t realloc virtio queues – breaks pointers

vmx: fixed code that assumed uintptr==uvlong

vmx: memory map improvements, x86 simulator for MMIO

vmx: allocate sticky instead of more expensive fixed segment

vmx: fix hlt idle problem

vmx: pass multiboot framebuffer info to kernel

vt: block selection mode for snarf

vt: fix silly bug causing characters be drawn one at a time

vt: implement /dev/cons and /dev/consctl as a fileserver, winch, incremental redraw

vt: turn off nl -> nl+cr translation default in raw mode, don’t scroll more than screen height


booting: rename pcf kernel to pc, remove pcf, pccpuf, pccpu64 kernels, update documentation

inst: don’t hardcode /net/ether0, might have usb ethernet

inst: get rid of halt, just run fshalt in finish directly

inst: get rid of ppp configuration

inst: post newfs fileservers under /srv/$fstype.newfs to avoid conflict with preexisting local filesystem


vmx(3): document changes to devvmx interface






dash 1 manual




kernel: add support for sticky segments (cached, preallocated, never paged)

kernel: fix bounds check in screenputc()

kernel: pass bootargs also in multiboot command line, retire the bootline mechanism to pass arguments to /boot/boot

pc kernel: mkfile target usbehcipc.$O needs ../port/usb.h, add usbxhci.$O

pc, pc64: adapt devvmx to ork on pc64

pc, pc64: enable usbxhci in the configuration

pc, pc64: support for multiboot framebuffer, common bootargs and multiboot code

pc, pc64: debugexc: ignore exception if in kernel mode and can’t get hold of up->debug

pc, pc64: keep shadow copy of DR7 in Mach and use that to check whether we need to reset DR7 in procsave(); remove superfluous reset of DR7 in mmurelease()

pc, pc64: reset DR7 in mmurelease

pc: add vmx device

zynq: simplify initcode stack setup (just do it in init0 when the stack is mapped)

devusb: fix wrong pollival calculation in setmaxpkt()

devvmx: add support for SG_STICKY segments

devvmx: add support for extrap command to configure halting on exceptions

devvmx: error handling in clearmeminfo

devvmx: fix CR0/CR4 readout; also don’t exit on PAUSE instruction

devvmx: remember segment names and free segments properly

devvmx: support debug registers; simplify assembly

devvmx: support pat and efer registers

usbehci: fix crash in cancelisoio() for highspeed device due to wrong pollival

usbohci, usbehci, usbxhci: save mmio base address in ctlr, cant PADDR() on 386…

usbohci, usbuhci, usbehci: use physical address of registers for matching controllers and printing

usbxhci: basic iso write support (usb soundcard playback)

usbxhci: better approach to unstalling endpoint and fixup td ring

usbxhci: commit work in progress xhci driver, no config yet

usbxhci: experimental usb3 support

usbxhci: handle changing maxpkt on control endpoint by reevaluating endpoint context

usbxhci: implement command timeouts and aborts, serialize unstall

usbxhci: implement controller handoff, ignore usb3.0 ports, honor pollival for isochronous endpoints

usbxhci: provide shutdown function to halt the controller

usbxhci: simplify xecp()

usbxhci: use physical register addresses for matcing controllers and printing. simplify endpoint slot initialization.

aux/vga: simplify vesa by adding rgbmask2chan() function

nusb/usbd: create endpoint files for conf #1, usb3 preparation

nusb/usbd: support for usb3 hubs


libfis: fix inverted CHS bit

libregexp: fix lexer so it doesnt move past the string when it gets a \ escape


8l, 6l: get .frame offset right undoing $-4 hack

acid(1), proc(3): document watchpoints

acid: add getfields() builtin

acid: always create proclist variable

acid: provide hooks ‘procattach’ and ‘dying’

acid: watchpoint support

ktrace: handle amd64 stacktraces correctly


add aux/icanhasvmx

aux/cpuid: decode family and model bitfields

auth/factotum: complete p9any v.2 server protocol, but don’t enable it.

hpost: delimit @filenames by newline so files with whitespace aren’t mangled

hpost: fix field content mangling when newlines are present

upas/fs: handle plumbing for new messages for concurrent index updates

vmx: I/O string instructions, incomplete support for IDE disks, misc fixes

vmx: add support for (so far) crude 9p debugging fs; add gdb stub; clean up linux gdt code

vmx: clean up region handling code; changes to support amd64

vmx: don’t zero all memory, don’t abandon uart on eof, sleep before transmitting uart data

vmx: fix ‘-v text’

vmx: fix non-vesa framebuffer mode

vmx: fix translateflat on 64-bit

vmx: i8042: translation changes reported keyboard id

vmx: linux kernel loading; PIT fixes to support linux; support VGA 0x3D4 word writes; support sending virtio ethernet packets to a file and prepending snoopy headers

vmx: obsdfb: check if curmode is nil

vmx: round up frame buffer size to whole pages, ignore vga access in linear framebuffer, tell openbsd about framebuffer

vmx: support debug instructions

vmx: VESA support and other misc I/O improvements

vmx: complete cmos

vmx: fix build on non-x86 architectures (switch vlong)

vmx: fix pic ‘specific eoi’ bug, fix kbd bug, add fake IDE and floppy controller

vmx: fix virtio bugs

vmx: implement virtio reset

vmx: improve PIT/keyboard support

vmx: obsd: load kernel symbol table and allow setting root device

vmx: openbsd support: parse more options

vmx: remove debugging print

vmx: slightly more vga support

vmx: support EFER and PAT access

vmx: support loading openbsd kernels

xd: use new bio magic to make -u more efficient


/lib/{rob, rsc, theo}: Yup.

remove /sys/lib/##redacted##.##redacted## (thanks ##redacted##)


authsrv(6): don’t say old p9any isnt in use anymore…

pc(1) clarification

print(2): clean up vlong flag description

rc(1): catch up with a change made long before 9front

segment(3): document sticky segment type

vmx(1), vmx(3): add vmx documentation






dash 1 manual



kernel: avoid waserror() botch in devwalk (from drawterm, thanks aiju)

kernel: fix memory leak in checkpagerefs() debug function (thanks aiju)

kernel: fix rewinding in directories with pread() offset

kernel: fix twakeup()/timerdel() race condition

pc: handle PCMP and RSD being in low (kaddr) or reserved (vmap) memory

pc: fix memory leak and add clog() function

pc64: state mp.h dependency for archacpi.$O

devdraw: ignore drawdebug command

devsd: handle case where theres no ifc->enable() function

devsd: check return value of ifc->enable(), don’t leak unit name/user strings

devvga: include hwgc in vgactl file

devvga: remove unused copy of checkport() function

sdvirtio: return 1 for success in vioenable()/viodisable()

sdnvme: NVMe controller driver (work in progress)

sdnvme: don’t write completion queue doorbell register when nothing has been processed

sdnvme: enable in pcf, pccpuf, pc64 kernel configuration


lib9p: allow rewinding in 9pfile directories

libavl: fix documentation

libavl: lookup can return the closest match

libdraw: get rid of _drawdebug variable

libmemdraw/libmemlayer: get rid of drawdebug prints

libmemdraw: get rid of kernel iprint() emulation

libregexp: miscellaneous little cleanups

libsec: sha256 support for thumbprint files, use it in ssh as well

libsec/tlshand: fix ECDHE and DHE for SSLv3

libsec/tlshand: fix mpint to bytes conversion, reorganize send/recv buffer, check for overflow in msgSend()

libsec/tlshand: simplify tlsReadN()


5e: fix special bitshift and rotations

[012568kqv]a: correctly lex full range of integers in the assemblers (thanks Ori_B)

fix yacc bug (found by dan cross)


aux/wpa: go to background when not prompting, handle open networks

chgrp: remove unused function declaration (thanks archeus)

cwfs: allow “none” user to rename files

factotum: append public rsa encyption exponent after the modulus

file: recognise Xilinx bitstreams

fortune: avoid buffer overflow for lines >= 2K, make sure index has at least one entry, use nrand()/ntruerand() for uniform distribution

games/blit: mkfile: install into /bin/games

games/blit: always show top-left corner; add tony kaku’s -m flag

games/blit: remove strange debugging line

games/galaxy: fix exit race condition by pausing the galaxy before threadexitsall

games/galaxy: parallelize gravitational force calculations

games/md: copy updated cpu.c from blit

hjfs: Add comment to change the OFF size to 8 when given the chance

hjfs: Clear all refs to zero when reaming.

hjfs: Fix bugs in ref count scan check. Enable as a console command (caveat: command arguments will change as I implement more functionality)

hjfs: add simple scan check of directory entry blocks

hjfs: avoid 8c “non-interruptable temporary” warning

hjfs: check: check a block if its ref count is not zero. Also check all the ref counts of blocks of a directory and clean up messages

hjfs: disable hjfs check until more functionality is complete

hjfs: fix broken dprint

hjfs: improve error messaging around blocks that are not found

hjfs: merge start of hjfs check implementation

hjfs: simplify dprinting

hjfs: start implementation of checking a directory

ip/torrent: avoid requesting same chunks

ip/torrent: avoid peerid collision using truerand() instead of time(0)

ip/torrent: exit immidiately when file is complete after verification and not being in seed mode

ndb/dns: double Maxretries for long cname redirection chains

nusb/lib: make usbcmd() return value symmetic; returning size of data phase (if any) (thanks aiju)

nusb/ptp: treat any assocation as a directory

nusb/serial: pl2303: better error handling

replica: use libavl for avl tree implementation

rsa2ssh: drop support for version 1 key format

ssh: weekend project

ssh: actually handle flow control and channel id’s

ssh: add “none” method to find out list of acceptable methods

ssh: add support for subsystems

ssh: cleanup debug messages

ssh: close the channel when vt hangs up

ssh: do not try authentication methods that we know are not possible

ssh: document thumbfile options

ssh: fix locking, and key reexchange handling

ssh: fix typo

ssh: implement password and keyboard-interactive authentication methods

ssh: implement primitive hostkey verification

ssh: increase initial window size for better throughput

ssh: loop keyboard-interactive on failure

ssh: make number of retries configurable

ssh: print the whole ssh-rsa hostkey in base64 when thumb check fails

sshfs: add -r and -M options

sshfs: check correctly for directory bits; calculate parent directory correctly

sshfs: don’t cache directory contents

sshfs: don’t crash when no /etc/password file could be read on the remote side

sshfs: fix -r / retulting in “//foo” paths, memory leaks, use estrdup9p()

sshfs: look up uid/gid from /etc/^(passwd group)

sshfs: remove debug print

sshfs: reset SReq->reqid field to fix double-free of request ids

upas/common: deliver mail to mdir as .tmp file and rename after it has been fully written

upas/fs: don’t abort on malformed unix header

upas/fs: fix dir comparsion and skip directories in mdir, avoid stat

upas/fs: fix sync condition

upas/fs: fix warning about unused Err: label

upas/fs: make use of Maxmsg consistent

upas/fs: remove imap lastread debounding

upas/fs: simplify imap4read()

upas/send: use openfolder() to deliver mail to avoid code duplication

upas/smtp: Revert smtp dial string behavior to match that of old upas (thanks sam-d)

upas/smtp: fix cram-md5 auth, simplify doauth(), check varargs for dBprint()

upas/smtp: generate 128-bit random message id (was 32 bit), use dBprint(), cleanup unused variables

vt: convert from event to threads

vt: cursoron, don’t resize winow when replying history

vt: fix background drawing

vt: fix xterm cursor keys

vt: handle application/normal mode (really fixes cursor keys)

vt: handle insert/delete/home/end keys for vt220/xterm

vt: handle nocolor flag and reversed background colors

vt: handle underline attribute

vt: implement snarf support

vt: increase history buffer to 64K runes

vt: send interrupt on exit, open logfile OCEXEC, run host after environment got exported, send rest of arguments to host


change cpurc to look for service folder in /cfg/$sysname and /cfg/default

disable all services except 17019, 17020 by default

dist/ndb: move sources auth server to ndb/common, list root dns servers in ndb/local as a fallback

inst/configether: in manual network configuration, ask for dns server

/lib/rob, /lib/theo: I don’t think so.


9p(2): fix typo in manpage

add blit(1) manpage

plumb(2): Fix typo in description of Plumbdelattr (thanks sam-d)

webfs(4): timeout is in milliseconds not seconds (thanks sam-d)

vt(1): the “send” menu became “paste”

ssh(1): add $home/lib/thumbfile to FILE section

ssh(1): add bugs section about host not being authenticated

ssh(1): initial documentation, needs examples for authentication

ssh(1): refer to thumbprint(6) for the sshthumbs file format

rsa(8): fix description of rsa2ssh (now, ssh2 format only)

add sshfs(4) manpage

sshfs(4): fix bad cross reference



9FRONT “полезные дураки” RELEASED (2017/03/19)




dash 1 manual



ether8169: add support for RTL8106E (thanks _potato)

ether82563: work arround phyprobe() failing on 82579LM without cable plugged in (thanks mischief)

pc, pc64: bump Qmax in devarch

pc, pc64: get rid of active.Lock and active.thunderbirdsargo

pc, pc64: avoid AP’s spinning in syncclock(), don’t wait for thunderbirdsargo

pc, pc64: assume tsc and lapic clock rate on application processors is the same as on bootrap processor

pc, pc64: give cpu servers as many image cache strctures as processes

pc: don’t use active.thunderbirdsargo in vunmap() tlb flush code

pc64: enable cputemp driver

teg2: fix format string warning in mmu.c

devmouse: refactor screen blanking logic


libaml: make heap size field int, implement BankField definitions


5l,6l,8l,kl,ql,vl: allow duplicate GLOBAL symbols (from Ori Bernstein)


auth/asaudit: check factotum key ; netaudit: mention asaudit NEW

auth/asaudit: missing \n in print

auth/asaudit: quote user and dom attributes in factotum key

auth/keyfs: support -r flag to mount read-only

auth/readnvram: also print dp9ik key

authsrv: more useful error reporting

authsrv: don’t hash in hostowner key for keyseed

authsrv: salt the keyseed from /adm/keyseed file

authsrv: handle short reads in initkeyseed()

authsrv: fix mkkey() dummy key generation (thanks aiju)

authsrv: get rid of needreply parameter by changing vnc protocol handler

cwfs: handle DMTMP flag in create

games/doom: music support (thanks qu7uux)

games/doom: avoid /dev/cursor fd leak into music process

games/doom: don’t spawn midi process when opening /dev/audio failed (thanks qwx)

games/galaxy: Change button 2 to reposition the galaxy, remove “move” from the button 3 menu

games/galaxy: avoid unnecessary calculations

games/galaxy: fix creation of new bodies

games/galaxy: fix zoom

games/galaxy: new mouse behavior

games/galaxy: simplify zoom loop

games/galaxy: tweak pausing behavior

games/midi: ignore bends, allow piping from stdin and to stdout, write in chunks from within sample loop (thanks qu7uux)

games/mus: midi converter (by qu7uux)

gs: fix dangleing pointer crash with “lock” (ghostscript Bug 697204)

gs: check for sufficient params in .sethalftone5

gs: validate parameter is dict in .initialize_dsc_parse

hgwebfs: keep trying as long as we get needkey response

hgwebfs: rewind data before pushing

ip/ipconfig: don’t null terminate the dhcp string options.

play, file: recognize midi and mus audio

tapefs: handle more cpio formats (thanks qrstuv)

upas: merging erik quanstros nupas

upas/fs: fix memory leaks in tls code, handle tls in a common wraptls() function

upas/fs: tls sni support for pop3/imap

upas/fs: remove planb mbox code

upas/fs: getting rid of the fine-grain locking…

upas/fs: remove unused segbrk memory allocator

upas/imap4d: change listener from ip/imap4d to upas/imap4d

upas/imap4d: simplify auth with encodefmt (backport from 9front)

upas/spf: delete okcidr(); always trust spf records


vga(3): complete list of vga controllers and software cursors

mus(1): fix manpage references

send(8): document new reject behaviour with -r flag

diskparts(8), prep(8): add edisk in NAME section

games(1): document games/midi -c arguments

add mdir(6), splitmbox(8) and update upasfs(4)

add redact(1)

authsrv(6): fix typo “ther” -> “their” (thanks aiju)


update /lib/legal/NOTICE

inst: make command window not overlap stats window in glendas riostart

cdproto: make mdir for glenda, various cleanups


9front “FOR IMMEDIATE RELEASE” Released (2017/02/21)





9front “Is Coming Out As A Winner On Many Issues…” – SD Times

rkrishnan, Cisco Systems: “I am extremely sorry to see plan9 die a silent death.” (rkrishnan.org, 10/25/13)

Rod Person, VPN Cryptographer: “Does 9front have an email app and how usable is mothra, I’m guessing not ebay or youtube?” (daemonforums.org, 6/25/15)

Christoph Reiter, German: “Wer verwendet 9Front eigentlich? Die Antwort lautet: fast niemand.” (golem.de, 8/3/16)

seesomesense, Hacker News: “Plan 9 was probably the finest operating system in the world.” (HN, 11/16)

pranomostro, Redditor: “The future of plan9 is pretty bleak imho.” (reddit.com, 1/17)

dash 1 manual


kernel and drivers

kernel: add “close” ctl message for tcp connection to gracefully hang up a connection without a tcp reset (used by go)

kernel: make the mntcache robust against fileserver like fossil that do not change the qid.vers on wstat

pc/pc64: get rid of timerset(0) case, was used with “i8253set off” ctl

sgi: change definition of tas() to take void* like the rest

sgi: cleanup timer code

sgi: get rid of timerset(0) case

ether82563: support for i219 (tested on t460p, thanks aiju)

etheriwl: add support for Centrino Advanced-N 6030, 6235 (thanks khm, openbsd)

vgaigfx: enable softscreen by default

wifi: timestamps in debug print, flush queue on deassoc, shorter roam timeout, timeout in blocked state, fix essid seprint race


libmp: avoid temporary buffer allocation in mprand()

libmp: fix mpmod() aliasing bug when n == r and x < 0 (thanks aiju, mischief)

libregexp: simplify regular expression vm implementation

libregexp: improve the transition to next available thread, instruction, and generation

libregexp: fix assert check for compile1 instruction count

libsec: replace des based X9.17 genrandom() with chacha random number generator

libsec: implement extended 192-bit nonce xchacha variant and hchacha function

libsec: avoid temp variables in chacha/salsa ENCRYPT() macro

libsec: have rsagen() always produce postive !dk to avoid confusion

libsec: need PKCS#9 “Extension Request” attribute (rsareq())

libsec: check if modulus is too small for message in pkcs1padbuf()

libsec: fix mkbigint(), asn.1 uses two’s compement signed representation

libsec: handle signed asn.1 bigint to mpint conversion for x509

libsec: revert asn1mpint(), rewrite rsa signature validation, cleanups

libsec: make X509toECpub() return CN name like X509toRSApub()

libsec: zero name buffer in X509toECpub()

compilers and debuggers

6c, 8c: fix “DI botch” evacuating DI/SI/CX registers to “.save” variables

6c: reverse register allocation order to avoid having to spill AX,DX and CX


aan: check negative message size in header

aan: use unsigned message counters, reject repeated acks, cleanup debug prints

aan: remove fcallfmt

audio/flacdec: continue after decode error (thanks deuteron)

auth/factotum: fix memory leak in findkey()

auth/factotum: support sha256 algorithm in rsa pkcs#1 signing

auth/keyfs, auth/secstore, auth/secuser: use ulong for time

aux/data2s: compress output

aux/wpa: dont send initial “start” message, faster polling interval waiting for connection

cfs: fix cfsctl interaction with mount cache (mount -C flag)

cwfs: fix cwcmd startdump

cwfs: handle worm exhaustion more gracefully

fplot: parse negative numbers in argument to -r option (thanks qu7uux)

fplot: fix zoom egetrect check (thanks qu7uux)

games/galaxy: add n-body simulator

games/galaxy: fix crash on write to closed display

games/gb: fix typo in the routine to load timer data (thanks qwx)

games/gb: timer array should be unsigned (thanks qwx)

games/gb: fix bug that prevented timer data from being accessed (thanks qwx)

games/jukefs: fix realloc sizes (thanks mischief)

games/mix: Add Knuth MIX emulator/assembler

games/mix: fix STZ bug, print CMPA instruction

games/mix: implement Knuth’s specification for comments

inst/bootsetup: fix unformated esp check (thanks yellow_apple)

ip/gping: fix corruption due to Machine.last pointer not being maintained in pingclean(), cleanup unused stuff

ip/ipconfig: don’t write /net/ndb when getting config from ndb (-N)

ip/ipconfig: have to refresh /net/cs, /net/dns after ndbconfig even tho /net/ndb didnt got written

keyfs: print error message when reading /adm/keys fails

playlistfs: fix playc chan type (thanks mischief)

rcpu: use $cpu environment variable for host when not specified

rsagen: prefer 65537 as the default exponent when elen == 0, otherwise pick randomly

rx: remove ssh code

samterm: avoid flushimage when theres nothing new to flush

ssh: R.I.P.


auth(8): document authsrv -N flag

cpu(1), import(4): note deprecation and refer to rcpu(1)

ec(2): document ecencodepub(), ecdecodepub() and ecpubfree() and list all the curve parameter functions

ec(2), rsa(2): document X509toECpub(), X509ecdsaverify(), X509ecdsaverifydigest(), X509rsaverifydigest()

galaxy(1): terminate .EX sections with .EE

rsa(2): document rsafill()

srv(4), &c: remove ssh/sshsrv references


cdproto: explicitely create /$objtype/bin subdirectories for all archs

/sys/lib/plumb/basic: fix rule for audio files (thanks deuteron)


New 9front release “GZ” (2016/12/28)




dash 1 manual


kernel and drivers

kernel: avoid padblock copying for devtls/devssl/esp, cleanup debugging

kernel: fix missing ; in panic() call

omap: fix format string warning %d for long

omap: cleanup mouse.c, just a dummy for mousectl()

pc: pat write combinding support for 386 kernel, honor cpuid bits

pc: modify cpu0 page tables in patwc() instead of current cpu ones

pc64: check if vmap() range fits in VMAPLEN window, remove unneeded vmapsync(), rename fault386() to faultamd64()

pc64: implement simple write combining for framebuffers with the PAT

xen: fix build by adding missing rdrandbuf() function

archacpi: fix format string warning on amd64

gre: check nil for pullupblock()

ip: always pass a single block to Medium.bwrite(), avoid concatblock() calls in Dev.bwrite()

ip: remove nil checks for allocb() and padblock()

ip: fix typo (rfc -> ifc)

ip: get rid of update_mtucache() and restrict_mtu() prototypes

ip/nullmedium: free passed block in nullbwrite()

ip/pktmedium: fix wrong hsize, theres no ethernet header on packet media

ip/pktmedium: no mintu, no maclen… thi is ip packets

ip/tcp: remove useless nil checks for padblock() and allocb() return value

ip/tcp: only calculae mss from interface mtu when directly reachable for v6

ip/tcp: never raise the mss over the link mtu < 1280 for v6

qio: big cleanup of qio functions

qio: fix comments, fix qiwrite() on close queue, remove debug setmalloctag() call in qwrite()

qio: implement concatblock() with pullupblock()

qio: get rid of unused qcopycnt debug variable

qio: make readblist() offset of type ulong as the rest

devbridge: various bugfixes and improvements from charles forsyth

devbridge: simplify etherwrite() as we dont deal with block lists

devcons: simplify putstrn0()

devloopback: simplify loopoput()

devmnt: avoid memory copies of I/O rpc buffer by using bwrite()

devmouse: various bugfixes, simplify

devmouse: change msec argument of *mousetrack() to ulong

devmouse: remove unused static map[] array

devtls: remove unused get32() function

audioac97: support for ICH4-ICH7 based cards with memory mapped registers (thanks echoline)


libauth: don’t attempt to mount when opening mount srv file fails in nsop()

libavl: put debug functions back

libc: move calloc() into its own compilation unit

libmemdraw: remove unused static drawbuf variables and ptrfn() declaration

libmemdraw: cleanup fillpoly(), remove unused fillcolor hack

libmp: mpxor: sign should be 1/-1, not 0/-1

libregexp: put debug functions back

ape/libsec, libsec: add secp384r1 curve parameters for tls

libsec: remove unused aes_setupDec

libsec: remove unused get32() function

libstdio: fix sclose() buffer overrun when terminating string, realloc() error handling (thanks porlock)

compilers and debuggers

8c: fix double compiling FNX complex lvalue in cgen64()

acid: fix y.tab.h dependency for proc.$O


aan: didn’t ask about sendcommand

auth/as, auth/none, auth/newns: consistent handling of command arguments, cleanup

aux/acpi: make it stats(8)-friendly

awk: improve random number generation

clock: remove unused variable

cryptsetup: fix bugs and cleanup

nusb/ether: support for “bridge” ctl message

page: remove unused variables

ramfs: remove unused variable

rcpu: avoid filedescriptor conflict with <{} (thanks mycroftiv)

stats: alternatively read battery and temp from aux/acpi

tar: remove unused variable

vncs: update devmouse code

vncs: don’t prompt for password on auth_respond() failure

winwatch: middle mouse button click also prompts for label

winwatch: no more ‘l’ key labeling

winwatch: put previous label contents in edit buffer for relabling


alv(2): new avl implementation

srv(4): add SOURCE for srvtls


cdproto: explicitely create /$objtype/bin subdirectories for all archs

tcp17019: make service proto and netdir arguments optional (for aux/listen1)


New 9front release “LOOKS GREAT IN MOTHRA” (2016/10/27)



direct download

dash 1

dash 1 manual

kernel and drivers

devcap: timeout capabilities after a minute, fix memory leak, paranoia

devcons: remove /dev/reboot “halt” command…

devproc: do unsigned subtraction to get MACHP(0)->ticks - up->times[TReal] delta

devip: simplify ipbwrite() by using retun value of qbwrite()

ip/*: simplify code as packblock() and concatblock() will never error

ip/icmp: only reply to echo request when directed to us and source is unicast

kernel: tsemacquire() use MACHP(0)->ticks for time delta

kernel: make sure procalarm() remaining time doesnt become negative

kernel: use tk2ms() instead of TK2MS macro for process time conversion

kernel: always do unsigned subtractions for m->ticks delta for updatecpu() and rebalance(), handle ticks wrap arround in hzsched()

kernel: fix type for utime/stime in pexit(), fix debug format strings

kernel: make randomread() fault reentrant

kernel: rekey chacha state on each randomread() invocation

kernel: replace various custom random iv buffer filling functions with calls to prng()

kernel: xoroshiro128+ generator for rand()/nrand()

etherzynq: implement promisc mode and multicast filter support

nusb/ether: experimental pomisc mode and multicast support for smsc and asix

nusb/ether: multicast and promisc support for rtl8150 (url)

nusb/ether: promisc and multicast support for admtek pegasus (aue)

nusb/kb: set usage to 0 (undefined) for items exceeding usage list

nusb/lib: fix wrong endpoint id when openep() finds already existing endpoint file

scram: disable GPEs before entering S5. x200s shuts down properly now

pc/archacpi: provide generic #P/acpimem file

aux/acpi: batteries and CPU temp reading so far


ape: bring strtod() in line with plan9’s libc version

ape: fix format clash, %z is for size_t (which is a long currently), not pointer sized

lib9p: limit the number of srv processes kept arround 8

libc: dont use floating point for portable umuldiv(), use 64 bit uvlong

libdraw: avoid dropping queued button change mouse events in emouse()


auth/factotum: bound the number of srv processes to 16, error the 9p rpc when it is over limit

cpu: quote remaining remote command arguments, don’t syslog on missing /mnt/term/dev/cpunote file

gif: just read and decode the first image when -9 or -c flag is specified

ipv6on: get network device from $netdir/ipifc/*/status

iwhois: make -n work, add .org, and a couple minor changes

mothra: avoid flushimage() calls, event() will implicitely flush

mpc: remove unused yylval type

rio: fix onscreen(), improved bandsize()

sam: make current filename available to shell commands in $% (thanks aiju)

scat: hjdicks for amd64

webfs: don’t use cached connections when posting


authsrv(2): update Nvrsafe structure to include aesmachkey

ip(3): spelling, update description of /net/ipifc/*/status format

pc(1): _ handling in numbers was broken at some point; restore documented behaviour

pc(1): add nsa() command

pc(1): add pb (thanks, BurnZeZ); add bit numbering

pc(1): bugfix: allow setting output base to 0 (thanks, deuteron)

pc(1): if the input base is not 10, print the 0d prefix before decimal numbers; this way, all output is always valid input (for the current mode)


fortunes: does that me a dipshit


New 9front release “THINK ABOUT THE FUTURE” (2016/09/04)



direct download

dash 1

dash 1 manual


This release adds aiju’s games/timmy, a physics simulation game and a bignum calculator for programmers called pc.

On the system side, we got a fast portable /dev/random now which is based on the chacha stream cipher - carefully seeded once at boot time. Cipher states for the rng and other kernel crypto services is now kept in a separate memory pool which devproc will prohibit access to and which automatically destroys the data on free.


acpi: ADR and BBN might be methods, so use amleval() to evaluate the value

aml: define amlintmask and set it according to DSDT revision (64bit / 32bit)

aml: implement ToInteger() and Match() instructions

devmnt: fix mistake in mntrahread()

devsdp: keep cipher states in secret memory

devssl: allocate cipher states in secret memory

devtls, devssl: make sure channel has ORDWR mode and is not a mount chan on fdtochan()

devtls: allocate cipher states in secret memory

ether8169: fix wrong mbps setting (from qu7uux)

etheriwl: add pcid 0x0082 for Intel Centrino Advanced-N 6205 variant

ip/esp: allocate cipher states in secret memory

ip/il: dont attept to connect over IPv6, IL only supports IPv4 packets

kernel: add secalloc() and secfree() functions for secret memory allocation

kernel: dont pprint() into 9p channels

kernel: more (arm) compiler friendly mul64fract()

kernel: switch to fast portable chacha based seed-once random number generator

swap: make sure swap chan has ORDWR mode on fdtochan()

wifi: allocate cipher states in secret memory, do AESstate key setup once


ape/libap: add d_stat struct in dirent struct allowing the avoidance of stats

ape/libauth: add PASSWDLEN constant to compile passtokey.c from native libauthsrv (thanks lawler)

libauth: fix mount file-descriptor leak in auth_chuid()


libauthsrv: export common readcons() routine and introduce PASSWDLEN constant

libc: add poolisoverlap() and definitions for Pool *secrmem

libc: native addv() and subv() routines for arm

libcontrol: primitive text entry cut and paste with mouse

libflate: add bounds checking on decode array, add sanity checks in hufftab()

libframe: consistent use of nil vs. 0

libmach: fix RORREG, right shift with shift count 0 means >>32

libmp: allow passing nil to v,x,y results of mpextendedgcd(), simplify mpinvert()

libmp: fix mpnot and add mpasr

libmp: fix mptov and mptouv

libmp: mpdiv: negative divisor has to flip sign of quotient

libmp: mpnrand(), what was i THINKING

libmp: mptrunc: don’t write to r->p[r->top]

libmp: mptrunc: normalize after mpassign to handle the case b==r

libmp: remove unused mpeuclid.c

libmp: strtomp: fix mpbits() call in octal code

libmp: strtomp: update the returned char* even if there were no characters parsed

libmp: timingsafe sign flip for small power-of-two negative divisor for mpdiv()

libsec: add scrypt password based key derivation function

libsec: chacha: calculate rounds in separate function (helps registerizer), get rid of unrolled code


5a: ROR instruction 5a: assemble constant >>0 right shifts as <<0 (no shift), allow >>32

5c: do shift propagation for rotate right (ROR)

5c: fix int -> uvlong cast bug (thanks to qwx on his patience on a the trouble session to narrowing it down)

5c: format assembly constant right shift encoding 0 as >>32

5c: handle unused results for cgen64()

5c: support for bit ROR, native 64 bit arithmetic

5l: ROR instruction

5l: format assembly constant right shift encoding 0 as >>32

6c: subsitute floating point registers eleminating MOVSD and MOVSS instructions in peephole pass

8c, 6c: native ROL (cyclic shift) instruction support, improve peephole optimizers

?c: track ../cc/cc.h dependency and rebuild cc.a$O as neccesary

cc: add OROL op to side effect free op list


Bfn: add Bfn script - find source code for function

9fs: remove juke, kfs and snap targets, caching for other and dump

acme/win: implement /dev/wdir file in win to change directory tagline, remove awd

audio/flacdec: exit on decode error, print error message

auth/*: various cleanups, use common readcons() from libauthsrv, zero keys after use

auth/changeuser: fix misleading print (secret is 31 chars max, not 256)

auth/factotum: use common readcons() function from libauthsrv

auth/fgui: use pale colors

auth/login: add dp9ik key to sub factotum, get rid of temporary /srv file

auth/secstore: use common readcons() routine from libauthsrv

awk: fix awk format printing bugs (thanks aiju)

disk/prep: if no 9fat, reserve space for plan9 partition table in autopart (thanks Shamar)

games/doom: fix blazing door sounds (from qu7uux)

games/doom: use Kprint for pause function (from qu7uux)

games/timmy: added timmy - a physics sandbox

hgwebfs: make hgwebfs prompt for password

make error handling in 9p service loops consistent

mercurial: use new d_stat from dirent structure in osutil.listdir

mk: remove buggy and unneeded syminit() function (thanks qurstuv)

mk: remove buggy and useless symtab functions (thanks qrstuv)

ndb/cs: don’t lookup AAAA records for IL, make sure translated address is IPv4 for IL, consistent use of nil vs. 0 for pointers

ndb/dns: purge db records on refresh for resolvers, remove old debug and testing code

ndb/dns: remove procname statistics and restart feature, cleanup 9p service loop

pc: added pc - programmer’s calculator

pc: add cat() function

pc: add gcd, rand and minv; set base of logical operation results to 0

pc: add rev function

python: remove automatic compiled module loading (.pyc files)

ratrace: fix fork/exec race with “nohang” procctl (like a debugger)

rc: implement 9atoms ` split {command} syntax extension

rc: write /dev/wdir after printing the prompt, not after executing “cd” command

rio: move the test if w is allowed to change cursor into wsetcursor()

togif: -E flag to read animation from stdin

upas/fs: remove checkmboxrefs() debugging code, properly handle errors in 9p loop

vga/igfx: add pci did’s for kenjis intel graphics cards.

vga/igfx: fix integer overflow in datam calculation (from qu7uux)

vga/igfx: work in progress fdi link train for sandy bridge, properly calculate fdi and displayport lane count

webfs: avoid retry loops when we got a bad key in factotum

webfs: include factotum key query in error string for 401/407 Unauthorized status

webfs: less aggressive url normalization; never unescape reserved characters in path/query/fragment


acme(1): remove references to awd

aml(2): document amlintmask

authsrv(6): document session secret key derivation for p9sk1 and dp9ik

mp(2): document mplogic functions

pc(1): document pc - programmer’s calculator

rand(2), cons(3): clarify /dev/random behaviour

rc-httpd(8): fix wrong manpage section index generation for rc-httpd(8)

regexp(2): add history for libregexp

rio(4): document text truncation

src(1): document Bfn

thread(2): threadgrp() -> threadgetgrp(), thanks jpm

timmy(1): games/timmy manpage


fortunes: Emacs now supports webkit.


New 9front release “NINE FRONT DON’T QUIT!” (2016/05/30)


direct download

dash 1

dash 1 manual



kernel: fix cb->f[0] nil dereferences due to short control request

kernel: add srvtls and tlsclient to bootfs.proto for encrypting connection to the file server

devssl, devtls: fix permission checks

etheriwl: add pci id for PRO/Wireless 5350 AGN (thanks Ori_B)

vgaigfx: fix device id for Ivy Bridge (thanks Kenji)

vgaigfx: check gtt to determine graphics memory size, add hw cursor support for g35 (thanks kenji)

efi: allow access to iso filesystem on non-cdrom media (iso/hybrid)

efi: ensure 8 byte alignment of buffer, as ReadBlocks() method will fail otherwise


libauthsrv: dont pass netroot to netmkaddr()’s defnet parameter in authdial() (thanks kenji arisawa)

libmemdraw: remove unused static variable from memimagedraw()


9boot: add iso hybrid loader 9boothyb

auth/rsa2x509, auth/rsa2csr: allow appending SubjectAlternativeNames (SAN) to multi-domain certificate generation

auth/rsa2x509: generate x509v3 cert as extension field might not otherwise not be expected

awk: restore old buffering behaviour for printf

cc: use UTFmax not 4 (djc)

cc: prevent symbol buffer overflow

dist/mkfile: generate iso/hybrid image for 9front.iso

exportfs: disallow ORCLOSE in readonly mode (charles forsyth)

games/mahjongg: off by one in bmatch(), fix hint() redraw (thanks Kenji)

ip/ipconfig, ip/ppp: preserve preexisting entries when writing /net/ndb

jpg: output partial image data when available (truncated files)

ndb/cs: fix memory leak (charles forsyth)

rc: fix inband globbing bugs, cleanu

rc: remove pointless Memcpy(),Malloc(),Realloc() and efree() wrappers

rc: remove historical unix and win32 ports

rc: remove duplicate Xrdfn entry from fname[] array

rc: fix double close() in addenv()

rc: simplify execfinit() / Xrdfn() using the globber to lookup /env/fn'#‘*

rio: only the current window may change the cursor, fix typo screen->r vs w->screenr in drag()

add srvtls and the corresponding tcp17020 service

upas/marshal: strip trailing whitespace from header values


9boot(8): document 9boothyb


remove š and Š from estonian keymap

add belarusian (by) keymap (thanks eric lindblad)

add polish keymap (thanks chomzee!)

/lib/vgadb: add Panasonic CF-R7 LCD panel (thanks Kenji)

New 9front release “ALLES LÖSCHEN!” (2016/05/06)


direct download

dash 1

dash 1 manual


retire the dec alpha port

remove unmaintained bitsy (ipaq) kernel

remove unmaintained omap4 (pandaboard) kernel

etheryuk: add Yukon 88R8055 id from erik quanstros driver (thanks Kenji), add to pc64 kernel


ape: remove openssl

ape: add libauth, libbio, libmp and libsec as replacements for openssl

ape: return plan9 error strings from strerror()

libauth: remove support for import command in namespace files

libauth: remove unneeded includes for authsrv.h, avoid pulling in dependency for rerrstr()

libc: fix out of bounds access in dirpackage(), simplify

libc: remove unneeded #include <auth.h> for crypt() and netcrypt()

libdraw: avoid BPSHORT()/BPLONG() expansion, cleanup loadchar(),cachechars()

libdraw: dont postnote to pid==0 in ekill()

libjson: add slack space to literal string buffer to handle bad runes (thanks mischief)

liboventi: remove unused liboventi

libregexp: New libregexp and APE ported to native

libsec: dont use mips assembly routines for spim, wrong endianess

libsec: fix memory leak of RSApub, avoid parsing certificate twice to extract rsa public key

libsec: implement elliptic curve group operations in jacobian coordinate system

libsec: implement server side ECDHE key exchange with secp256r1, move DH state in TlsSec structure, simplify

libsec: implement server side SCSV preventing silly client fallbacks

libsec: order tlshand cipher suits by: keyexchange>=cipher>=hash, ignore client preference

libsec: recognize and decode PKCS#8 wrapped RSA private keys for auth/asn12rsa

libsec: x509: convert to UTF8 from BMPString and UNIString, reject \0 bytes


9fs: add “sites” to the 9front case

abaco: respect $font

acid: don’t get fooled by spaces in convflt()

awk: replace ape awk with new native port (thanks spew)

gs: replace openssl aes implementation with ape/libsec

hg: create system wide /sys/lib/hgrc to enabled hgwebfs extension

hg: set $HOME when not already set to avoid silly uid lookups which can fail if theres no /adm/users

hg: set mercurial.url.has_https when hgwebfs extension is in use

kbdfs: add shift+altgr table 7 for polish keymaps

ktrace: sign extend stack dump pc for amd64

python: remove openssl support, use ape/libsec for cryptographics hash functions

rcpu: make sure not to leak /env/fn#server and /env/fn#aanserver for drawterm (thanks mischief)

rsagen: increase default key size to 2048 bits

vncv: fix netmkvncaddr()

webfs: change %H (hostname) format to %N to not collide with encodefmt’s %H (hex)

webfs: fix “fd out of range” error message

webfs: fix memory leak of serverName in tlswrap()

games/mole: add “snake” tracing effect to mole


abaco(1): remove readweb

aes(2): mention aesCBC bug

srv(3),shr(3): correct reference

shr(3): document example

listen(8): document tcp17019 rcpu service

listen(8): fix html rendering

rsa(8): provide example for converting OpenSSL generated PEM file to factotum

rune(2): add Runeerror reencoding considerations in BUGS section (thanks aiju)

tls(3): document support for TLSv1.1 and TLSv1.2


/lib/ndb/common: update ip addresses for [BCHL].ROOT-SERVERS.NET

add danish keymap (thanks Eric Lindblad)

add missing target for antiword in /sys/src/cmd/aux/mkfile (thanks _sl)

New 9front release “The muscott icon of it! Why devil?” (2016/04/08)



direct download

dash 1

dash 1 manual

kernel and drivers

kernel: make fversion()/mntversion() types consistent

kernel: make kernel UTFmax and Runemax consistent with libc (21-bit runes) (thanks maurice)

kernel: fix tsleep()/twakeup()/tsemacquire() race

kernel: print pid as %lud instead %lux (in tsleep() debug print)

kernel: fix procflushmmu()

kernel: remove unused NSMAX, NSLOG, NSCACHE constants from portdat.h

kernel: always clunk closed fids asynchronously, regardless of caching

zynq: introduce SG_FAULT to prevent access to AXI segment while PL is not ready

zynq: cleanup devarch, flushmmu() after procflushpsecg()

devip: handle ignoreadvice flag for all protocols

devip: applying changes for bug: multicasts_and_udp_buffers

devkbd: change /dev/kbd to return multiple messages per read

devtls: fix wrong iounit

devtls: add portable AES-GCM (Galois/Counter Mode) implementation

devtls: zero secret information before freeing, cleanup

devtls: print the path of the underlying chan in status file

ether82563: initial i217 support from http://www.9legacy.org/9legacy/patch/pc-ether82563-i210.diff (thanks k0ga)


libc: fix runestrecpy() return value (thanks spew)

libdraw: remove flushimage calls from fontresize() and loadchar()

libdraw: don’t flush in readmouse() when theres nothing to flush

libdraw: have openfont() set error string

libdraw: fix out of bounds memory access after subfont array reallocation (thanks ray)

libFLAC: update to 1.3.1

libsec: fix verifyDHparams() for version <= TLS1.1

libsec: remove weakCipher[] array check as we do not support any of these weak ciphers

libsec: add portable AES-GCM (Galois/Counter Mode) implementation

libsec: fix tlsid for TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

libvorbis: update to 1.3.5


6in4: allow setting the local IPv4 address with -i flag (thanks k0ga)

6in4: ingress filter multicast and link-local, but allow relay traffic

9fs: bind -b /n/9front.org!7734 /n/lists

aan: use sync messages as keep alives

aan: handle case when reader closes netfd

auth/pemencode: fix usage()

bullshit: +progressive +enhancement

file: deal with negative coordinates in plan9 bitmaps, print image size

g: dont pollute the environment (thanks BurnZeZ)

games/life: add -d delay parameter, -b color reversal parameter, and update manpage

ip/gping: set display->locking before starting mouseproc (race)

ip/gping: ignore advice, fix packet corruption check, remove dead code

ip/gping: add main pid to pid list for killall()

kbdfs: map Kup/Kdown the same in shift tab (fixes shift-[up]/[down] one-line scroll in rio over drawterm/vncs)

mercurial: fix CVE-2016-3630

mothra: dynamically allocate buffer for refresh url (was 20 bytes stack buffer before) (thanks BurnZeZ for reporting)

plot: handle create() failure

ppp: md5 and mschap inside chap, do not request encryption with -c or -C (thanks k0ga)

ppp: Small format and log fixes (thanks k0ga)

ppp: fix buffer overflow, set correct state after chap negotiation (thanks k0ga)

pppoe: Avoid double free (thanks k0ga)

pppoe: Add support for -c and -C to enable/disable header compression (thanks k0ga)

rio: remove more unneccesary flushimage() calls

rio: /dev/kbd cleanup

stats: fix display->locking race

tcp567: run authserver with p9sk1 tickets disabled preventing offline password brute-force

truss: fix “bad string” error due to missing ape _nsec() syscall

truss: add fake __NSEC syscall name for ape

uhtml: dont trust charset=utf-8 attribute, verify.

vncs: fix dead Kend key

vncs: parse screenid as long, not short: BGSHORT() -> BGLONG()

vt: add -r flag to start in raw mode

manual pages, documentation, misc

devstream(3): removed

kbdfs(8): document new /dev/kbd behaviour

qball(2): fix bad manpage reference

fortunes: Ah, nice. the woodpeckers are back.


New 9front release “MY MEMORY OF DRAWTERM IS FADING” (2016/03/01)



direct download

dash 1

dash 1 manual

kernel and drivers

kernel: remove todfix overflow iprint() spam

pc/pc64: remove mpshutdown print

pc/pc64: bring up ap’s one after another, use idlehands() while waiting for thunderbirdsarego

pc64: move idle() routine after CALL main(SB) as the comment suggests

sgi: add chmod to bootfs.proto for sgi kernel

devdraw: remove unused Edepth[]

devmnt: deal with partial response for Tversion request in mntversion()

devssl: use tsmemcmp() to compare mac to close timing side channel

ipv6: fix icmphostunr() locking and memory free bugs (from sources)

usbuhci: removing “uhci bug” print spam from interrupt handler

wifi: check tkip/ccmp mac and crc in constant time avoiding timing side channels


provide /n and /mnt early in bootrc to allow consistent use in /lib/namespace


ape/fmt: %p and %z format for amd64

ape/stdio: %z format is VLONG on amd64

libauthsrv: add D in mkfile

libauthsrv: fix ed448 goldilocks prime comment

libauthsrv: can write p = 2448 - 2224 - 1 now, as mpc has constant folding.

libdraw: remove unused static log2[] array

libfis: dont reject drives lacking SSP (sata ssd connected to ide with adapter)

libmp: handle out of memory case in gmfield()

libmp: remove include of libsec.h

libsec: add salsa20 stream cipher

libsec: ecdsa client support for tlshand, cleanups

libsec: refactor asn1 encoding of digest for rsa signatures, fix memory leak in ecverify

libsec: mpconv -> mpfmt

libsec: fix missing error case unlock() in tlshands initCiphers()

libsec: fix double free in pkcs1_decrypt(), handle bad epm length in tlsSecRSAs(), cleanup

libsec: simplify pkcs1_decrypt()

libsec: add libc.h include for aes_xts.c (drawterm)

libsec: fix memset() size in tlsConnectionFree(), remove #include <bio.h>

libsec: remove unused tlsSecKill()

libsec: have 16 32-bit words in DigestState to avoid out of bounds warnings for poly1305


/rc/bin/“: fix quoting bug (thanks, aiju and silasm)

auth/cron: just run /bin/rx to execute remote commands

auth/factotum: fix nil pointer crash on p9skclosekey(), thanks k0ga

auth/factotum: fix memory leak for p9any key confirmation, fix key handling for role=client

aux/kbdfs: read outer /dev/kbd file and use it just like /dev/kbdin

exportfs: properly reply to chdir() error when we speak 9p

exportfs: retry execing ourselfs as “/bin/exportfs” (argv0 might be relative path)

exportfs: fix endless loop for eof/error on second read in localread9pmsg()

games/doom: fix white window issue on exit

games/doom: handle allocimage() failure

mpc: constant expression folding

ndb/dns: removing the buggy /net.alt remount hack

ndb/dns: initialize unknown fids to point to the root qid

ndb/dnstcp: -x specifies the mountmoint

newuser: /n/other now handled in /lib/namespace

rc: terminate rc when exec fails, cleanup

rcpu: adding experimental rcpu service [1]

rcpu: post hangup note to remote when connection breaks

rio: fix wrong frame colors when moving non-current window

rio: exit rio when /dev/cons or /dev/kbd read loop terminates

rx: rcpu service support

stats: use rimport or import to mount remote system

tlsclient: add -o option to establish connection over a file, free the AuthInfo structure to avoid leaking secrets

tlssrv: p9any authentication support using TLS-PSK cipher suits

tlssrv: add -A flag to skip changing user after authentication (usefull for aan)

upas/smtpd: remove unused lastsender logic

webfs: faster shutdown using postnote()

manual pages, documentation, misc

fortunes: ./configure CFLAGS=“-I$HOME/source/harvey/ape/amd64/include -I$HOME/source/harvey/ape/include -mno-red-zone -ffreestanding -fno-builtin -nostdlib -trigraphs -D_SUSV2_SOURCE -D_POSIX_SOURCE -D_LIMITS_EXTENSION -D_BSD_SOURCE -D_BSD_EXTENSION -DHAVE_SOCK_OPTS -DHARVEY -DPlan9” LDFLAGS=“-static $HOME/source/harvey/ape/amd64/lib/crt1.o $HOME/source/harvey/ape/amd64/lib/crti.o $HOME/source/harvey/ape/amd64/lib/crtn.o -L$HOME/source/harvey/ape/amd64/lib -L$HOME/source/harvey/amd64/lib” LIBS=“-lbsd -lap -lc” LIBM=“” –prefix=$HOME/source/harvey/ape/ports –host=x86_64-linux-gnu –build=x86_64-harvey –enable-shared=no

/lib/keyboard: add more crucial symbols

glenda’s default profile: remove /n/other mount, done by /lib/namespace

authsrv(2): document _asgetpakkey(), authpak_hash(), authpak_new(), authpak_finish()

authsrv(6): fix arrows

salsa(2): some formating fixes; fix source reference

rcpu(1): add


[0] http://okturing.com/src/3486/body

[1] https://code.9front.org/hg/plan9front/rev/65abc13ef7a1

New 9front release “PLEASE EXCUSE ME THE OUTFLOW” (2016/01/09)


direct download

dash 1

dash 1 manual

kernel and drivers

kernel: fix typo in devmnt mntproc name

kernel: use nicer check in okaddr(), wet floor signs in fixfault()

kernel: cleanup exit()/shutdown()/reboot() code

kernel: use uintptr for ibrk() return value (for base >2GB) and clarify segbrk(2)

kernel: missing changes for ibrk() prototype

kernel: change active.machs from bitmap to char array to support up to 64 cpus on pc64

pc, pc64: fix sdvirtio descriptor count when sending flush

pc, pc64: add did for intel wildcat point audio controller

pc, pc64: import i210 support from erik quanstrom’s 9atom

zynq: fix cache flush bug for emmc driver (have to invalidate cache before read)

zynq: clean cache unconditionally before dma, invalidate cache after dma for read case

devenv: fix ORCLOSE handling

devip: various bugfixes and cleanups for arp code

devip: declare cleanarpent() static

devproc: remove unused extern int unfair

devqspi: fix qunlock error on stat() -> close()

devsd: remove unused timeout field from SDreq

devsd: handle SYNCHRONIZE CACHE scsi commands as nops in sdfakescsi()

devtls: add sha256 mac

devtls: reject SHA2_256 mac for SSL, but TLS is fine

devtls: implement chacha20/poly1305 aead cipher suits

igfx: fix typos (thanks qwx)

sdmmc: handle fakescsi emulation

tcp: fix mtu on server sockets again (thans mycroftix)

usbehci: clean cache unconditionally before handing a buffer to the hardware

wifi: quote value of parsed ether options

wifi: prioritize rsne over wpaie


bootrc: remove usbwait hack, usbd/nusbrc are now synchronous by previous commit

do not handle kfs boot

move screen and mouse setup code to /rc/bin/screenrc

nvram: introduce AES key

compilers and debuggers

cc: handle 64 bit mixedmode asop and type vlong <-> float/double type conversions

cc: TUSHORT -> TRUNE for lstring constats for OUSED

cc: allow runes as macro names (from charles forsyth)

cc: getflag() fmt will be terminated at end of loop (from charles forsyth)

cc: include $builtin as keywoard in pickle() (from charles forsyth)

cc: restore side(), but do not consider OINDEX as side effect free

cc/6c: fix return type of mixed asop expressions, preserve type for moves so fixed<->float conversions work correctly

5c/6c/8c/kc/qc/vc: import various changes from charles forsyth

5c: handle 64 bit mixedmode asop

5c: handle (rare) MULU instruction in peephole optimizer

6c: remove 6c/vlrt.c file

6c: return vlong result for pointer subtraction

8c: make cgen64() compile target first when it contains functoin call so final assignment wont trash the registers

8c: handle 64 bit mixedmode asop and type vlong <-> float/double type conversions

8c: dont abort() when running out of registers.

vc: handle 64 bit mixedmode asop

cpp: fix memory corruption due to input buffer relocation

cpp: handle 4 byte utf sequences (21-bit runes)

acid/leak: fix endless loop for B2NB(b) == b case (thanks mischief)


ape: add badrect object into ape libdraw

ape: set MB_CUR_MAX to 4 in stdlib.h for 21-bit runes (thanks erik quanstro)

ape: add machine specific code for spim

ape: add missing _subv() function to 386/vlop.s

lib9p: add reqqueuefree

lib9p: do not override Srv.end in listensrv(), simplify srvclose() and recounting

libauthsrv: generalize ticket service, not hardcoding ticket format and DES encryption

libauthsrv: add missing files (thanks mischief)

libauthsrv: randomize aes key in mkkey()

libauthsrv: fix _asgetresp() for passwd

libc: import more endianness fixes (thanks cherry9)

libc: remove privfree(), simplify privalloc()

libc: add uv2d()/uv2f() and vas*d() functions to vlrt.c

libdraw: remove unneeded check (thanks BurnZeZ)

libfis: fix wrong shift for lba40 (thanks geoff and charles)

libjson: fix memory leak setjmp/longjmp problem (thanks spew) libjson: added printing support (thanks spew)

libmp: add mpnrand() function to generate uniform random number 0 ≤ x < n

libmp: add mpvecdigmuladd()/mpvecdigmulsub() assembly routines for arm

libmp: optimize case x/0xffffffff in mpdigdiv() (helps arm)

libmp: 386/amd64 mpvec*(): replace conditional branches with ADC/SBB instructions

libmp: add mpvecadd()/mpvecsub() assembly versions for arm

libmp: fix test program

libmp: initial attempt at constant time code, faster reductions for special primes (for ecc)

libmp: mpmod() fix typo

libmp: fix wrong move instruction for arm vector operations

libmp: fix assert() for mpexp() with nil modulus

libmp: add logic operations; mpfmt: include 0x with #

libmp: fix bug in mplogic.c; update mkfile

libmp: strtomp support for bases 2,4,8

libmp: add mpfield() function for fast field arithmetic

libmp: mpfmt: handle base 2, 4

libmp: support for c-style base prefixes for strtomp(), octal support

libmp: mistake in strtomp()

libmp: check nil return value of strtomp() in test program

libmp: silence compiler warning for strtomp

libsec: add pbkdf2_hmac_sha1() (from wpapsk factotum module)

libsec: fix probably_prime() endless loop for n == 3

libsec: add q parameter to dh_new() for subgroup support, sanitize dh parameters

libsec: add TLS_RSA_WITH_AES_128_CBC_SHA256 and TLS_RSA_WITH_AES_256_CBC_SHA256 ciphers

libsec: add curve25519() from http://code.google.com/p/curve25519-donna/

libsec: work arround 8c running out of registers compiling curve25519.c

libsec: remove flawed aes() digest and hmac_aes() implementations (thanks aiju)

libsec: add curve25519 diffie hellman

libsec: declare aes_setupEnc static

libsec: generalize pbkdf2_hmac_sha1() to pbkdf2_x() passing the hmac as an argument

libsec: add rfc5869 hmac-based key derivation function hkdf_x()

libsec: handle TLS 1.2 changes in CertificateRequest message

libsec: send sigature_algoritms extension for TLS1.2, order ciphers

libsec: add TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 and TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 cipher suits

libsec: save some space making weakCipher bitamp of type char[] instead of int[]

libsec: fix memory leak in ecmul()

libsec: implement dh parameter signature verification, stop lying about non-rsa ciphers, fix memory leaks in X509 code

libsec: make sure Elem is zero initialized so freevalfields() wont cause accidents

libsec: handle missing signature case; can happen because some ciphers make it optional

libsec: implement client certificate authentication for tls1.2

libsec: fix memory leaks in X509req() and X509gen() and return malloced pointer

libsec: cleanup newbytes()/newints()/newbits() and get rid of OFFSETOF() macro

libsec: use the right string encoding for various x509 fields

libsec: clarify the code by declaring constant for DirectoryString and handle conversion in mkstring()

libsec: remove rc4 cipher suits for tls

libsec: add poly1305

libsec: add chacha cipher (from charles forsyth)

libsec: add chacha20 poly1305 aead, allow 64 bit iv’s for chacha, add tsmemcmp()

libsec: fix genprime() to produce normalized result

libsec: use tsmemcmp() when comparing hashes, use mpfield() for ecc, use mptober() when right adjusting mpint to bytes

libsec: implement TLS-PSK for tlsClient()/tlsServer()

libsec: make sure theres no garbage after the asn.1 decode, cleanup

libthread: get rid of tprivalloc()/tprivfree()/tprivdata() and _workerdata() (thanks qrstuv)


9660srv: do not ignore upper 32 bits of offset when reading directory

9fs: add 9pio case for unauthenticated connections to 9p.io

9fs: add case 9front

ascii: replace mnemonic np (new page) with ff (form feed) for consistency

auth: release dp9ik implementation and reentrant factotum

auth/*: remove private /dev/random reading routines, use genrandom()

auth/changeuser: set the aes key in plan9 database, but not in securenet db

auth/convkeys2: remove

auth/httpauth: use auth_userpasswd() instead of AuthHttp request to AS

auth/passwd: fix structure zeroing order

aux/disksim: don’t assume 4-byte pointers

aux/gpsfs: fix usage

aux/listen1: allow alternative namespace when running as user none with -n option

aux/statusbar: use title as rio window title (thanks qrstuv)

cpu, import: remove old9p support

cwfs: adjust for new libauthsrv changes

cwfs: remove 9p1 support

cwfs: initialize /env/timezone on boot so dumps are in localtime

cwfs: don’t use sprint() to fill directory name

cwfs: fix wstat() failing to mark block dirty when noatime is set

delkey: print commands instead of starting a dialogue

doctype: learn to timepic

disk/fdisk: properly convert byte units K,M,G and T to cylinders/sectors

disk/mkfs: rmeove kfs support

dossrv: handle file offsets > 231

E: import script from bell labs

file: detect DICOM and XM audio headers

file: recognize tcpdump pcap files

file: recognize bootable disk images (by 0x55AA boot sector signature)

fshalt: remove kfs support

games/doom: fix bogus pointer arithmetic, do sfx initialization in two passes for linked sounds

html2ms: handle subscripts and superscripts

html2ms: bold table headings, remove wrong tag space handling

import/expoerfs: dont assert() fault when ai->secret is > 8 bytes, just use the first 8 bytes

init: remove dependency to <authsrv.h>

ircrc: add -P option for server password (thanks, nick)

keyfs: introduce AES key

keyfs: fix typo (thanks jpm)

kfs and kfscmd: remove

mothra: add subscript and superscript support

mothra: add missing initializations for plaintext html state

mothra: make text inside td bold

mothra: hr drawing

mpc: add (extended precision code generator)

qr: add (generate qr codes)

rc: Added change to /rc/lib/rcmain to allow execution of /rc/lib/rcmain.local if it exists. /rc/lib/rcmain.local is similar to $home/lib/profile in that it will only be executed with -l, but is site-wide.

resize: add -n for nearest neighbour

rio: fix scrolling when cursor is above window

rio: stop serving kbdin file (thanks eekee)

rio: fix handling “resize” wctl for hidden windows

rio: allow reading the image of a hidden window thru the window file

rsa2x509, rsa2csr: add newline in usage print

rx: theres no p9sk2 anymore

scuzz: uncomment synccache command

snoopy: fix timestamps for pcap files (thanks BurnZeZ)

srvold9p: remove

tapefs: remove dependency to <authsrv.h>

tar: make z flag work, even when no file name was provided (thanks aiju)

timepic: string support

tput: check sbrk return value

usbd: introduce /env/usbbusy

venti/fixarenas: replace %z fmt with %Z

webcookies: strdup() file argument to avoid crash (thanks mischief)

winwatch: l allows label changes

yacc: attempt to keep line numbers right for yyparse()

manual pages, documentation, misc

/lib/1oct1993: use words correctly (thanks, spew)

2c(1): fix spelling error for the axp entry

delkey(1): update man page to reflect recent changes

fplot(1): add BUGS section, fix typo

import(4): remove -o, -O flags

mp(2): fix typo mnprand() -> mpnrand()

qer(8): correct man page example (thanks, kenji)

qr(1), timepic(1): add

utf(6), rune(2): document 21-bit runes

remove kfs references from manual

New 9front release “the art of conversation” (2015/08/18)


direct download

dash 1

dash 1 manual

kernel and drivers

kernel: make sure the swap device has a reasonable capacity in setswapchan()

kernel: cleanup chan.c to consistenly use nil instead of 0 for pointers

kernel: consistent use of nil for pointer in sysfile.c

kernel: simplify syspipe()

kernel: make sure fd is in range in fdclose()

kernel: pipelined read ahead for the mount cache

kernel: clunk the cache when removing cache flag on a channel, only call cread() chen CCACHE flag is set

kernel: export mntattach() from devmnt.c avoiding bogus struct passing and special case in namec()

kernel: remove obsolete comment from namec()

kernel: cleanup qlock.c to use nil instead of 0 for pointers

kernel: dont rely on atoi() parsing hex for netif/devbridge

kernel: remove unused qstate() function

kernel: reject empty argv (argv[0] == nil) in sysexec()

kernel: make shargs() function static in sysproc.c

kernel: use Etoolong[] constant instead of string literal in validname0()

kernel: change vmemchr() length argument to ulong and simplify

kernel: limit syscallfmt user strings to 64K (as in validname)

kernel: fix indention in validname0()

kernel: validnamedup() the name argument for segattach()

kernel: limit argv[] strings to the USTKSIZE to avoid overflow

kernel: have to validate argv[] again when copying to the new stack

kernel: remove unused MAXCRYPT constant from portdat.h

kernel: fix Mheadache

kernel: pgrpcpy(), simplify Mount structure

kernel: mount flag is int not ulong, reduce size of Mount struct by putting mflag field in what would be wasted as padding

kernel: move “setargs” field in Proc structure after “nargs” and “args”

kernel: try freebroken() before killbig() (thanks aiju)

pc, pc64: set *bootscreen= when framebuffer changes

pc, pc64: replace atoi() calls with strtol() when hex can be expected

pc, pc64: remove unused psaux driver

zynq: remove unused variables from devqspi

devaoe: fix off by one in aoeerror(), consistent use of nil for pointers, error handling

devenv: avoid indirection, keep Evalue’s allocated in an array

devenv: simplify envremove(), cleanup

devether: duplicate flags when copying blocks (thanks erik quanstro)

devkbd: poll pc keyboard before blocking on kbd.q

devkbd: disable mosue/keyboard on shutdown, disable ps2 mouse on init, remove kbdenable()/kbdinit()

devmnt: dont reset readahead window when requested offset still has pending rpc

devmnt: use c->iounit instead of msize-IOHDRSZ to chunk reads and writes, reduce memory overhead for Mntrpc, mntalloc lock

devmnt: fix mntcache()

devtls: TLS1.1 explicit iv support

ether79c970: set mbps for proper queue sizes, assume gigabit ethernet for vmware

etheriwl: add pciid for Centrino Wireless-N 1000 (thanks qu7uux)

vgaigfx: remove #define MB, theres a MB enum in portdat.h

compilers and debuggers

cc: provide fake realloc() for getenv()

cc: improve (non-) side effect detection (thanks charle)

1c,2c,7c,kc,vc: honor suppress condition for outstring() in swt.c

vc: word align automatics

6l: fix vlong byte order when running on big endian machine (thanks erik quanstro)

acid -k: fix procenv() to new data structure

acid -k: fix intrcount() for amd64


ape: fix mktime() again

ape: implement altzone for tzset()

ape: fix build for objtype=spim

lib9p: return “write prohibited” error as documented in 9p(2) when srv->write is nil (thanks silasm)

lib9p: make reqqueueflush() use new threadint(), which will also cover channel operations

libauthsrv: readnvram() use vlong for nvroff, parse $nvlen/$nvoff with strtol() instead of atoi()

libc: make atoi() not parse c-style octal and hex numbers

libc: fix spim endianness

libc: fix wunlock() libthread deadlock

libcontrol: use strtol() to parse integer arguments

libcontrol: fix label memory leak

libhttpd: use strtol to parse decimal character references in httpunesc()

libmach: set correct endianness with little endian ELF32 mips binaries

libmach: remove useless error check from previous commit

libmach: remove redundant check for big endian

libmp: fix build for objtype=spim

libsec: increase handshake message buffer size (MaxChunk) to 32K (thanks sl)

libsec: TLS1.1 support (needs new devtls)

libsec: fix mistake breaking tlsServer() (thanks sl)

libsec: TLS1.2 client support

libsec: TLS1.2 server support, make cipher list with most prefered first

libthread: fix mistake, make “all” the default target again

libthread: use “interrupt” proc ctl message instead of posting a note for threadint()

cdproto: add spim

rootstub: add spim


add /spim

aux/vga: sandybridge support for igfx (unfinished)

aux/vga: dont rely on atoi() being able to parse hex

bitsy: replace atoi() calls with strtol() when hex can be expected

bitsy/keyboard: do not rely on atoi() being able to parse hex

bullshit: app, deep-learning, responsive.

cpu: cleanup ssl code, make sure -p works for any auth method

crop: use strtol() instead of atoi()

cwfs64x: set permission of / to 0775 on ream

games/doom: implement filelength() (thanks quux)

games/doom: fix switch textures swapping in ultimate doom (thansk qu7uux)

games/doom: add bug compatibility switches (thanks qu7uux)

games/doom: fix ouchface not being shown when it should be (thanks qu7uux)

games/doom: display correct message on medkit pickup when health low (thanks qu7uux)

games/doom: fix config file never being loaded or saved (thanks qu7uux)

games/doom: fix unterminated comment causing sound bugs (from qu7uux)

games/doom: fix idclev cheat in doom2 and final doom (thanks qu7uux)

games/doom: fix gamma correction and key translation (thanks qu7uux)

games/doom: fix array offsets for respawn angle (thanks qu7uux)

gs: fix build for objtype=spim

gs: fix alignment bug in image_render_interpolate()

hjfs: fix abort() in givebuf()

hjfs: fix deadlocks

init: do not run $home/lib/profile when cd $home failed

iostats: add -C to usage

ip/httpfile: fix flushes, fix concurrent reads, set error string

ipv6on: fix search for ip attribute (thanks kenji arisawa)

jpg/ico: support for embedded png icons

jpg/ico: fix mkfile

kfs: set permission of / to 0775 on ream

mothra: support for inline images and tag

mothra: fix selurl()

mothra: cleanup url handling

mothra: fix double button hit

mothra: enable compiler warnings and type checking, cleanup

mothra: fix nil crash on missing name/src attributes for source/video/audio/embed/frame/iframe

mothra: show tag within

mothra: fix crash

mount, srv: add -N flag to skip authentication and attach anonymously as “none”

page: fix deadlock, nil vs 0 for pointer comparsion, cleanup

python: use altzone

python: fix build for objtype=$spim

ratrace: avoid blank line prints, make writer the parent; various improvements

resample: simplify getint()

snoopy: dont rely on atoi() being able to parse hex

webcookies: fix isdomainmatch() (fixes livejournal.com login)

webcookies: fix implicit path cookie handling

webcookies: create lockfile with 0600 permission, always use create() with perm 0600 for rewriting jar

webcookies: use strtol() to parse HH:MM:SS

manual pages, documentation, misc

bio(2): Bterm() closes filedescriptor for Bfdopen() allocated buffer

import(4): clarify -E and -e options

rio(4): document “delete” wctl message (thanks mischief)

fortunes: If you want to do the work, I will review the results.

New 9front release “KÄPTN BLAUBÄR” (2015/07/19)


direct download

dash 1

dash 1 manual

kernel and drivers

kernel: add pagechaindone() to wakeup processes waiting for memory

kernel: declare _tas() to prevent pulling in libc version (for libmemdraw)

kernel: do not inherit Proc.dot (current working directory) in kproc()

kernel: do not inherit current directory channel (dot) to pager

kernel: do not pull in atom.s from libc for arm kernels

kernel: dont use smalloc() to allocate pte array in ibrk()

kernel: fis comment PciSID (alphapc, kw, mtx, teg2) (thanks qeed!)

kernel: fix accounttime() for HZ >= 1000

kernel: ignore last page at the top of virtual kernel address space for xalloc()

kernel: ignore memory pages with singular kernel addresses

kernel: implement separate wait queues for page allocation

kernel: map pci bars for devices with base class codes (ccrb) 0x00 and 0x0D-0x11 (thanks qeed)

kernel: reject bogus two byte “#!” shell scripts in sysexec()

kernel: remove debugalloc.c

kernel: remove waserror() arround newpage() in mntcache

kernel: use HDR_MAGIC constant to handle Exec header extension, make rebootcmd() handle AOUT_MAGIC macro

kernel: various cleanups of imagereclaim(), pagereclaim(), freepages(), putimage()

pc, pc64: toggle bit 2 in port 0x61 to reset and enable PCI SERR# nmi’s, print nmi status

pc: check Sse (bit 25) in cpuiddx before enabling fxsr in cr4 (fixes crash on the pentium II)

pc64: use unsigned long for kmapindex and mmu counts avoiding signed integer division

zynq: add /dev/fbctl to attach framebuffer to devdraw

zynq: add support for hardware cursor

zynq: fix /dev/pl

zynq: fix barriers

zynq: fix flushmemscreen()

zynq: increase kernel memory for graphics

zynq: make screen and cursor kprocs exit properly

zynq: mouse acceleration

zynq: remove unused PTE typedef

zynq: remove unused statistics fields from Mach structure

zynq: use KADDR() for kmap() if we can avoiding the mapping

ether82563: fix multicast filter (based on openbsd em(4) driver)

etherigbe: spi eeprom support (thanks echoline)

etheriwl: add multicast stub, dont clear descriptors after completion

etherrt2860: add multicast stub

etherwpi: Intel PRO Wireless 3945abg driver based on openbsd’s if_wpi (thanks aap)

9boot: look for plan9.ini in all filesystems accessible to efi to find plan9 partition

aux/vga: disable nvidiascale() as it broke modeset on kenjis card

aux/vga: dont use /proc/$pid/mem to access vga bios

devcons: add current pool allocations to #c/swap

devfs: remove useless ~OTRUNC mask for openmode

devmnt: do not use user buffer to update the mount cache

devproc: make sure statbufread offset wont turn negative

devsegment: fix parsecmd() memory leak

devstream: fast sequential file access with 9p pipelining experiment

devtls: ignore UnrecogniedName (112) alert message (for SNI)

ip: fix wrong radix for iphash() (thanks yoann padioleau)

kbdfs: Runemax is inclusive.

nusb/audio: dont sysfatal on bad endpoint (no altc)

nusb/disk: adding identical partition is a no-op

nusb/serial: remove unused channel

nusbrc: handle fat formated usb drives without partition table

usbd: set device info for control file (see usb(3), thanks qeed)

wifi: adjust transmit rate on error (for etheriwl), small mkfile changes

wifi: berlin prime bunny hopping

wifi: reflect current transmit rate in mbps

compilers and debuggers

5e: approximate LL/SC with cas()

5e: enable VFP emulation by default, doubles only need to be 4 byte aligned

5e: implement DSB,DMB,ISB and CLREX instructions

5e: make sure stack base is aligned to avoid unaligned memory trap on arm

cc: handle unaligned data in = {0} local initializer

cc: set unspecified elements to zero in local variable initializers

cpp: search source file directory first for quoted #include (thanks Ori_B)


ape: add stdint.h, fix SSIZE_MAX and add SIZE_MAX to limits.h

ape: define long long limits

ape: include <sys/types.h> in <sys/wait.h> for pid_t (thanks jens staal)

ape: port libc smp tas() for arm

lib9p: fix lib9p wstat qid.type/mode checks (fixes lock(1) for ramfs/hjfs)

libFLAC: fix compiler warnings by properly declaring void function arguments

libc/arm: implement _tas() with LDREX/STREX, execute memory barrier on smp systems (zynq)

libc: use Runemax instead of hardcoded 0x65536 for fmtchar check (thanks qrstuv)

libdisk: error handling, sanity checks

libdraw: consistent use of nil for pointers, error handling

libdraw: don’t loop forever when getting eof on /dev/cons in keyboard ioproc

libdraw: sync allocimage/allocwindow prototypes with man pages

libhttpd: declare hvprint

libsec: implement tlsClient support for RFC6066 server name identification (SNI)

lock: reopen lockfile after changing mode to make lock effective


9660srv: go back to 128k clusters, keep data and metadata separate in the cache with a tag

9fs: handle all the dos filesystems in one case, add esp handler

authsrv: remove unused opasstokey

authsrv: use plan9 key for http authentication

aux/cpuid: make sure extended feature bits are available (fixes crash on the pentium II)

cdproto: /sys/log/httpd should be a directory, added /sys/log/pop3

cifsd: smbrename is still ok when file is readonly (fixed git)

cp: experimental stream support

disk/edisk: gpt partition table editor

disk/fdisk: learn about EFI system partition (type 0xEF), honor protective mbr (type 0xEE)

disk/format: create Fatinfo sector for fat32

disk/partfs: adding identical partition is no-op

dontkill: only use noswap flag to mark processes as not to be terminated on oom

dossrv: maintain file creation date/time on disk, fsinfo sector can be 0 (disabled)

fcp: fix wrong write pointer offset when read returns less than DEFB bytes

fcp: use iounit() to determine buffer size, reduce number of worker procs to 8

games/doom: fix desyncing demo (thanks qwx), remove Makefile

gunzip: the extra length field (XLEN) is two bytes instead of one

hgweb.cgi: take REPO_ROOT and REPO_NAME from env, so can be used out of the box

hjfs: defer parent directory permission check for wstat

htmlroff: fix wrong newline in \name handling (| -> ||)

httpfile: fix evictblock() so we wont consume all the memory

inst/bootplan9: skip mbr installation and active partition switching when we have no plan9 dos partition

inst: fix download task using ip/httpfile to mount a iso over http and prompt for installurl

inst: provide gpt/mbr choice when disk is blank, format esp

integrate disk/edisk with diskparts, bootfs and installer (gpt support)

ip/httpd: fix syslog file

mk9660: write data in alphabetical order

ndb/dns: use same buffer size of udp packet in redistrib() as dnudpserver() (fixes assert)

page: make lookahead fetch work in backwards direction

pkg: remove pkg(1), we regret the error

qc, 9/ppc, 9/mtx: fix wrong if statements

rc-httpd: cleanup cgi handler, various fixes

rootstub: do not create pkg directories

stats: add kernel malloc and kernel draw allocation size graphs

sysinfo: update -p for sysinfo.9front.org

sysupdate: change source repo to https://code.9front.org/hg/plan9front

tar, tarfs: implement longname support

tcs: fix swaped alias mapping gb <-> gb2312

test: use libc.h constants for access() mode (thanks qrstuv)

tftpd: count only options we understand so we wont send empty oack message

uhtml: check if document is valid utf8 even with charset specified

usps: cut the useless part

vblade, cifs, usbuhci: fix parenthesis

webfs: send servername in tls client hello (SNI)

wpa: do not prompt for key when there is already one in factotum

manual pages, documentation, misc

faces: add cs.dartmouth.edu!doug (thanks, qrstuv)

faces: add updated addresses for quanstro, bwc, steve.simon (thanks, erik)

fortunes: Turning off comments.

rob: No we can’t.

rsc: I think I’m missing something.

theo: You are on your own.

troll: Subject: unusable acme

addpt(2): document badrect function, put badrect in .SH NAME so that it gets into the searchindex

colors(1), who(1): add missing SOURCE entries

cputime(2): fix prototype for cycles() (thanks qrstuv)

dhcpd(8): the fs attribute refers to the file server, not the name server (thanks, pena)

esetcursor(2), alarm(2): fix prototypes

event(2): fix estartfn prototype

exec(2): exec argument size only limited by user stack size, fix prototypes, return register (R0) contains address of Tos structure.

freeimage(2), readcolmap(2), writecolmap(2): fix prototypes

ndb(6): fix typo (thanks, pena)

open(2): fix typo

prep(8): document disk/edisk

prep(8): edisk also adds a EFI system partition (esp) when not already exists.

thread(2): fix prototype for threadint() and threadkillgrp() (thanks qwx!)

New 9front release “MAKE EVERY PAY-DAY BOARD-DAY” (2015/05/15)


direct download



kernel and drivers

audiohda: add AMD FCH Azalia Controller (thanks qeed)

bootrc: simplify bootargs splitting avoiding awk

boot: allow alternative proto files per kernel and kernel config for bootfs.paq

boot: bind #c to /dev with MREPL instead of MBEFORE to avoid double entries

boot: disable group/other permission checking in bootfs paqfs

boot/zynq: add jtagload utility, implement sdmmc boot (fat)

devkbd: remove kbdputc() and unused constants

devsd: always page align sd buffers

emmc/pmmc: make all symbols static

ether8169: add 8168GU mac id (thanks qeed)

ether8169: fix Macv45

ether82563: work arround bad eeprom checksum for some i218 card (thanks BurnZeZ)

etheriwl: check the bluetooth co-existance errors (thanks qeed)

etheriwl: make rxon() static (thanks aap)

etheriwl: support for Centrino Wireless-N 2230 from freebsd driver (thanks qeed)

etherseeq: reset the card when it gets stuck (dma timeouts)

kernel: add segio() function for reading/writing segments

kernel: avoid repeated calls to reclaim(), dont miss last page in Pte

kernel: catch address overflow in syssegfree()

kernel: fix integer overflow in syssegflush(), segment code cleanup

kernel: fix physical segment handling

kernel: fixed segment support (for fpga experiments)

kernel: get rid of auxpage() and preserve cache index bits in Page.va in mount cache

kernel: leave shared, physical and fixed segments alone in killbig()

kernel: move arrow cursor definition to port/devmouse.c

kernel: state errstr.h dependency for proc.acid target (fixes acid kinit() on cleaned kernel source tree)

kernel: pass Ureg* argument to note handler in R0 register on arm

nusb/kb: always try to recover on error, fix recover for multi-function devices

nusb/serial: recognize aijuboard jtag interface

pc, pc64: extend initial memory map for qemu multiboot data

pc, pc64: handle 64-bit pci membars

pc, pc64: remove PCICONS debug buffer from pci.c

pc, pc64: state dependency to usbehci.h in mkfiles

pc: import intel i218 nic changes from 9atom

sgi: new kernel for sgi/indy with ethernet and newport graphics support

tcp: fix loopback slowness issue / set tcb->mss for incoming connections (thanks David du Colombier)

usbohci: ensure Ed and Td alignment, fix for amd64

zynq: do mpinit() early so cpu1 debug prints do not intermix

zynq: fix out of bounds access in etherprobe()

zynq: fix usb by implementing delay() and give proper port speed in portstatus

zynq: invalidate cache before booting cpu1

zynq: mmc support


lib9p: handle erealloc9p(…, 0)

libmach: use #pragma pack to force 4 byte alignment of bootexec.h structures for amd64

libmp: use portable mpdigdiv routines for mips (causes invalid instruction trap on indy)

libsec: remove aesCTRencrypt()/aesCTRdecrypt() (thanks mischief and qrstuv)

libthread: get rid of chaninit() (thanks qrstuv)

pool: avoid triggering assert(b->magic != FREE_MAGIC) in blocksetsize() for mallocalignl()


ape: fix lockinit(), main9, lock.c for mips

aux/listen: removing service script sholud kill listener (thanks mischief)

bzfs: handle erealloc(…, 0)

cc: catch non constant pointer initializers

6c: MOVL xxx, r; MOVLQZX r, r -> MOVL xxx, r

db: fix unicode support (thanks giacomo)

dhcpd: ignore “;” filename from sgi arcs bootp(); command

factotum: remove unused extern declarations of invoker and authdom from header

g: search .awk and .rc files

games/c64: writes to I/O area do not affect underlying memory (documentation lied)

games/doom: fix mips

games/doom: print correct version number on mismatch (thanks qu7uux)

games/gb: better emulation and gbc support

games/gb: fix -2/-3

games/gb: fix gbc dma

games/gb: improve sound emulation by modelling analog behaviour

games/gb: improved audio code

games/gb: limit audio range to prevent clipping

games/gba: fix -3 crash and prevent >100% speed

games/gba: remove debugging print

games/gba: very subtle timer bug fixed

games/sokoban: fix non constant inializer

gif: fix color table clipping (for cb5.gif)

gs: avoid 6c type propagation / constant folding issue for set_cb_end()

gs: fix bug 694539. Reading off the end of the cbuf when dash pattern len is max

hg: install hgweb templates

hget: work arround apache Content-Encoding: gzip for Content-Type: application/x-gzip bug

hjfs: fix erealloc(…, 0) crash when removing member from group array makes it empty (thanks 9dan)

hgfs: preserve newlines in commit message (thanks BurnZeZ)

httpauth: little helper for rc-httpd to do http basic authentication with plan9 auth server

imap4d: simplify auth code using encodefmt(), use readn() to get multiple of 3*18 in base64 input buffer

ircrc: remove unused clonefile

mothra: del, ins, wbr, strike support

mothra: remove unused confirmcurs; move confirmcursor up with the other cursors.

ndb/dns: reduce sencodefmt() to not link in enc32()/enc64() encoders

netaudit: comment file server auth test (unreliable on cwfs)

pemencode: handle base64 input length < 3, fix bogus zero termination

rc-httpd/handlers/dir-index: plan 9 files may be chmod +a

rc-httpd: support for http basic authentication, fix cgi support to work with hgweb.cgi

realemu: ignore access to CMOS/RTC address/data registers

sam: don’t make scroll-wheel-up change focus (thanks clsmith)

sam: prevent array overflow with multiple -i and -a arguments (thanks clsmith)

ssam: don’t pollute the environmen, fix typo

secstore: don’t print errors for dial() and readnvram() when not in verbose mode

smtp, smtpd: fix use of enc64(), fix memory leaks in doauth(), cleanup mkfile

snap: fix readseg() to cope with > 2gb segments

upas/marshal: deduplicate cistrcmp()/cistrncmp()/enc64()

vc: fix coffsect.lnno overflow into nreloc

vl, libmach, kernel: mips has 16K alignment for segments (for bigpages)

vl: prevent stack altering instructions to be hoisted above loads

webfs: do not send credentials in automatic referer url

webfs: fix proxy authentication

webfs: implement CONNECT method for https connections over proxy

webfs: simplify http basic auth code by using encodefmt()

webpaste: update for modified okturing.com

manual pages, documentation, misc

audio(1): explain mp3enc wants raw data in the opposite byte order to /dev/audio (thanks, eekee), fix example

col(1): add SOURCE (thanks, qrstuv)

encode(2): clarify lim argument to enc*(), add SOURCE reference for encodefmt()

nintendo(1), qer(8): fix typos

nintendo(1): add SOURCE entry for games/gba

nintendo(1): update for gbc compatability

mp(2) man page: mpinvert, not mpinverse (thanks, pr)

mothra(1): replace code.google.com with code.9front.org

passwd(1): passwd no longer needs to be run on a terminal; netkey is more stubborn.

pushtls(2): fix signature to TLSconn.trace(), tls.h -> libsec.h (thanks, pr)

rsa(8): recommend secstore(1) for Plan 9 RSA private key storage

secstore(1): add DIAGNOSTICS section

segment(3): document fixed segment creation

wpa(8): the -p flag will also prompt for user/password on wpa enterprise

theo: OpenBSD is not generally known as an exposed democracy.

New 9front release “9FRONT NUCLEAR WINTER OF CODE” (2015/03/02)


direct download

kernel and drivers

kernel: increase size of palloc.mem[] user page bank array

kernel: reduce Page structure size by changing Page.cachectl[]

kernel: make pagereclaim() a bit less stupid

kernel: maintain Pool.curalloc for poolallocalign() and blockgrow()

pc, pc64: fix intrdisable() MaxIrqLAPIC -> MaxVectorAPIC (thanks mischief)

pc, pc64: simplify intrdisable()

pc64: enable uartisa in default config

zynq: fix print format warning in screeninit()

zynq: do fixed mapping for ocm memory on boot and make kaddr() and paddr() work with it

devmnt: remove unused mntstats fields from Mntrpc

devusb: fix debug ctl nil crash

devusb: check for nil hp->dump and hp->seprintep

igfx: add 0x2a02 for Intel GM965/GL960/X3100

igfx: displayport support for ivy bridge

usbehci: initial support for usb on zynq, remove uncached.h

wifi: ignore truncated tlv in beacon/probes; fix recvbeacon()


libc: check name in getvent()/putenv()

libdraw: cleanup getsubfont()

libdraw: check fontchar count in openmemsubfont() and readsubfont()

libdraw: use readn() to read headers and Fontchar array

libdraw: use multiple read() calls in openfont() to read .font file

libdraw: font->display->defaultsubfont vs. display->defaultsubfont, dead code, malloc erros

libsec: add TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA client cipher suit support

libthread: use devdup instead of mounting pipe to /mnt/temp for close-on-exec in procexec()

libthread: remove unused internal functions and old xinc assembler files


[125678kqv][cl]: fix sprint() and strcpy() buffer overflows

6c: eleminate more MOV instructions

6c: fix missing memset in Bconv()

6l: no need to emit rex.w prefix for MOVBQZX and MOVWQZX

auth/factotum: factotum: cleanup getnvramkey()

auth/userpasswd: add to mkfile to build by default

aux/vga: cleanup vesa code

aux/vga: use optional edid information to determine mode when vgadb fails

aux/vga: remove vbs/vbe from mode, use shs/ehs when sync is ment, prefer detailed timing in edid

aux/vga: dont error when vesa setscale fails after modeset (thanks rx9p for reporting)

fplot: add modulus % operator

gs: work arround broken xref table pdfs

gs: backport aes support for pdf-1.6

gs: backport 16MB string support

ircrc: dont require nick and user to be the same for auth/userpasswd (thanks spew)

jpg: handle progressive non-interleaved mode

kbdfs: work around qemu

leak: report alloc size mismatch

mothra: add side scrolling, controlled by left and right buttons on the keyboard. if desired, x-scrollbar can be set visible via the visxbar variable in mothra.c. (thanks, jpm_)

nusb/usbd: fix typo in debug prints, dont use %U format as its not installed

tlssrv: fix usage, dont cat

tlssrv: produce meaningfull error message when unable to read certificate

vc: eleminate strcpy in multab code

webfs: check $httpproxy and error when its bogus

wc: extend for 21 bit runes

added games/c64: Commodore 64 emulator

manual pages, documentation, misc.

fortunes: The NTP codebase is larger than the SSH codebase.

New 9front release “http://9fans.net/archive/ is precious” * (2015/01/29)


direct download

kernel and drivers

kernel: avoid inconsistent reads in /proc/#/fd and /proc/#/ns

kernel: evaluate dependencies of bootfs.proto files for bootfs.paq

kernel: use new disk/mkfs -o option to get proper source filename list for bootfs.proto

kernel: generate dummy bootscreeninit() function when building without vga device

kernel: get rid of /boot/boot parametrization

kernel: correct dependency for printstub.$O instead of print.$O

kernel: remove unused bootdisk[] and fix conf.nswppo factor in kernel memory size calculation kernel: new mount cache

kernel: print addresses in hex and sizes in decimal in xallocsummary

kernel: remove “checked xxx page table entries” print from checkpages()

kernel: remove *.acid files in nuke target instead of $CONF.clean target

kernel: replace ulong with uintptr in ucallocb() and fix unneeded parentheses

pc, pc64, xen: change return type of intrdisable() to void

pc, pc64, xen: simplify #P/irqalloc

pc, pc64: adjust mpshutdown() comment to reflect the current state

pc, pc64: fix intrdisable() to remove the Vctl entry even tho we can’t disable the interrupt on apic

pc, pc64: include PCArch.id in #P/archctl simplify #P/ioalloc read handler

pc, pc64: remove old B.COM command line parsing and just pass tokenized BOOTLINE to /boot/boot as argv[]

pc, pc64: untangle acpireset() from mpshutdown()

pc, pc64: untangle embedded controller (ec) dependency from devarch

pc: dont handle pending floating point exception in fpsave thru FPOFF

pc: remove mmuinit0().

xen: fix cross build, fix mtrr dummy functions, remove segmentation constants, not used on xen.

zynq: added zynq kernel

zynq: lilu dallas, multicore

zynq: active.machs = 1

zynq: differentiate various pagefault types in faultarm()

zynq: dont do install target by default in the mkfile

zynq: enable branch prediction

zynq: enable prefetch hints and drop-prefetch

zynq: fix kernel configuration so it builds

zynq: fpsave() and fpclear() both need to disable the fpu

zynq: implement µs()

zynq: only tmpmap() while splhi(), remove unneeded coherence() after tmpunmap(), splhi() in l2free()

zynq: set mainmem->maxsize so kernel malloc() wont fail after 4MB

devip: exclude “don’t fragment” bit from ipv4 reassembly test

devdraw: remove broken color palette blanking

devmnt: handle rpc buffer exhaustion on mntflushalloc()

devvga: disable hardware blanking when switching drivers, check softscreen

devvga: use uintptr for VGAscr.paddr and VGAscr.storage

sdaoe: add to pc64 config, allow aoedev= shorthand for id!lun -> id!#æ/aoe/lun

sdiahci: sanitize ahci pci bar

sdide: add vid/did for 82801IIH Intel Q35 IDE controller (thanks kenji)

sdloop: hardcode Enotup[] string to avoid devaoe dependency

sdvirtio: move common “queue i/o and wait” code into vqio() function, handle notify suppression

sdvirtio: provide enable() and disable() functions so it can be switched off

vgavesa: get rid of the vesa kproc

igfx: work in progress intel graphics driver

igfx: get edid information from lvds

igfx: implement hardware cursor

igfx: support for X200 (thanks bigato)

igfx: support for X60t with 1400x1050 panel

igfx: vga support on x230, fix fdi link setup

igfx: vgadb entries for x230, x200s, l1730p, lcd2190uxp, x60t and x301

iwl: add “reset” ctl message to software tigger device reset


acme: allow typing ‘\n’ in window tags

acme: fix buffer overrun in xfidutfread() and xfidruneread(), cleanup

acme/win: fix fswrite() not assuming iounit < EVENTSIZE

ape: add fprint %z format (thanks Ori_B)

audio/flacdec: fix pcmconv pipeline race (thanks mischief and henesy)

aux/vga: vesa scaling modes

aux/vga: display switching for Intel adapters

aux/vga: scaling modes for VESA

aux/wpa: experimental wpa2 enterprise support

cfs: change default mountpoint to /mnt/cfs and fix the manual (thanks mischief)

disk/mkfs: add -o flag to list source files

factotum: implement proto=mschapv2 client role

hjfs: fix missing superblock dirty mark when reaming

hjfs: make -m default 4 MB instead of 40 KB

ip/ipconfig: set ndb database file with -f argument

ircrc: use aux/trampoline or tlsclient for connections, add -T flag for tls

kbfds: delete autogenerated latin1.h file when mklatin fails

kbmap: fix sprint() buffer overflow (thanks silasm)

ndb/cs: fix spelling (thanks mischief)

nusb/kb: fix alt/altgr being swapped for some reason

nusb/serial: fix nusb/serial hang with ftdi

pci: import pci script and updated database from 9atom

png: fail on invalid bpc

qmail: call mail instead of smtp with the wrong path

sam: ‘^’ and ‘_’ cmds; same as ‘<’ and ‘|’ except that stdout goes to the command window

stats: handle ‘q’ to close

tcs: update charsets. Fixes issue #214

tee: get rid of openf[100] array and just dup() filedescriptors to 3+[0..n-1]

terminus font: update .font files, remove references to old vga bitmaps

upas/nedmail: do not recursively plumb email multipart attachments in print command

various cmds: replace magic numbers with Kdel/Keof, etc

vblade: add erik quanstros vblade utility (with fixes for amd64)

vnc: put newlines in verbose messages

vncs: turn off auth with -A, do not require -c for -x

webcookies: avoid rereading and rewriting the cookie jar file all the time, dont return deleted cookies on search

webcookies: only sync the jar when dirty on clunk


libc: more strict checktree() for poolcheck

libbio: add Bfdopen() from plan9port

libflate: fix wrong adler32() length calculation (thanks qrstuv)

libdraw: don’t deference nil display in freefont

libdraw: don’t redraw input box in enter/eenter when mouse is moved outside the rectangle

libmemdraw: fix fd leak in openmemsubfont and memory leak in freememsubfont libmemdraw: never point Buffer.alpha to nil (thanks mischief)

libip: skip ipv6 loopback address (thanks mischief)

manual pages

6in4(8): document ayiya

factotum(4): document mschapv2 and wpapsk protocols

hgfs(4): add SOURCE and HISTORY to man page (thanks, spew)

pci(8): document vid/did argument, fix usage

plan9.ini(8) man page: update links to iwn and ral firmware blobs

rc-httpd(8): add HISTORY to man page

xargs(1) man page: add HISTORY (thanks, jpm_)