Notable changes in this release:


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

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






   ; sha1sum -2 256 9front-9442*gz
   dd67daad1bf2397c19543eeeb4aa6e2642febdcce3100556bf4b1af7cb38e252      9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.386.iso.gz
   c577bdd3190211fd0e9b46c1afada712b9a9ee460a4d5a4c679e522f5f72eda6      9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.amd64.iso.gz
   012812e745e642b1c8d27fc58b001a34f0ab4f605660c89cbded41ca20cce503      9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.pi.img.gz
   6313e1d028380a11228613c2a78f76f28685a119f1ab8c6aae5393dedc17db02      9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.pi3.img.gz
   83b1dd8acaacd0dcb9bed188cbf33f3a410486d1724d15bcef4646c0288bec95      9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.reform.img.gz










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


by cinap




Oscar Zoroaster Phadrig Isaac Norman Henkle Emmannuel Ambroise Diggs



acpi: /mnt/acpi → /mnt/pm

aux/acpi, aux/imx8pm: stats(1) expects two numbers for each cputemp reading

aux/acpi: fix division by zero (thanks umbraticus)

aux/acpi: mount -a on /dev instead of /mnt/pm; ctl → pmctl

aux/acpi: simplify/rework; support “power off” via pmctl

aux/imx8pm: add core/gpu/vpu temp read support (kernel counterpart is TBD)

aux/imx8pm: add relative brightness setting (-+N), useful for key bindings

aux/imx8pm: calibrate per documentation (but with questionable values)

aux/imx8pm: hide gpu and vpu from cputemp

aux/kbdfs, nusb/kb: add basic media keys support; add /dev/hidNctl to change repeat/delay; fix a race condition

aux/kbdfs: correct comment regarding 0x79 and 0x7b codes.

aux/vga: misc. igfx fixes for displayport

aux/wm8960: audio controls fs for MNT Reform

aux/wm8960: disable speaker boost to avoid clipping

aux/wm8960: do the math

aux/wm8960: expose 3d stereo controls

aux/wm8960: fix chopped audio on the speakers with high volume

aux/wm8960: make jack detect work; enable thermal shutdown; fix fractional div part

aux/wm8960: provide hardcoded “speed” in volume file

aux/wm8960: reduce popping, clean up

aux/wm8960: relative volume adjustment through the fs interface

aux/wm8960: run as master and provide more precise clock; add oneshot mode (no fs)

aux/wm8960: support 48kHz via “speed” verb

bind, mount: stop returning mount id

devarch: add name for VIA C7 Eden

devi2c: add generic i2c bus driver

devip: arp: don’t leak data in the padding of arp replies

devip: arp: make sure arpresolve() only returns single packet

devip: arp: move arp expire logic into own function

devip: do tcp mss clamping when forwarding packets

devip: fix ipv6 mss clamping

devip: get rid of Ipifc.mintu

devip: less stupid hnputs_csum()

devip: make Rproxy flag explicit

devip: replicate the nat-flag (Rtrans) when superceding interface route

devip: use port/netif.h constants for ethermedium

devpci: provide a #$ device for PCI config access

devvga: fix race condition between writes to vgactl

ether8169: support for RTL8168EP chips

etherimx: fix link negotiation

etherimx: set iomux pad configiguration

etheriwl: add 7265 device id

ethervgbe: enable auto-negotiation and ipv6 (thanks arne)

igfx: Add support for Xeon E3-1200v3

imx8/gpio: add interrupt handlers support

imx8/gpio: allow 0 as “no-op” gpio pin

imx8/gpio: missed change in the previous commit

imx8/gpio: use u32int for bit mask

imx8/lcd: disable the bridge output on blank

imx8/lcd: reduce flicker

imx8/lcd: rework screen blanking

imx8/lcd: set iomux pad configuration

imx8/lcd: silly work around for display instability

imx8/lcd: toggle lcdif on blankscreen

imx8/pm: provide acpi(1)-compatible battery readings

imx8/sai, aux/wm8960: expose jack detect status in #A/audiostat

imx8/sai: do not strangle the core with interrupts on underruns

imx8/sai: double the delay; set clock explicitly

imx8/sai: flush the ring on close to avoid garbage leftovers on restarts

imx8/sai: increase watermark, run in slave mode, continue on fifo errors

imx8/sai: reduce watermark; use the fifo size reported by the platform; remove useless stuff

imx8/usbxhci: bring usb out of reset

imx8/usbxhciimx: fix a set and not used warning

imx8/usdhc: cleanup, set pad configuration

imx8/usdhc: implement highspeed mode (50Mhz)

imx8/usdhc: work around broken multi-write for now

imx8: add a semi-working SAI2 audio driver

imx8: add aux/imx8pm with lcd brightness control

imx8: add gpio helper gpioout()/gpioin()

imx8: add i2c bus driver

imx8: add iomuxpad() helper for pad and mux control

imx8: add simple i2c rtc driver for NXP PCF8523

imx8: add work in progress i.MX8MQ kernel for the mntreform2 laptop

imx8: add xhci driver for the soc

imx8: better syntax for iomuxpad() options using ~ for negation

imx8: ccm: fix sai copy-paste typos

imx8: cleanup mem.h

imx8: detect cpu lcycles() frequency

imx8: enable/expose tmu

imx8: fix install target

imx8: fix reduced lcdif pix clk workaround by enabling underflow recovery

imx8: get mac address from OTP rom

imx8: gic: irqenable → intrenable

imx8: 1.6Ghz turbo

imx8: implement /dev/reboot support

imx8: implement psci calls for system reset and multicore startup

imx8: invalidate l2 cache as well (fixes not fully cleared BSS on cold boot)

imx8: less stupid pci interrupt handler

imx8: load a plan9.ini at CONFADDR 0x40010000

imx8: mainscreen turn on!

imx8: make gpc functionality available with a powerup() function

imx8: pcie and nvme support

imx8: port usdhc driver (from bcm/sdhc) for external sdcard

imx8: provide iomuxgpr() function to access iomuxc’s gpr’s

imx8: qos magic to avoid interference between pcie and lcdif

imx8: reset lcdif and sn65sdi86 bridge before init

imx8: set virtual timer offset to zero for all cores

imx8: turn backlight off when blanking

kernel: add /rc to devroot

kernel: add chdev command to devcons

kernel: add dev dtracy provider.

kernel: add devskel for pc and pc64

kernel: allocate notes in heap

kernel: allow kiloprocs – allocate procs lazily

kernel: be more careful about argc for /dev/drivers writes

kernel: bootrc: add bootloop=

kernel: cleanup unused fields from devpipe

kernel: compute available kernel pages using sizeof(Proc*)

kernel: consistently add devbridge and netdevmedium to kernel configs

kernel: devskel: use RWlock

kernel: devwalk: correct debug print

kernel: disable wstat for devpipe

kernel: exclude ppc kernels from all target

kernel: fix freeb() for custom pools

kernel: fix noteid change race condition from devproc while forking (thanks joe7)

kernel: get rid of Proc.kstack

kernel: half NERR, refcount Note’s to avoid excessive allocations for postnotepg()

kernel: remove dead case from devpipe

kernel: simplify notify() adding common popnote() function

kernel: use 64 bits for mountids

mkdevc: fix dtracy-disabled builds (thanks ori)

nusb/disk: always allow raw scsi request (even without media present)

nusb/disk: fix interactions with libdisk

nusb/kb, aux/kbdfs: add brightness down/up media keys

nusb/kb: add “rawon”/“rawoff” to switch ctl fid into raw report output mode

nusb/kb: fix scancode for right ctl

nusb/kb: support 無変換, 変換, and ‘ひらがな / カタカナ’ keys

nusb/ptp: increase payload

nusb/usbd: retry opendevtata() a few times on attach (work around mnt-reform trackball)

pc/rtc: make sure string is NUL terminates for rtc write

pc64: half KSTACK to 8k.

reform/audio: remove DAC vol limit; discharge HP caps on init

reform/audio: remove HP caps discharge; faster hp/spk switch and (un)mute response

reform/audio: use soft-mute to toggle DAC

reform/pm: add keyboard light level controlling to /dev/light

reform/pm: calculate time to full (dis)charge; low→warn capacity; endless loop protection

reform/pm: kbdoled: allow any size/depth of uncompressed image - convert ourselves

reform/pm: kbdoled: clear the OLED on zero-length write

reform/pm: lpc comms: increase delays to 80ms

reform/pm: lpccall: read as much as possible after the command; clean up

reform/pm: measure CPU temperature only when requested, disable monitoring right away

reform/pm: oops. do not invert

reform/pm: power off via the keyboard first

reform/pm: provide /dev/kbdoled to display a 126x32x1 bitmap on the keyboard OLED

reform/pm: serve lpc readouts over a queue to avoid lockups on other requests

reform/shortcuts: change to use available media keys via Hyper

reform/shortcuts: negative step values

reform/shortcuts: use Kmod4+esc to (un)mute the audio

reform/shortcuts: use media keys for LCD brightness control

reform: add pmctl to read more info and to turn power rails off; manpages

reform: add reform/shortcuts

reform: only override console=0 when no plan9.ini is passed

reform: tweak manpage and reform/audio a bit

sdnvme: add dmaflush() instructions, move to port/

sdnvme: avoid “empty if body” warning

sdnvme: correct mode/serial/firmware string lengths

sdnvme: fix missing unlock() in submit queue full case

sysproc: raise limit on #! lines, and allow quoted args

tcpmssclamp: only check the first ipv4 fragment for tcp header

tcpmssclamp: pass correct size tcpmssclamp()

uartimx: fix interrupts

usb: fix ehci isochronous “in” split transactions

usbsdmux: Add program to control usb-sd-mux device

usbxhci: eliminate “set but not used” warning

usbxhciimx: set iomux pad configuration

zynq: correctly specify dolock flag to postnote()



ar: print output to stdout (thanks uramekus)

cc: take our pickle out of the peephole

dtracy: correctly look up aggregate keys

dtracy: make timer probes run in interrupt context



ape/bsd/bind.c, ape/bsd/listen.c: Set local IP.

ape/bsd/bind.c, ape/bsd/listen.c: Use _syserrno.

ape/bsd/bind.c: Do not issue “bind *”.

ape/bsd/bind.c: Do not pretend that the port could be negative.

ape/bsd/listen.c: Do not try to issue “announce *”.

ape/bsd/listen.c: Drop “bind 0”.

ape: fix warning building mkstemp

lib9p: double the buffer for /srv/$service

libFLAC: update 1.3.4 → 1.4.0

libc: shorten strchr and runestrchr

libc: tmdate: provide better parse errors

libc: tmparse: remove incorrect isalpha definition

libdraw: bikeshed formatting

libdtracy: fix wrong key size comparsion in dtarecord()

libflac: work around kencc running out of registers on arm

libndb: increase buffer size to allow longer lines

libtags: opus/vorbis: make sure to get to the last frame to have the full duration

libtags: pick R128 gain

libtags: try other formats after id3v2 is found

libtags: vorbis, opus: ignore tags past the ogg page



audio/flacdec: don’t run pcmconv on s16r44100c2

audio/mkplist: don’t fail entirely if a directory is not accessible

audio/mkplist: leverage parallelism

audio/zuke: “r” key - “repeat one” mode, based on the patch from qwx (thanks)

audio/zuke: add slow scrolling

audio/zuke: basic replay gain support

audio/zuke: clear out enter() prompt image if search failed

audio/zuke: clip scrolling to the edges

audio/zuke: display currently enabled modes when stopped

audio/zuke: don’t blink the mouse pointer while idling

audio/zuke: don’t fall into the rathole

audio/zuke: faster redraw without flashing - XRGB32 with backing image

audio/zuke: fix newly introduced bugs

audio/zuke: fix off-by-one in playlist loading; initialize scrolling to avoid jump on first track

audio/zuke: fix playlist plumbing while in shuffled mode

audio/zuke: fix repeat and replay gain modes not showing when playing network streams

audio/zuke: fix seeking with mouse

audio/zuke: fix wrong string width of playback position calculated on network streams

audio/zuke: fix/enable playlist loading via plumber “audio” port

audio/zuke: kill off decoders; use more OCEXEC

audio/zuke: less garbage dereferencing, stop interrupting decoders

audio/zuke: properly report empty playlist error

audio/zuke: put the search input on its own window

audio/zuke: redraw as soon as search input is enter (not only cancelled); more chance for non-blocking redraw

audio/zuke: redraw in a separate thread - no audio dropouts on scrolling, more responsive

audio/zuke: rewrite rendering logic

audio/zuke: seekto: vlong, unsigned doesn’t work well for negative numbers…

audio/zuke: update ICY title from the stream metadata while playing

audio/zuke: use digits to enter exact seek position

audio/zuke: use percentile to calculate relative widths of columns

auth/acmed: remove obsolete ip/acmed.c

auth/box: -s, -. flags

auth/box: bind in the binary by default

auth/box: build restricted namespaces using components from the parent.

auth/box: don’t bother switching to none

auth/box: preserve cwd name, but clear it out

auth/newns: add chdev command

aux/9pcon: add support for Rerror in assert mode

aux/9pcon: add assert flag

aux/9pcon: style

aux/aout2uimage: fix text section size rounding (for data section alignment)

aux/listen: Allow per service namespace files

aux/listen: remove Service struct

aux/listen: remove argument clutter

aux/listen: remove special cases for depreciated datakit

aux/listen: remove unused cpu global

aux/txt2uimage: helper for generating uimage script files

awk: correct incoherent cell in assignment (thanks smj, mpinjr)

awk: initialize records fully in recinit()

bar: a status bar program

bar: leave last aux on screen on eof

cdfs: handle block sizes correctly

chdev: change kernel driver access

chdev: dont pollute environment

cwfs: fix iounit negotiation

delkey: stop being clever about which factotum to use

diff: avoid empty hunks when there are no changes

diff: clean up some comments

diff: fix style

diff: retain original file names

disk/mkext: fix nil dereference in arg parsing

exportfs: fix clunk of first attach with -S

fshalt: allow passing a kernel to ‘fshalt -r’

fshalt: optionally use /dev/pmctl to shut down the machine

fshalt: remove unused variable

fshalt: shut up about #P not being present

fshalt: support relative paths to the new kernel

g: add .ha (Hare)

games/dmid: don’t buffer output

games/doom: add “m_forward” cvar to disable vertical motion move; actually implement use_mouse

games/doom: add optional autorun

games/doom: fix glitchy mouse movement

games/doom: raise max scale factor for 4k

games/doom: raise static limits

games/doom: rename mouse use key for what it is and remove double click

git/commit: fix typo in if statement

git/commit: user better defaults for username

git/common.rc: create required directories

git/compat: expand to cover go bootstrap

git/compat: fix ‘git init –bare’ and ‘git ls-remote’ (thanks floren)

git/compat: fix init

git/export: use native diff

git/get: keep sending what we have until we get an ack

git/hist: add command to show history of files

git/hist: fix with repository other than /

git/hist: make it work in subdirectories

git/import: fix handling relative paths

git/import: remove removed files from index after commit

git/import: squash leading/trailing/consecutive blanks and strip trailing space

git/import: use patch(1)

git/log: fix log count

git/log: only count the messages we show when limiting counts

git/log: support -n option to restrict log counts

git/merge: correctly preserve permissions when merging

git/merge: preserve exec bit correctly

git/pack: add support for skipping ssh signatures

git/pull: fetch all branches (please test)

git/pull: remove ‘-b’ and ‘-a’ option

git/query: implement range using paint()

git/rebase: allow rebase without a clean tree

git/rebase: remove unnecessary use of @ operator

git/send: fill in ‘theirs’ object, even if we miss it

git/serve: log correct error message

git/walk: don’t list untracked files after removal

git: clear status on whoami success

git: improve error on short read

git: performance enhancements

git: rename internal ‘git/fetch’ plumbing to ‘git/get’

history: Rewrite history 9front was first

hjfs: do not truncate lines on /adm/users write

icanhasvmx: our vmx requires unrestricted guest too

ip/dhcpd: properly skip past ipv6 addresses in addrsopt

ip/dhcpd: quiet up syslog

ip/ftpd: use chdev in /lib/namespace.ftp

ip/ipconfig: refactor plan9 vendor parsing

ip/ipconfig: we do not want icmp advice errors on our dhcp connection

ip/sol: handle timeout on password entry for digest auth

ip/tinc: fix ping pong racing causing recalcs and deleting nodes

ip/torrent: fix silly readn() error check (thanks pr)

ktrans: cast switch statement for arm

ktrans: clean headers

ktrans: don’t leak on conflicting jisho lines

ktrans: gui and man page rework

ktrans: listen on lang port for plumber

ktrans: revisit grammer handling and do some spring cleaning

ktrans: tow inside the environment

ktrans: use stdio by default

ktrans: xin chào

ktrans: こんにちは!

ktrans: 你好

ktrans: 新しい降り

make: command’s output plumbable

man: turn on troff -mnihongo if JP font is used

mothra: enable mousewheel scrolling in history list

mothra: get rid of soft hyphens

mothra: make scrollbar style consistent with other applications

patch: apply patches atomically

patch: fix bounds check for hunk scan in forward direction

patch: fix consecutive deletions

patch: fix deletion of files

patch: fix line bounds check when searching for hunk

patch: fix line calculation to avoid redundant searches

patch: fix uninitialized Fbuf during dry run

patch: handle stripped/empty lines mid-hunk

patch: implement a new, simpler patch program to replace ape/patch

patch: improve hunk search

patch: make slurp() return void

pc: remove -n option and check if stdin is cons instead

plot: fix disc and circle operations

rc: squelch ‘Write error’ warning

rcpu: show error when we auth but don’t connect

rio: /dev/label should just ignore offset

rio: add ‘none’ attach option to wsys

rio: add /dev/kbdtap

rio: close the display on the way out

rio: correct error message

rio: correct tap code

rio: ensure single reader and single writer for kbdtap

rio: kbdtap deadlocks are verboden

rio: kbdtap style tweak

rio: make it harder to deadlock from kbdtap

rio: more pointy edges with none attach

rio: prevent some more keyboard lockups

rio: require a confirmation for Exit

rio: return ‘global’ size for none /dev/wctl read (thanks umbraticus)

rio: show Exit in subrios

riow: fix uninitialized field

riow: handle ckKz properly (thanks qwx); better sticky mode (label-dependent)

riow: keyboard-controller for rio

sam: ignore autoindent in cmd window

skelfs: dont mount if not asked to

snoopy: add “ippkt” protocol to demux ip packet interfaces without media header.

spf: limit recursion depth to prevent ddos (thanks tijay, iashiq5)

splitmbox: split a mailbox into mdir format (thanks, umbraticus)

src: ‘test -x’ instead of ‘test -f’

src: search for binaries in path, not random places

ssh: send interrupts even when we’re not in raw mode

togif: fix a typo - don’t free the same image we’re going to use

upas/Mail: check if plumb attrs are nil

upas/dkim: dkim signing for upas

upas/fs/imap.c: additional sanity checking during Expunge to avoid suicide

upas/fs: clear errstr after chkunix

upas/fs: support date format used in RFC 4155 mbox files

vncv: allow the use of the Mod4 (Super) key

vt: fix home/end sequences in xterm mode

vt: increase buffer size

vt: quote special characters in command arguments

walk: include qid version in deduplication

window: add wsys ‘none’ attach to attempted wctl search

window: fix regression w.r.t subrios



9pqueue(2): fix typo

auth(8): bugs have been squashed

auth(8): specify what gets put into the environemnt with ‘-s’

auth(8): sync usage messages for auth/box

camv(1), nusb(4): add more details on camera operation

cpu(1): why did we have an empty file? (thanks llamaa)

fork(2): Document RFNOMNT edge cases.

fork(2): fix commas in RFNOMNT references

fork(2): fix parens in RFNOMNT references (thanks Amavect)

fshalt(8): document -r kernelpath feature

git(1), gitfs(4): fix style and typos (thanks schwindl)

git(1): remove documentation for deleted ‘-b’ option (thanks llamaa)

i2c(3): Add documentation for kernels devi2c

i2c(3): fix typos, thanks quinq

import(4), oexportfs(4): more empty files removed.

imx8pm(8): add manpage

ip(3): Discuss local IP addresses for “announce” and “bind”.

ktrans(1): added a history section (thanks moody!)

ktrans(1): documented $jisho and made some improvements. (thanks to Kenji Okamoto, cinap, BurnZez, romi and Aaron for your work on ktrans!)

ktrans(1): remove README files

ktrans(1): typo

ls(1): Make man page synopsis consistent with usage output

mpc(1): fix typo

nusb(4), camv(1): add nusb/cam description, introduce camv manpage

paqfs(4): fix paqfs manpage

patch(1): add the manpage

patch(1): remove bell labs patch scripts

patch(1): remove options that don’t exist

reform(1): add a note about battery readings

rio(4): talk about kbdtap

riow(1): remove the filter warning as it passes unknown keys now

rsa(2): fix X509reqtoRSApub(…) signature

sam(1): clarify “” works on dot just like “look”

skel(3): → skelfs(4)

sol(8): fix example (vncv vs vnc)

tlssrv(8): update example path to imap4d

wm8960(8): add manpage

wm8960(8): fix wrong source and see also

zuke(1): document current track printout on stdout



/lib/font/bit/pelm: use Korean fonts

/lib/font/bit/terminus: remove duplicate OFL license and refer to /lib/legal

/lib/font/bit: add Adobe Source Hangul Sans

/lib/ktrans: added tools to fetch skk dicts and convert them to ktrans jishos

/lib/rob: I told this anecdote in an internal talk at Google. You might have seen it then.

/lib/rob: Sockets are just so unpleasant

/lib/theo: I want to say more.

/lib/theo: Isn’t that bad?

/lib/theo: The man page says “don’t do that”.

/lib/theo: This is a bug in a diff I put into snapshots.

/lib/troll: 9 is not nginx-level scale

/lib/troll: Plan

/lib/troll: [9fans] Power mac support

/lib/troll: plan9 secret society

/rc/bin/9fs: case 9front: restore extra/ and iso/

/rc/bin/9fs: fix case 9config for new contrib.9front.org server.

/rc/bin: amend usage misdirections (thanks umbraticus)

/sys/games/lib/fortunes: Use a client written in Go? – Skip Tavakkolian

/sys/lib/dist/mkfile: add target for mnt-reform image

/sys/lib/dist/mkfile: create a default plan9.ini for reform image

/sys/lib/kbmap/jp: correct Zenkaku control character

/sys/man/8/smtp: document missing flags (thanks, chris)

/sys/man: fix minor complaints from checkman

/sys/src/boot/reform/mkfile: download official u-boot for the mnt-reform

/sys/src/boot/reform: generate boot.scr

/sys/src/cmd/mkfile: append to $NOMK so user can provide their own

florenate: not funny

fontsel: Japanese sample text

fontsel: a font selector program

fontsel: sample Korean text

inst/prepdisk: fix invocations of test(1)

inst: make bootsetup work for on pc architectures

kbmap: add latin american keymap (thanks ssf)

move and rename MNT Reform 2 support utilies, cat manpages into one

remove empty /sys/src/cmd/cpu.c

update /lib/pci

valley, feminize: these jokes suck.

vga font: add 23ed-23ef, 23f4-23fa, some of which are used in bar(1) manpage