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

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





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









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




New date/time formaring/parsing API in libc

Kernel updates for Raspberry PI4 8GB model

Intel wireless driver now supports 8000 and 9000 family cards

New Thinkpads now fully supported: T480, T495

Big kernel PCI code overhaul


archacpi: use 64-bit uvlong for physical addresses

audioac97: use 64-bit physical addresses

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

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

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

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

aux/acpi: forgot to commit -p option

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

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

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

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

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

bcm64: handle 8GB of physical memory for raspberry pi4

bcm64: increase maximum segment size to 8GB

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

bcm64: use uvlong for ISAConf.port

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

devether: print Ether.port as 64-bit uvlong

devip: fix parseipmask() prototype in ip.h

devip: implement ipv6 support in ipmux packet filter

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

devlml: use 64-bit physical addresses

devmnt: print chanpath for unexpected reply tag

devpccard: use 64-bit physical addresses

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

devpnp: print pci membar as 64-bit uvlong

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

devusb: print Hci.port as 64-bit uvlong

devvga: use 64-bit physical addresses for framebuffer

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

etheriwl: add Wireless 8260 card

etheriwl: add for Intel Wireless-AC 9260

etheriwl: add support for Intel Wireless AC 8265

etheriwl: delay before crystal calibration

etheriwl: don’t break controller on command flush timeout

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

kbdfs: add a compose sequence to type ⑨

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

kernel: don’t strip binaries in bootfs.paq

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

kernel: get rid of unused ucallocb

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

kernel: massive pci code rewrite

kernel: remove unused segment argument in freepte()

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

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

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

pc, pc64: implement 64-bit pci membar support

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

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

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

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

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

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

pc/pcmciamodem: cast i/o port to ulong

pc/pmmc: check pci membar type

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

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

sd53c8xx: use 64-bit physical addresses

sdiahci: use 64-bit physical addresses

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

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

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

sdnvme: make sure pci membar type is memory

sdnvme: use PCIWADDR() instead of PADDR()

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

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

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

usbuhci: make sure pci membar type is i/o

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

usbxhci: use 64-bit physical addresses

wifi: add packet timestamping support


7c: fix wrong type on OASxxx operations

cc: promote integer constants according to c99 spec.

cpp: fix mutually recursive macros


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

ape/libdraw: add missing eenter (thanks phil9)

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

ape: add missing rerrstr.c

ape: make libplumb available under ape.

ape: simplify mkfile (thanks amavect)

ape: stdio.h: correct return type of putc

ape: stdio: fix warnings, make code more standard

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

libc: introduce new time and date apis.

libc: ignore ‘?’ in date format strings

libc: make yday 0-based, as docs suggest

libc: tmparse: should ignore leading whitespace

libc: tmparse: put in local timezone hack

libc: tm2sec: clear new fields in tm

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

libplumb: add missing mkfile

libttf: check directory() result

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


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

acme/win: add trailing space to window tag

acme/win: fix window recreation command

acme: add missing logf.c

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

acme: implement position-dependent scroll-wheel scrolling

acme: import changes from plan9port (thanks jxy)

acme: import event log from plan9port (thanks fshahriar)

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

audio/mp3dec: add -s SECONDS option

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

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

audio/oggdec: allow -s 0

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

aux/cpuid: flush instruction cache of after patching trampoline

aux/getflags: fix named rune arguments.

aux/ms2, aux/na: fix warnings

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

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

date: use new libc date apis.

dc: increase exponent limit (thanks unboe, lyndon)

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

diff: support unified diff via -u

faces: remove log support

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

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

games/nes: workaround for truncated chr

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

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

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

imap4d: fix mkfile to have the correct default target

imap4d: get rid of unixdate/unixfrom handling

imap4d: reject invalid month in date2tm()

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

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


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

ip/httpd: fix ‘mk nuke’

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

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

ip/torrent: try harder allocating ports

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

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

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

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

png: remove bogus chanlen warning

pre-lib9p servers: fix incorrect Tversion handling

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

qball: remove unused #include <stdio.h>

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

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

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

rc: avoid stat calls for directory globbing

replica: fix mkfile script installation (thanks Amavect)

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

seconds: use new libc date api

seconds: tolerate trailing whitespace in dates

snoopy: add ipmux pseudo protocol

sshfs: update usage text to match man page

sshnet: prevent ssh process from keeping the mount alive

syscall: utility overhaul

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

syscall: fix build problem caused by stale tab.h

upas/fs: extract proper date from unix header

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

upas/fs: fix memory leak in ref822()

upas/fs: fix truncation of plumb date

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

upas/fs: move unixheader handling to parseheaders()

upas/fs: port date parsing to libc apis

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

upas/fs: remove now unused Mtrunc mimeflags constant

upas/fs: remove unused function date822tounix

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

upas/fs: wait until the index becomes unlocked

upas/fs: make imap debug logging less noisy

upas/marshal: make attachment failure fatal

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

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

upas: convert to tmdate, change timezone format

upas: fix appendfolder timestamps (thanks umbraticus)

window: fix error exit with the -m flag

vmx: add Kmod4 key

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

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

vmx: use actual system kbmap

vmx: use _tos->cyclefreq (thanks cinap)

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

vncv: implement rfb 3.8 protocol (thanks Iruatã)


9p(2): fix typo

acme(1): document log file in manpage

audio(1): add new -s SECONDS option

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

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

cifsd(8): fix typo (thanks senthil)

faces(1): remove bespoke date parser

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

graphics(2): fix typo

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

mk9660(8): fix reference to proto file format

tmdate(2): document tz field

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

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

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

tmdate(2): fix name of tm struct

tmdate(2): fix typo (thanks mveety)

torrent(1): update url in examples section

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

walk(1): improve wording, formatting

walk(1): fix typos


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

bullshit: decentralized ActivityPub