front 9FRONT "PLAN9-HATERS front


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

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









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









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




*.386.iso 386 pc (more drivers)

*.amd64.iso amd64 pc (less drivers)

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

*.pi3.img arm64 raspberry pi 3 and 4


9bootpxe: continues the war against random DHCPv6 DUIDs

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

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

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

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

bcm: use extended small pages so XN bit can work

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

bcm64: fix kernels cmpswap() function

bootrc: fix wrong redirections after &

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

bootrc: fix comment typo (thanks Robert Ransom)

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

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

cycv: add cycv kernel

cycv: support for registers

devcons: fix permissions for reboot and sysstat

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

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

devip: fix ifc recursive rlock() deadlock

devip: fix packet loss when interface is wlocked

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

devproc: cleanup procwrite size checks

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

devproc: fix syscalltrace read for ratrace

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

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

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

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

ether8003: use physical addresses for ISAConfig ether->mem

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

ether82563: fix multicast for i210

ether8390: remove unused variables

ethercycv: add cycv ethernet driver

ethercycv: dont spin on MDIO

kernel: add missing FPillegal definition for kw and omap kernels

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

kernel: avoid selecting the boot process in killbig()

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

kernel: cleanup makefile for $CONF.$O target

kernel: cleanup the software mouse cursor mess

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

kernel: fix multiple devproc bugs and pid reuse issues

kernel: implement portable userinit() and simplify process creation

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

kernel: improve page reclaimation strategy and locking

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

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

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

kernel: remove unused mem2bl() prototype

kernel: remove unused macro from chan.c

kernel: simplify exec()

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

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

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

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

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

pc, pc64: add new memory map code

pc, pc64: remove “got unassigned irq” prints

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

pc: fix ldt memory leak in procsetup()

pc: fix mp boot regression due mistake in mkfile

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

pc: zero rampage() memory (thanks LordCreepity)

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

pc64: enable uartpci (thanks taw9 for testing)

pc64: remove rampage() nil check

ppc: remove old duplicate of devtls.c

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

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

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

sdiahci: force Hudson SATA Controller to AHCI mode

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

usbehci: avoid kproc() while holding poll lock

usbehci: release ctlr ilock before calling pollcheck()

usbxhci: fix wrong control endpoint 0 output device context address

vgai81x: remove unused mach0 variable

xen: fix rebootcode linkage

nusb/audio: set frequency only when supported

nusb/kb: add quirks for Elecom HUGE trackball

nusb/usbd: cleanup processes on unmount

nusb/usbd: fix /env/usbbusy bug

nusb/usbd: fix portreset error handling


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

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

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

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

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

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

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

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

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

cc: fix ccom idempotency

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

cpp: Improve the posix preprocessor.

cpp: Make priority array max size explicit.

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

cpp: dont overflow the stack

cpp: evaluate #if expressions using vlong

cpp: fix operator associativity

cpp: missing headers rate a FATAL.

6c: conserve registers for floating point operations

6c: remove mystery sys.c file

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

7l: handle dupok flag in TEXT/GLOBL data

?a, ?c: fix macro debug prints

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

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

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

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

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

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

qa: remove ALLOC() and ALLOCN() macros

vl: remove unused mysbrk() prototype

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

yacc: fix crash with absolute paths

yacc: stop fiddling with path construction.


ape: #pragma ref no longer exists

ape: Add stdbool.h to ape

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

ape: add intmax_t/uintmax_t as required by c99

ape: add missing conversion flags for scanf

ape: add va_copy macro, conforming to c99

ape: bring stdint.h closer to spec

ape: fix alignment in malloc()

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

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

ape: remove C99_SPRINTF_EXTENSION define.

ape: turn ptrdiff_t into a 64 bit type

ape: use #error when missing define

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

lib9p: fix typo

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

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

lib9p: reject reads on closed fids and writes on directories

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

libFLAC: 1.3.1 -> 1.3.3

libaml: implement ToDecimalString and ToHexString operations

libc: always zero initialize Tm structure for tm2sec()

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

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

libmemdraw: remove inexistent build targets

libsec/base58enc: null-terminate the result

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

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


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

“”: output previous action to stderr

acme, sam: handle >1GB files correctly

acme/Mail: show and update flags

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

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

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

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

acme: Reset click count on mouse motion.

acme: Restore call to movetodel() in colclose

acme: add missed error checks

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

acme: fix double free

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

acme: fix some memory leaks

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

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

acme: triple click selection

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

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

aux/getflags: improve flagfmt parser

aux/getflags: remove rogue debug print

aux/getflags: support named flags

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

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

aux/realemu: fix exit code

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

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

awk: fix race condition with sub-mk in mkfile

awk: make empty FS unicodely-correct.

backup: Set execution bits in backup scripts

date: make ISO 8601 time output compatible to RFC3339

doctype: fix -T option

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

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

dossrv: output iotrack error message to stderr

dtracy: show line numbers in errors

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

file: try ismp4() before ismp3()

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

g: walk arguments

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

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

games/linden: NEW

games/turtle: NEW

games/v8e: NEW

grep: error if sbrk fails

grep: fix handling of -b flag

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

hgfs: fix loadrevinfo() for empty log bug

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

ip/cifsd: implement SMB_SET_FILE_UNIX_BASIC for wstat

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

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

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

ip/ipconfig: ignore default routes targeting ourselfs

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

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

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

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

mothra: (facelift) flat ui is in.

mothra: fix a few errors in previous patch

mothra: make user interface monochrome

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

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

ndb/dns: handle empty $DNSSERVER

paint: change colors in the palette with button 3

ramfs: don’t use Srv.nopipe

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

rc: fix code serialization for PIPEFD (thanks BurnZeZ)

rc: fix heredoc crash

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

rio: fix bug causing short reads of wctl files

rio: fix goodrect() bug (thanks mike)

rio: pad window status strings in wctl files

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

sam: ^ does not need current file

sam: add $%dot (thanks kvik)

sam: Bump protocol version for Ttclick

sam: triple click selection

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

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

samterm: fix typos in time calculation

seconds: hack around timezone issues.

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

sed: allow whitespace after ! negation (thanks k0ga)

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

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

sshnet: fix fork race conditions

tar: Add pax extended header support

tar: fix memory corruption in extract1 (thanks petter)

tar: Fix directory heuristic for long file names.

tar: Parse global pax header in the right place.

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

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

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

upas/fs: imap fixes and improvements

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

upas/fs: plumb flag changes.

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

upas/fs: remove useless loop in rf822()

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

upas/fs: fix ref882 reference parsing.

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

upas/fs: simplify flag parsing.

upas/marshal: fix printinreplyto function

vt: triple-click to select non-whitespace segment

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

walk: remove superfluous newline

Mail: Remove reply print.

Mail: delete obsolete comments (replies are flagged elsewhere)

Mail: show urls in html messages.


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

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

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

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

mail(1): fix typo

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

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

page(1): fix troff manual example

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

seconds(1): add SOURCE section

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

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

walk(1): formatting/corrections

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

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

flate(2): fix typos (thanks rgl)

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

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

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

notify(2): fix typo

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

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

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

draw(3): typo dp

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

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

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

rio(4): fix bad cross-reference format

rio(4): update description of wctl file format

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

image(6): fix typo

9boot(8): Document 9bootfat limitation.

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

console(8): add console command and manpage

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

delay(9): improve language

kproc(9) and sleep(9) corrections

sleep(9): recover comment with the right reference


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

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

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

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

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

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

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

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

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

timezones: change DST timezone string for South Australia

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

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

words: transgender