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

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



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

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





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











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


by cinap_lenrek




khm (propaganda assist)


archacpi: make *acpi=1 the default

bcm: try ATAGS/DTB pointer from R2 on entry

devloopback: fix wrong device character (thanks romano)

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

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

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

kernel: clean up Mach structure

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

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

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

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

nusbrc: rndis with csp 0104ef

pc, pc64: increase confmem slots to 64

pc64: avoid getcr3() in mmuflushtlb()

sdvirtio: accept multi-queue devices

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

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


cc: create .$O files with DMTMP

lex: fix uninitialized fds (thanks きゐ)


lib9p: add auth* functions to man page

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

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

lib9p: remove unneccesary headers

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

libc: add encode(2) variants for custom alphabets

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

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

libsec: emulate openssl asn1 when generating x509 csr

libsec: move zero check to curve25519_dh_finish()

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

libsec: various changes to tls

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

libtags: modules: ignore empty title

libtags: trim text tags and ignore empty values

libtags: upstream updates

libtags: use CP437 as the default encoding for module formats

libtags: use nelem

libthread: generate correct acid files

thread.h: threadnonotes does not exist

threadimpl.h: remove Printsize as well (unused)

threadimpl.h: remove unused fields from Proc struct


B, sam: remove sam srv file

B: expand path when plumbing files

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

Mail: remove impliicit headers (thanks unobe)

Mail: remove message about cyclic threads

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

walk: properly format permissions

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

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

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

cpu: properly handle end of file in readstr()

crop: allow no-ops for pipelines

disk/fdisk: add OpenBSD partition type

file: detect webp files (thanks kemal)

file: recognize executable scripts, etc.

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

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

games/opl3: use correct sampling rate

git/add: clear qid cache as side effect

git/branch: diff clean and dirty lists correctly

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

git/branch: merge correct set of files

git/branch: preserve checked in permissions on branch update

git/branch: reduce execs to sync working dir

git/branch: resolve implicit branch switch before using it

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

git/commit: allow passing absolute paths

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

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

git/fetch: ensure we clean packfiles on failure

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

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

git/fs: use a better heuristic for permissions.

git/import: handle mails with line wrapping and mime

git/init: create fs dir

git/log: handle absolute paths gracefully.

git/log: show first commit as file change

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

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

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

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

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

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

git/{branch,pull}: merge files correctly

git: add missing file

git: allow local repository directories as remote uri’s

git: avoid uninterruptible temporary warning

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

git: got git?

git: handle absolute paths better

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

ip/ftpd: Add explict and implicit FTPS support.

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

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

ircrc: freenode -> oftc

iwhois: add some improvements (thanks gall0ws)

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

mkpaqfs: allow setting compression level

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

page: fix for kerTeX dvi

patch for imap when imap fails

plumber: fix substrings in match rules

printfont: load all fonts for printfont all

python, hg: tow outside the environment.

rc: add subshell-function syntax

rc: correct line numbers

rc: skip arguments to Xsrcline, Xsrcfile in codefree

juke: remove (use play or zuke instead)

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

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

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

rio: match background screen color format (thanks noam)

sam: remove refrence to /srv file in man page

troff: fix mangled fonts and character files

trofftable.rc: make work

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

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

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

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

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

venti: inform user when reducing memory consumption

venti: make error messages consistent, remove duplicate messages.

venti: warn when opening /dev/swap fails

vmx: avoid strdup() register names for register cache

vmx: emulate ps/2 intellimouse scrolling

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

vmx: implement long mode page table translation

vmx: reset virtio queue state on device reset

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

vt: allow scrolling with the mouse.

zuke: add mkplist, readtags

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

zuke: fix position formatter using a wrong type

zuke: fix seeking in paused mode

zuke: include libtags in CFLAGS

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

zuke: treat toggle as play in stopped state


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

Remove ap(1)

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

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

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

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

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

date(1): document ‘-f’ option

date(1): list all option characters in SYNOPSIS

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

git(1): we have rebase

graphics(2): fix typo

memory(2): mention tsmemcmp (thanks kemal)

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

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

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

pic(1): restore example section

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

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

segment(3): restore missing phrase

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

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

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

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

webfs(4): fix typos

zuke(1): engrish (thanks qwx)

zuke(1): more fixes (thanks humm)


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

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

/sys/src: add arm64 to installall list

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

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

distproto: sync with hg

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

fortunes: unremove

homespool: remove obsolete lp config tool

legal: mercurial -> git

legal: remove references to python and mercurial

manual: don’t match nonexistent file while preprocessing

sysupdate: clean up transitional code

sysupdate: insert tombstone

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