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_)

New 9front release “(no plan9 to hand)” (2014/12/11)


direct download

kernel and drivers:

kernel: remove implicit Proc* argument from procctl()

kernel: make use of nil vs 0 consistent in qio.c (sorry)

pc, pc64: provide access to embedded controller with #P/ec file

pc, pc64: command flag sometimes doesnt reset, just check for IBF

pc, pc64: preserve last KB of conventional memory (might contain bios tables)

pc, pc64: more conservative pcirouting

pc, pc64: add and enable ethervirtio driver

pc: get rid of fixed 8MB memory map (now dynamically between 4 to 16 MB depending on kernel size)

pc64: get rid of fixed 8MB INIMAP and dynamically map KZERO-end in l.s

bootfs: remove disk/kfs fileserver, nobody uses it

bootrc: handle multiple fs and auth addresses in netboot, always set auth= in /net/ndb

bootrc: preserve #ec/fs (thanks _sl)

bootrc: add ndb/dnsgetip resolver to bootfs so domain names can be used for fs=, auth= and secstore= (thanks mischief)

devproc: reset p->pdbg under p->debug qlock in procstopwait()

devsegment: fix segmentcreate function signature

ip: implement “hangup” ctl for udp protocol

audiohda: add pci ids for Intel 8 Series Lynx Point (thanks quux)

ether8169: add support for RTL8411B (thanks quux)

add ethervirtio driver


abaco: cleanup, handle image/x-icon, don’t use backspace as a hotkey, and remove urlconvience()/related functions

factotum: accept multiple bootstrap auth servers in /net/ndb and -a arguments

games/md, games/snes: fix memory leak on resize

games/md, games/snes: flush screen in parallel to audio (fixes buffer underruns on x200s)

games/md: fix interlace at scale 2

games/snes: save more audio state

games/snes: fix extern pic declaration to match reality

games/snes: do message display in screenproc

hpost: fix multipart/form variable name mangeling when field value contains newlines

hpost: break up tags with newlines to avoid sed line buffer limit

httpfile: use webfs, fix 9p flushes

inst: copy efi bootloader in bootsetup

io: add -E flag to access embedded controller space

ip/ipconfig: treat /32 mask as /0

ircrc: don’t quit on blank line (thanks Ray)

ndb/dns: ignore terminating authoritative flag for no-answer when more nameservers are provided

secstore: allow multiple server addresses in $secstore and multiple -s arguments

sed: fix error handling for “Output line too long” and other stuff

upas/fs: handle cwfs “file is locked” error message

upas/smtpd: accept literal ipv6 addresses in HELO/EHLO

upas/smtpd: cleanup hello() domain check code

wpa: fix quoting for essid with spaces

wpa: handle essid: with whitespaces from ether ifstats file

add ndb/dnsgetip program to resolve A and AAAA records during bootstrapping


libc: allow dial to be interrupted

libc: improve dial error handling

libc: import cleaned up syslog() function from sources

libdraw: fix atomouse

rootstub: create /sys/src/pkg and /sys/lib/pkg directories


fortunes: (no plan9 to hand)

nintendo(1): document games/gba

New 9front release “DON’T FORGET TO VOTE” (2014/11/06)


direct download

kernel and drivers:

kernel: fix segattach() rounding of va+len (thanks kenji arisawa)

pc: sanity check bda value in lowraminit() to avoid overflow with efi

pc: add *bootscreen= variable to pass pre-initialized framebuffer info to kernel

pc: enable page size extension early in apbootstrap

pc, pc64: fix ps2mouse memory corruption race

pc, pc64: allow passing RSDT pointer in *acpi= boot parameter, early bootscreeninit(), fix rampage() usage

pc, pc64: make mtrr() callable from interrupt context and before mpinit

pc, pc64: more sanity checking for lowraminit()

pc, pc64: implement acpi reset (for efi)

pc64: put return value of nsec syscall in register on amd64 pc64: syscallfmt for nsec syscall

pc64: print “Plan 9” on boot, cleanup pccpu64 files

pc64: enable rtl8169 driver (thanks awabimakoto for testing)

pc64: remove unused pdballoc and pdbfree counters from mach structure

devcons: avoid division by zero reading Qsysstat

devip: print protocol name in garbage collection notification

devip: sanity check Nchan in Fsproto()

acpi: fix pcibusno() when PCI0._ADR = 0

bcm: fix baudrate setting for serial console (thanks to aap and hiro)

efi: add experimental efi bootloader

efi: add initial pxe support (v4 only)

efi: iso filesystem support for cdrom booting

nusb/kb: dont set boot protocol on HidCSP interface when we failed to read report descriptor (thanks aap_)

compilers and debuggers:

6c/8c: eleminate moves by swaping source and destination operands in peephole pass

vi: implement _nsec syscall


acid: fix sysr1() stack corruption

cs: use /net/ether* instead /net/ether[0123], dont remove srv file with -n, dont write dns logfile

cs: fix linefeeds in syslog(), cleanup

games/nes: reduce volume, causes overflow and confuses ac97

hg: make intermediate directories like newer hg does

hgfs: make data files with meta headers having the right size after open

inst: ignore *bootscreen= variable when generating plan9.ini

ip/ayiya: experimental anything in anything tunnel protocol client

mk9660: add -E option to create EFI boot entry

ndb/dns: request recursion only for local dns servers

newt: implement ned-style address ranges

oggdec: recognize “begin of stream” packets and restart decoding

pkg: change default repo to http://9front.org/pkg/386

ramfs: fix directory check in wstat() (thanks mischief)

ramfs: allow changing mtime in wstats

realemu: make sure instruction arguments are initialized even when decoding traps

rio: fix “-cd dir” in mountspec being ignored

rio: dont serve a kbd file per window when we didnt got one from the environment

snap: change ulong return of stackptr() to uvlong for amd64

stats: handle /dev/sysstat 32bit overflow in delta calculation

sysinfo: relax regex for start of kernel boot messages

sysupdate/psfax/play: fix unquoted brackets causing rc to perform unnecessary file lookups

teg2: fix wrong l2 setshift address in wholecache() (from sources)

wpa: fork note group when going to background (thanks jpm)

add crc32

add games/gba: Nintendo Game Boy Advance emulator

add gbatype


lib9p: fix nil dereference crash in remove for directory permission check

lib9p: fix .. walk crash in deleted directory (thanks BurnZeZ)

lib9p: prevent files from being created in deleted directories (thanks BurnZeZ)

libauthsrv: allow multiple auth= attributes for backup auth servers, authdial() tries each one in order

libmemdraw: update drawtest to use same rounding in alpha calculation as libmemdraw

libmemdraw: fix byte ordering in memfillcolor()

libsec: ecgen() and ecdsasign() fix

libsec: fix hmac for keys bigger then 64 byte block size

libsec: add diffie-hellman functions


9boot(8): document efi booting

fortunes: this exact error message is in the fortunes file.

fix some manpage cross references

add /lib/terry

New 9front release “IT´S EASY BUT YOU ARE COMPLICATED” (2014/09/04)


direct download

kernel and drivers:

kernel: only complain about no images when theres nothing more to reclaim

kernel: use nil for pointers instead of 0, zero channel umc and dirrock in newchan()

kernel: xinit() use ulong for page counts, cleanup

kernel: fix todfix() race

kernel: make noswap flag exclude processes from killbig() if not eve, reset noswap flag on exec

bcm: apply richards fix for mmukmap (from /n/sources/patch/bcm-mmukmap-bug)

pc, pc64: initial machine check architecture support

pc, pc64: make pc kaddr() check reject -KZERO address (thanks aiju)

pc, pc64: fix off by one error in _multibootentry

pc64: preserve user extern registers R14 and R15 across syscalls, use Ureg.bp (RARG) for syscall number

pc64: dont save/restore DS/ES/FS/GS segment registers on syscall or interrupt, they are ignored in long mode.

pc64: cleanup syscallentry()

pc64: fix wrong Ureg* argument on note handler (thanks _sl!)

pc64: enable ether8139 in kernel config (thanks hiro)

add support for huawei e220 3g modem

add AHCI support for Intel 8 Series/C220 Series Chipset Family SATA Controller. (from sources)

add support for Intel C226 chipset PCI (from sources)

ether8139: fix pointer truncation by ulong cast, use mallocalign() ether8139: fix pointer to smaller int tuncation warning on amd64

devenv: prevent non-hostowner from creating or removing variables in ‘#ec’, cleanup

devmnt: fix potential race with mntflushfree(), remove mntstats, 0 vs nil cleanup

devproc: fix proccrlmemio bugs

devproc: fix syscalltrace error handling, conistent use of nil for pointers

ip: fix missed unlocks and waserror handlers

ip: fix memory leak in ipicadd6()

ip: set arp entry for own v6 address when not tentative

nusb: implement aijus stable uniqueue device names

nusb/kb: delete code for keyboard boot protocol handling, just use hid parser

nusb/ptp: do maxpkt reads to avoid babble error with usb 2.0 devices (thanks mischief!)

nusb/serial: implement flushes

nusbrc: ensure rpi ethernet always appears as /net/etherU0

boot: dont print errors if ethernet has no ifstats file, can happen with usb ethernet

compilers and debuggers:

5a, 5l: add LDREX/STREX/CLREX instructions

8c, 6c: generate enam.c file, just like 5c

acid: fix notestk() on amd64


5e: push ERRMAX for note message on stack avoiding unaligned stack pointer

5e: fix signed long multiply

abaco: fix double free race of p->status string (thanks BurnZeZ for the proc snap)

acme: fix crash: Get D in a new window with D being an existing directory

aux/8prefix: fix usage

cwfs: fix 32bit multiplication overflows for allocation sizes (thanks kenji okomoto)

cwfs: add optional uid argument to allow command, unify permission override code

exportfs: use argv0 instead of hardcoding “/bin/exportfs” in openmount(), dont use 0 for nil

exportfs: remove getsbuf() nil check, can’t happen

exportfs: simplify freefile() code

expr: fix missing type declarations for match(), which broke on amd64 as pointers dont fit into a long

fstype: fix kfs detection (thanks kenji okomoto)

ftpd: dont skip unmountnet() and return proper error string from dialdata()

ftpfs: dont convert names to latin when string is valid utf-8

games/doom: fix alignment issues for arm

games/md: add -2 -3 -a and trailing newline to usage

games/snes: add -a -h -m -T to usage

import: make aan (-p flag) work in “backwards mode” (-B)

iostats: reimplement iostats as a 9p filter instead of duplicating exportfs

iostats: dont prefix /bin to argv[0] when already absolute or relative path

iostats: isolate fs from interrupt notes

iostats: remove unused fcallfmt, dont leak our mount pipe end into exportfs proc

iostats: properly distribute exit status and give usefull error messages

ipconfig: cleanup code duplication in ip6cfg()

ipconfig: fix readipifc() memory leaks in recvra6 and sendra6 processes

ndb/dns: fix nil dereference crash with convM2DNS() returning reqmsg.qd == nil

page: fix deadlock with addpage (thanks BurnZeZ for the stacktraces)

ping: don’t spin when we get error reading icmp connection, print error and sleep

ptp: fix alignment assumptions for amd64

python: disable symlink and readlink compile options, ape has no reasonable way emulating it

ratrace: make multithreaded ratraces less confusing (for mischief)

rc: fix slow Xqdol(), avoid recursion in conclist(), estrdup(), avoid copying

rc-httpd/handlers/serve-static: restore simple test for file type and hardcode max_age to 1 hour (thanks eekee)

samterm: fix ctrl-b crash when cmd window resized (thanks revex)

secstore: read server from $secstore environment variable

secstore: improve error messages, newSConn() can’t fail

spred: add sprite editor

sysinfo: add cpuid info

tftpd: fix error string packet overflow in nak(), fix syslog reporting

tftpfs: make sure path is null terminated

unzip: fix usage

upas/fs: disable imap mail fetch pipeline due to race

usps: yet another update


lib9p: remove executable bit from /sys/src/lib9p/ramfs.c

libdraw: add missing borderop() (thanks aiju)

libframe: use correct text color on frinsert depending on selection (thanks sl)

libmach: fix break point instruction for little endian MIPS (from sources)

ndb/common: add ipv6-icmp, ipv6-nonxt, ipv6-opts, bootps


add 9pqueue(2), medium to low quality manpage.

nintendo(1): document snes

sega(1): add man page for games/md (and potential future sega emulators)

fortunes: it´s easy but you are complicated

9FRONT “MACS” Released (2014/06/27)


direct download

kernel and drivers:

add _nsec() syscall 53 for binary compatibility with labs distribution

kernel: fix read size calculation in pio() demand load

kernel: simplify fdclose()

kernel: remove wrong and needles mapsize check in newseg() (thanks Yoann Padioleau)

kernel: dont use atomic increment for Proc.nlocks, maintain Lock.m for lock(), use uintptr intstead of long for pc values

kernel: remove Block refcounting (thanks erik)

kernel: move syscall.$O target from config to mkfile

kernel: remove xinc()/xdec()

kernel: new pagecache, remove Lock from page, use cmpswap for Ref instead of Lock

kernel: fix cooperative scheduling for wired processes

kernel: make use of nil and 0 consistent in proc.c

pc: initiate machine reset only from boot processors in mpshutdown()

pc: clip rectangles before sending them to the hardware in flushmemscreen

pc, pc64: simplify reboot code

pc64: remove cpuserver bigboy hack and honor *kernelpercent=

pc64: fix ulongs for address of devarchs realmodemem file

pc64: allocate palloc.pages from upages

pc64: use 2MB pages for preallocpages()

pc64: fix for unsigned comparsion of (top - base) >= size

pc64: dont trap xinc()/xdec() overflow/underflow, delete unused atomic functions

pc64: implement checkmmu() debug function

pc64: remove unneeded parens in pmap()

pc64: use pc/pcrandom.$O instead of port/random.$O for RDRAND instruction support

pc64: fix MS2HZ (thanks Anthony Martin)

xen: import xen 32 bit paravirtual kernel from /n/sources/xen

xen: fix early console

audiohda: add Intel 8 Series/C220 Series support

devproc: fix close and closefiles procctl

devproc: handle 64bit address writes to /proc/n/mem files

ether8169: support for RTL8168G

ether8169: use u16int instead of u8int for C+ command register (thanks pavel / erik)

nusbrc: dont fork usb drivers into background

sdvirtio: experimental support for virtio-scsi

swap: make sure swap address sticks arround until page is written to swap

compilers and debuggers:

6a, 6c, 6l: fix copy propagation


acid: remove imagepagerefs() acid function

cpu: remove duplicate environment and chdir($home) code (thanks qrstuv)

cpurc, termrc: clarify comments by removing lies

ed: dont pass string constants to mktemp()

file: detect NES and SEGA rom files, detect djvu files, fix newline

g: add *.cpp

games/md: new Sega Megadrive/Genesis emulator

games/nes: support Battle City two players mode with joypads

games/snes: fix -T

iostats: dont sysfatal on 9p read error due to program termination

iostats: add -C flag to enable mount cache

ip/torrent: fix usage, add -A option to set user-agent

ip/torrent: use “torrent” as default user agent

nusb/usbd: serialize /dev/usbevent processing

samterm: use 4K stacks for amd64 (thanks burnzez)

webfs: explicitely unmount old /mnt/web (thanks BurnZeZ)


ape/stdio: set errno to EMFILE when running out of streams

libauth: dont print blobs in auth_proxy error strings

libc: avoid static table and supurious reads in nsec()

libc: declare pooldump in pool.h. the manual says it is public

libsec: fix dsagen 64-bit bug (thanks rsc)

libsec: use u32int instead of uint when we need 32 bit (thanks erik)

libstdio: avoid issues with aliasing in dtoa() on amd64 (from 9atom, thanks to erik and charles)


dougfacts: remove html corruption and end file with newline

fortunes: i believe any successful Plan 9 distro will need to provide some transparency in the change review process. – Skip Tavakkolian

9FRONT “PEEPHOLE” Released (2014/05/18)


direct download

kernel and drivers:

bcm: added getrevision() to vcore which allows you to get the raspberry pi board revision

pc, pc64: handle sse simd exceptions

pc64: increase sizes of physical memory bank maps

pc64: fix embrassing typo in mmuzap()

kernel: always reset notepending in eqlock, handle forceclosefgrp in eqlocks

kernel: stop queue bloat before allocating blocks

devgpio: added new device for rpi gpio (thanks Krystian!)

devmnt: abandon fid on botched Tclunk or Tremove

sdiahci: fix (unused) hba reset function (thanks erik quanstro)

sdide: never timeout or retry scsi commands from the controller driver

compilers and debuggers:

6c, 8c: fix peephole bug for eleminating CMPL $0,R after shift

cc: fix spurious warning on comparsion with scope redeclared variable (thanks aiju)

1l, 2l, 7l, kl, vl: add missing setmalloctag() dummy in compat.c


abaco: need more stack on amd64

cwfs: fix 1GB memsize limitation

games/doom: get rid of floating point code for division

gs: fix truetype interpreter for amd64

gs: remove PStorage data type from ttf interpreter

gs: fix /undefined in –setcolor– errors on amd64

hgfs: avoid revlogupdate() calls when reading root (thanks burnzez)

htmlfmt: use uhtml for character set conversion

ip/ipconfig: fix dhcp watch

play: set user-agent, otherwise server thinks we'r mozilla m(

samterm: free() after getenv()

samterm: fix esc, make ctrl+b change focus to command window

sed: remove unused ecmp function

tail: seek to EOF to check if seekable. fixes tail on /proc files

tail: fix follow for empty files (thanks cinap_lenrek)

tcs: fix inplace 16 bit unicode conversion

tcs: handle surrogate pairs

uniq: use Bsize for buffers

usps: remove redundant uhtml pipeline

webfs: use mozilla compatible user agent as default

wc: simplify and avoid buffer overflow on long filenames


libbio: do not leak memory if realloc fails

libbio: Brdstr, Bopen: set malloc tag to the caller

libbio: bio.h: add varargck argpos pragma for Berror

libip: use snprint() in myetheraddr() to prevent accidents

libthread: thread.h: varargck argpos for threadsetname


samterm: document ctrl+b

uniq: document -s option (thanks heaumer)

New 9front release “опен-сссл” (2014/04/28)


direct download

kernel and drivers:

kernel: devproc: change address format in segment file to %8p (thanks eekee)

kernel: icmp: use snprint, add more unreachable error messages (from erik quanstro)

kernel: fix printing wrong memory sizes in pageinit(), overflowed on amd64 (thanks aram)

kernel: add secstore and wpa to bootfs

pc, pc64: process acpi interrupt source override entries in a 2nd pass over the madt (APIC) table (thanks erik)

pc64: prevent dat.h from getting overwritten by ../pc/dat.h

nusb/kb: fix trackpoint on thinkpad usb keyboard

nusb: dont include <bio.h>, we'r not using it (thanks erik)

nusb/ether: add RNDIS support (tested on Nexus 5)

nusb: resolve endpoint id conflict with different input and output types

nusb: workaround for endpoints with same index but different types

pmmc: recognize generic mmc controllers (untested)

vga: add support nVidia 7600GS (and possibly 7950) (from kenji okamoto)

wifi: set ether->mbps to highest supported rate of the associated ap

etheriwl: set msb for all rates

etheriwl: add Wifi Link 5150 did

etheriwl: support another (broken) variant of centrino ultimate-n 6300

compilers and debuggers:

6c, 8c: optimize away CMPL/CMPQ reg, $0 instruction in peephole pass


aanuke: new program, print commands to kill idle aan processes

audio/oggdec: wait for pcmconv child process to exit

auth/login: find authdom instead of using hardcoded cs.bell-labs.com (thanks erik)

btc mkfile: mkdir -p

eqn: fix parallel build (thanks eekee)

games/gb: better video scaler from games/nes

games/geigerstats: fix usage() to exit

games/snes: improved cpu timing

games/snes: fix dspclock signed overflow (music stoping for minute)

games/snes: upsample audio to 44100 hz instead of setting audio device frequency

games/snes: faster scaling

games/snes: mode 5/6; overscan fix

grep: fix wrong rlcass splitting (thanks erik and kenji)

grep: fix tab2, use int instead of Rune to be compatible to 16bit rune system

newt: new program, NNTP client for use with nttpfs(4)

ramfs: fix srvname; postmountsrv() already prepends /srv/

sam, acme: fix character classes quoting for 21-bit runes

secstore: fix gfile/pfile/rfile array sizes

secstore: fix wrong “readnvram %r” error status

termrc, cpurc: exclude wpa from oom kill and swap

tr: fix 4-byte runes fix (thanks rsc)

webfs: do not unescape escape

wpa support for tcp boot, remove duplicate secstore code from factotum


libauthsrv: recognize amd64 $cputype in readnvram() to look for default locations

libc: allow announce address of the form #I1/tcp!*!564

libmach: fix printing of amd64 modrm byte register with rex prefix

libmemdraw: improve readbyte() and writebyte() routines

libsec: tlshand: fix memory leaks, fix alloc element size for certs pointer array, error handling, cleanup 36 -> MD5dlen+SHA1dlen

vgadb: add EIZO Flexscan S2231W (from kenji okamoto)


aan(8): add aanuke and HISTORY

draw(2): fix missing arg of bezspline on page 5

games(1): geigerstats args



direct download

kernel and drivers:

compilers and debuggers:





9FRONT “SUPER 9FRONT 64” Released (2014/02/16)

New 9front release “SUPER 9FRONT 64”


direct download

9FRONT “CTRL-F” Released (2014/01/04)

New 9front release “CTRL-F”


direct download

9FRONT “OFF-COLOR CLARA” Released (2013/11/29)

New 9front release “OFF-COLOR CLARA”


direct download

9FRONT “FULL ENSIGN” Released (2013/10/27)

New 9front release “FULL ENSIGN”


direct download

9FRONT “3☺☺☺” Released (2013/10/07)

New 9front release “3☺☺☺”


direct download