
NOTABLE CHANGES
In this release:
New file system gefs(4) now enabled in the installer.
CVE-2024-8158 fixed.
ip/ipconfig now support dhcpv6 dynamic allocations and handles prefix expirations.
DOWNLOAD
Multiple installation media are provided for PC, Raspberry Pi, MNT Reform, and QEMU. 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.
QEMU images are provided in QCOW2 format.
http://iso.only9fans.com/release/9front-10931.386.iso.gz.torrent
http://iso.only9fans.com/release/9front-10931.amd64.iso.gz.torrent
http://iso.only9fans.com/release/9front-10931.amd64.qcow2.gz.torrent
http://iso.only9fans.com/release/9front-10931.arm64.qcow2.gz.torrent
http://iso.only9fans.com/releases/9front-10931.honeycomb.img.gz.torrent
http://iso.only9fans.com/release/9front-10931.pi.img.gz.torrent
http://iso.only9fans.com/release/9front-10931.pi3.img.gz.torrent
http://iso.only9fans.com/release/9front-10931.reform.img.gz.torrent
; sha1sum -2 256 9front-*
6a3228b26726843e8f0f0367499aa9a2371e7877165b39f8a1f1313312e7a6cc 9front-10931.386.iso.gz
1c517c91f53b47cd9cf45ef781ad35eb6ece4d3b0aebb46c6a361a87cacace66 9front-10931.386.iso.gz.torrent
de873b02a5235940dc6e671c8f0b9d8ef42c524c59917fa97c1d921f8c37d49e 9front-10931.amd64.iso.gz
48927d8d1ff8d108e4abfec5d4b336737039aad1ab26e9dfb63374fb507f93d8 9front-10931.amd64.iso.gz.torrent
25dedc64d29e78519abfcedece647020d3bcae57a9e26fb2d658edca6bb1b6dc 9front-10931.amd64.qcow2.gz
1dc6a1956174f8992e1a2d85ccc2df6e319ce913f242c3cc0b928d071e8f9d68 9front-10931.amd64.qcow2.gz.torrent
36df268aba76b5c97e71ab55782d749692d79742954794731f66bd1925c321c1 9front-10931.arm64.qcow2.gz
88f8470d9404823b1f233257c15ce8e649f27a81f7f70c9adf9b4c770fe41730 9front-10931.arm64.qcow2.gz.torrent
be35cf3c79568e0ea4ef0cac5a6d4904055160befde491faf4d4028aa2fbdd49 9front-10931.honeycomb.img.gz
b2df6fc0fdb5a32c514e2dd1a440dc99c33af606afedbb2985590155c749cd3e 9front-10931.honeycomb.img.gz.torrent
752595241c8b2cc40b33b131ea425339c47cd7faa05258bc7f79d89bc510c656 9front-10931.pi.img.gz
9ff792fd5a4b1c8aa76ba712ef4c0a1fb725f848a0f426eefaf48d4a38ea80d9 9front-10931.pi.img.gz.torrent
d16fef44970a3f1e7c7242ec1ec496627df9fe346ef500bc2812c675dcf1f3bc 9front-10931.pi3.img.gz
0b5ea23a88dba547faa23c6eba69dd6e95279a3768e01721cff740f7f8a77fef 9front-10931.pi3.img.gz.torrent
54fc90bd833b05746eae9afc05c92f989d1ebe28810d0156bbf08f9dbfecbc6f 9front-10931.reform.img.gz
922a5712c6852ae59ec6fae71ef8161dc80323c0941086afebe80d629c96db2a 9front-10931.reform.img.gz.torrent
MIRRORS
https://iso.only9fans.com/release/
GIT REPOSITORY
http://git.9front.org/plan9front/plan9front/HEAD/info.html
DASH 1 MANUAL
http://fqa.9front.org/dash1.thistimedefinitely.pdf
dash 1 manual: http://9front.org/propaganda/books
SONGS
by qwx
http://9front.org/mp3/retrospective.r03.flac
by cinap_lenrek
http://9front.org/mp3/nexttime2.mp3
THANKS
The MITRE Corporation
KERNEL AND DRIVERS
9boot: add honeycomb
audiohda: add vid/did for Intel Tiger Lake
boot/net.rc: redirect grep error to /dev/null
devether: Fix memory leaks in ifstat reads
devether: don’t print link-status until netif is initialized
devether: handle input queue size for bypass mode
devether: make link status prints consistent
devether: print mbps only on link-up
devether: provide ethersetspeed() function to adjust queue sizes
devfloppy: fix unreachable code warning after cmderror()
devip: Fix bugus RouteHint* pointer to be passed to ipoput4()
devip: allow (NAT) hole punching for ICMP and UDP
devip: correctly return when allocating an ipmedium slot
devip: do not raise error from ipoput*()
devip: don’t send and ignore MLD messages for invalid multicast groups
devip: dont shoot the messenger (dont unbind the interface when ipipu4/ipiput6 errors)
devip: fix masks in ipmux filters
devip: increase MTU to 64k for loopback medium
devip: make “null” medium bindable
devip: panic if we exceed the number of media entries (thanks k0ga)
devsegment: don’t use ulong as negative index
devuart: Fix memory leak when reading status file
devusb: prevent double-detach and other invalid state changes
devusb: better usbid allocation, fix locking, remove dump ctl
devusb: destruct usb tree from the leaves, split epclose() into epstop()/epclose()
devusb: fix TT properties, checking, and bugs
devusb: fix enable delays to avoid device suspend (thanks cgnarne)
devusb: handle root-port reset delays outside of hci driver, rootport power control
ether2114x: fix automatic media detection
ether8169: add pci id for RTL8111/8168/8411 (thanks Sylvie)
etherimx: fix missing barrier for doorbell (thanks sigrid)
etheriwl: add support for 3168
ethervgbe: implement proper speed and link detection
ipmux: implement hangup ctl
kernel: Limit parsecmd() to a maximum of READSTR bytes
kernel: add honeycomb kernel
kernel: add imx8, lx2k and mt7688 to kernel ARCH list
kernel: allocb: implement buffer pools for ethernet drivers
kernel: avoid recursive lockloop() prints from screenputs() (thanks noam)
kernel: hack processor affinity to allow load sharing
kernel: improve nlocks print in sleep()
kernel: make cmderror() _Noreturn
kernel: make fixedpri work.
kernel: make schedinit() _Noreturn void
kernel: only reset processor affinity p->mp when p->wired == nil
kernel: remove global balancetime variable -> make function static
kernel: remove unused cruft: delaylink, normalprint
kernel: remove unused lockstats and make lock() return type void
kernel: reorganize bootfs.paq generation
kernel: sched() should not imply spllo()
kernel: use flag and integer to handle affinity
kprof: don’t downsample the pc
netif: fix potential memory leak in netifwstat()
netif: simplify locking and cleanup
nusb/*: improve usbd to handle transaction translater properties correctly
nusb/audio: don’t add a control if getvalues errored
nusb/audio: fix wrong emallocz() call in getclockrange()
nusb/audio: use correct buffer size for d2h requests, else some devices stalls
nusb/disk: kill 9p procs before sysfatal(), devctl() before opendevdata()
nusb/ether: Don’t pass ethernet fcs to the network stack for smsc and lan78xx
nusb/joy: support xbox360 controllers
nusb/lib: decode classcode() 0xFF -> vendor, 0xFE -> application (-specific)
nusb/lib: decode more base class codes in classname()
nusb/usbd: impelement warm-reset for usb3 ports, attempt port reset on failed hubs, enable port-power for rootports
nusb/usbd: improve debugging, dont portfail() when port attaches/detaches too fast, cleanup
nusb/usbd: make it less noisy: fprint() -> dprint()
nusb/usbd: use longer reset delay for rootports
nusb/usbd: maintain hublist order with rootports first
nusbrc: add Prolific and CP2102 serial uart
nusbrc: pass $usbdebug to nusb/usbd
nusbrc: support the pine64 UART
pc: Remove unused lm78 driver
pc, pc64: refactor pcibios code so we dont pollute the amd64 kernel
pc64: remove reference to stale conf
pci: make sure MSI-X is off before enabling and disabling MSI
sdodin: fix set but not used warning
sdaoe: remove unfinished atapi code (thanks arne)
usbdwc: preserve Prtpwr bit for portstatus, turn off power by default, handle channel timeout
usbehci: implement portpower control for rootports
usbuhci, usbehci: remove portlck qlock
usbxhci: preserve RsvdP bits in registers, print recovery reason, print base address.
wifi: don’t try to associate when bypassed
COMPILERS, LINKERS, DEBUGGERS
/sys/lib/acid: add power64
/sys/src/cmd: ?[cl] mkfile consistency
2c: fix indirect calls
6l: relocate operands with REX correctly
8[al]: support CMPXCHG and CMPXCHG8B
8[al]: support XADD
9[acl], libmach: L?AR/ST?CCC
9[acl], libmach: LWSYNC/CMPW/CMPWU
9a, 9c, 9l: import from 9legacy
9a: mkfile was pointing to wrong header
9c/9l/libmach: handle 64 bit constants
9c/9l: do not have the linker rewrite OSUB to negative OADD
9c: allow switches on 64bit values
9c: avoid generating immediates that make the linker use REGTMP
9c: copy warning from other compilers regarding pointer -> int truncation
9c: mind which CMP is used when handling constants
9l: add -H6 for elf targeting kexec
9l: do consize check for SB relative as well
9l: fix ELF generation
acid: remove outdated 8.out binary default (thanks Tekk)
cc: dont' try compiling invalid code
cc: logical operations (& | ^) operate on integers only (thanks sigrid)
cpp: implement empty arg handling for function-like macros (thanks rod)
cpp: remove stray line from tests
flambe: flame graphs for prof(1) data
flambe: pass correct name to initdraw()
flambe: right click to plumb functions
leak: properly sign-extend kernel callerpc for arm64
prof: increase precision of measurements
LIBRARIES
lib9p: add “authok” flag to Srv struct
lib9p: verify uname against returned AuthInfo from factotum (thanks humm)
libc/libap: update power64 entrypoints to new _callmain standard
libc/runeistype: accept out of range runes
libc/runeistype: out of range is only > Runemax, Rune is a uint
libc: cleanup hangup() function (avoid duplicated literal string)
libc: compress directly recursive functions while profiling
libc: increase default allocation for profiling
libc: provide netmkaddrbuf() function avoiding the static buffer
libc: refactor va_arg in u.h to fix warnings for power64
lib*: cleanup power64 assembly
lib*: power64 target
libdraw: fix bytesperline() for negative coordinates (thanks qwx)
libdisk: cleanname() paths for setname()/mkpath(), avoid utfrrune()
libframe: always draw tick with current TEXT color.
libgeometry: add lineXsphere function
libgeometry: add ptincylinder and ptincone
libgeometry: add quaternion sandwich product functions
libgeometry: simplify rframes
libmach: clean up power64 tests
libmach: power64 catch up
libmach: power64 vector mov and cleanup
libmach: remove unused 6c subdirectory
libmp: remove stale test file
libmp: sidestep git bug for now
libmp/convtest: fix format string type warning uint -> %ud and remove unused variables
libpcm: fix buggy use of clip macro (evaluates its arg twice)
limbach: remove unused 9c subdirectory
libmemdraw: change openmemsubfont() to accept rune minimum as argument
PROGRAMS
acme, abaco: render scrollbar like rio
ape/diff: one more ancient, unmaintained, buggy gnu utility gone
ape/patch: also kill ape/patch
audio/zuke: icy: use http 1.1, specify host, follow redirects
auth/as: dont pollute parents environment or namespace (thanks jrmu, sl)
auth/factotum: add support for TOTP code generation
auth/factotum: avoid static buffer from netmkaddr()
auth/factotum: mount factotum onto /mnt/factotum instead of /mnt by default
auth/userpasswd: remove factotum-bug work-around from 2002, cruft (thanks ori)
aux/cddb: fix artist line splitting
aux/cddb: support very long artist+album name combos
aux/listen: remove namespace from procsetname.
aux/mnihongo: formatting
aux/mnihongo: use memdraw instead of draw
cpiofs: add newc support for cpiofs (thanks rminnich)
cpurc, termrc: dont kill gefs
cpurc: use ndb/query -cia instead of ndb/ipquery
doctype: fix custom options (thanks sirjofri)
eqn: fix silly mkfile
fontsel: fix text buffer oob and crash due to insufficient stack size after IOUNIT change
g: add .in, fix earlier fuckup (thanks mkf)
g: add cxx and hxx
gefs: acquire mutation lock around ORCLOSE upsert
gefs: add command to show free ranges on console
gefs: add lock assertion for paranoia
gefs: allow halting read-only file system
gefs: avoid holding the wrlock when syncing the file system
gefs: bring back write cancellation for free blocks.
gefs: change log compression heuristic
gefs: check name lengths before packing them
gefs: clean up blk logging code
gefs: clunk dent and mnt when dropping rclose message
gefs: convert to atomic instructions
gefs: copy mode down on create, don’t truncate walks with no DMEXEC
gefs: correct in-memory directory length for DMAPPEND files (thanks cinap)
gefs: correct mode check for other group
gefs: correctly serialize updates to mounts
gefs: correctly set duid/dgid on Tcreate
gefs: don’t abort when the fs breaks
gefs: dump dirs are dirs too
gefs: dump set of directory entry attributes
gefs: fix Fid refcounting bugs
gefs: fix allocation log compression
gefs: fix block leak when merging tree nodes
gefs: fix deadlock between epochclean and truncwait
gefs: fix dlist cache limit by maintaining fs->dlcount
gefs: fix error handling in readsnap()
gefs: fix fidtab locking order in clunkfid()
gefs: fix file truncation performance (thanks cinap)
gefs: fix memory leak on nop syncs
gefs: fix use after free in putconn()
gefs: fix waserror() bugs
gefs: flush limbo lists on halt
gefs: getblk(): remove duplicate getcallerpc(), check b->bp.gen from cache
gefs: improve ‘print fid’ on cons
gefs: improve flow of blocks/frees
gefs: improve heuristic for arena selection
gefs: initial import
gefs: make dent cache per-mount
gefs: make it impossible for clunkfid to error
gefs: modifying a directory should update qid.vers
gefs: more/stricter asserts and checks
gefs: only allow ‘none’ attach when previously authenticated
gefs: only start epochs for console procs that need them
gefs: properly close and free connections
gefs: protect fids with rwlock
gefs: remove daed mkfile bits
gefs: remove nokill code
gefs: remove trace noise
gefs: remove unused blk field
gefs: remove useless cachedel
gefs: remove vestigial bucket lock
gefs: revert cacheflag()
gefs: set gid correctly when creating directory entries
gefs: set super dir in Qadm correctly
gefs: skip writeback on data blocks
gefs: temporarily disable log compression
gefs: tweak block address heuristic to sequentialize allocation
gefs: use a single syncer proc to flush to disk
gefs: use broke() when we get a corrupt block
gefs: use correct snap name with autosnaps
gefs: use freeblk() instead of freebp() when we already have the block
gefs: we need an agetv for the qgen on 32 bit systems
gefs: weaken overzealous assert
gefs: work around 8c bug
git/branch: change ‘-d’ flag to ‘-r’ flag for consistency
git/branch: handle dirents changing between file and dir correctly (thanks cinap)
git/branch: make it more robust
git/branch: missed changing a var name
git/clone: allow cloning into an empty directory
git/commit: filter to changed files for git/save
git/diff: fix -c flag
git/export: don’t try to diff dirs
git/fs: don’t allow walking blobs
git/get: support side-band and multi-ack
git/pull: fix typo
git/pull: only show commit summary after updating branches
git/query: process full contents of queue, even with skips
git/query: use git entry sorting when computing dir diff
git/save: and try again…
git/save: fix the “noam” bug
git/save: handle all cases correctly when walking args
git/save: sort argv lexicographically
git/serve: we don’t do thin packs – advertise it.
git/test: add noam.rc testcase
git/test: improve ftype test (also test dir -> file transition)
git/test: run tests with a temporary install bound to /bin/git
git/walk: dirs should not count as tracked
git: allow longer authors in commits
git: bikeshed git/walk relative path calculation and add tests
git: fix off by one in strncmp
git: make git/diff -s print relative file paths
git: make tests less verbose
git: provide symref extension
git: refactor capability parsing
git: rewrite entcmp to be single pass, less stupid
gs: don’t track autogenerated header (thanks James)
gs: ignore more autogenerated headers
history: add support for gefs dumps
hjfs: check mount spec (aname) in Tauth
hjfs: implement “none” attaches properly
htmlroff: fix tcs pipe leak
inst: make gefs visible in the installer
inst: add hidden ‘gefs’ file system type option
inst: add option to use esp as 9fat inst: adjust phrasing on file system state/usecases
ip/*: sprint() -> snprint() in a bunch of old copy-pasted network announce routines.
ip/dhcpd: don’t get confused by ipv6 addresses for bootp Info
ip/dhcpd: impvoe validip(), make validipmask() reject ipv6 masks
ip/ipconfig: add “null” verb to bind nullmedium
ip/ipconfig: ask devip to delete expired ipv6 prefixes (thanks arne)
ip/ipconfig: don’t use sprint() when we have variable strings.
ip/ipconfig: fix logic bug (thanks cgnarne)
ip/ipconfig: handle dhcpv6 IA options, pass gateway from RA
ip/ipconfig: implement dhcpv6 prefix delegation, dynamic client
ip/ipconfig: make ra limiter less agressive (thanks cgnarne)
ip/ipconfig: ndbvalfmt() strings when formatting ndb entries.
ip/ipconfig: only write out /net/ndb when something changed
ip/ipconfig: … but unconditionally refresh when adding addresses manually (thanks chilledfrogs)
ip/ipconfig: properly handle ipv6 address deprecations
ip/ppp: rc-quote ipnet value, to prevent accidents.
ip/ppp: pass -i flag to ip/ipconfig (-i for ipv4, -I for ipv6) to populate ipnet= entries
ip/pppoe: properly zero-pad ethernet frames, optimize framing, limit mtu
ip/tftpd: accept an address to announce to as an argument.
ip/torrent: fix webseed
ip/torrent: fix wrong interval check
ip/torrent: support compact peers6 list
ip/traceroute: sprint() -> snprint()
jpg/tga: decode TGA32 images into RGBA32 ones
kbdfs: consult also escaped scancode table when decoding runes (thanks aap)
look: fix case sensitivity when using base > 10
man: also attempt to interpret argument as path
mkfiles: check for test/mkfile when recursing
mkfiles: stop cargo culting UPDATE=
Mail: Add support for message filtering
Mail: correct message line number for partially hidden threads
Mail: don’t move cursor when flags are unchanged
Mail: fix redrawn line offsets, add support for flag filters
Mail: provide runnable command to view html
ndb/dns: don’t refuse queries when delegated subareas
ndb/dns: refuse recursive requests harder when given -R (thanks be0ba)
patch: fix not applying each input patch file atomically
patch: show expected line number for hunk when rejecting it
pstree: reimplement in awk, optionally restrict to a given process
pstree: remove unnecessary globbing and environment pollution (thanks cgnarne, cinap_lenrek)
qcowfs: add 9p debug flag
rx: add ssh
sam: M: don’t require a current file to operate (thanks umbraticus)
sam: introduce a new command M for adding commands to mouse b2 menu
sam: make X/…/b work
sam, samterm: rfork to copy env vars and namespace
samterm: avoid division-by-zero when $tabstop is zero or empty
samterm: make right arrow move to the right of dot (thanks llamaa)
spin: make generated code match installed headers
sshnet: update usage text to match man page
stats: add etherovf value (hw and software overflows on input queue)
tar: use IOUNIT to compute Dblock
telnetd: fix getremote()
timezones: Add Indonesia (thanks AlfredPros)
units: accept negative numbers
upas/smtp: add -C flag to disable thumbprint verification (thanks sirjofri)
vcrop - graphical image cropping tool
vcrop: fix image panning
vdiff: accept diff as filename argument and man page touch-up (thanks humm)
vdiff: exit if diff is empty
vdiff: fix scrolling and mouse button handling.
vdiff: show filename instead of “/dev/null” when removing entire file
vt: skip over vertical line marks (Contour terminal)
walk: error on mutually exclusive flags
walk: fix skipped files, simplify seen()
walk: qid.vers should be ignored (thanks BurnZeZ)
walk: show siblings with the same qid
DOCUMENTATION
/sys/doc/fs: don’t make fs.html by default
/sys/doc: add mk clean
/sys/doc: remove generated files
2c(1): add 9c
2l(1): add 7l and 9l
9p(2): typos
bio(2): fix formatting
dhcpd(8): typos
factotum(4): minor typo
gefs(8): docment user creation commands
gefs(8): fix indent of empty snapshot paragraph
gefs(8): say some words about snapshots
gefs(8): small formatting fixes (thanks kvik)
gefs.ms: add gefs to /sys/doc/mkfile
gefs.ms: Minor fixes and improvements.
gefs.ms: sycer => syncer (thanks sigrid)
geometry(2): correct typo (thanks ndeuteron!)
geometry(2): fix little typo
ipconfig(8): document loopback and null media
ipconfig(8): fix /net/null vs /dev/null (thanks humm)
isalpharune(2): invalid Runes are just > Runemax
ip(3): ra6 routerlt is in seconds, not ms.
mp(2): typos (thanks sirjofri)
plan9.ini(8): document the existence of git.9front.org/plan9front/firmware (thanks, orib)
rio(1), rio(4): wctl /srv pipe is dead, mention ‘none’ attach (thanks unobe)
rio(4): fix paragraph spacing (thanks humm)
riow(1): mention having to put the rc pipeline into its own script
sam(1): ^ does not take any range
sshnet(4): fix title (thanks arne)
tmdate(2): fix formatting for sub-second specifiers
tmdate(2): fix two little typos in the examples
totp(1): fix example for adding totp key to factotum
totp(1): separate docs for auth/totp, auth/userpasswd
upasfs(4): make the name match the executable path
users(6): it’s not just older servers
webfs(4): typo around connection close (thanks halfwit)
OTHER
/lib/1oct1993: add troff files.
/lib/1oct1993: replace text file with directory of troff source files.
/lib/rsc: Please always feel free to continue to reach out whenever you need anything.
/lib/theo: If we can’t do it right, we don’t do it until we figure out a way to do it right.
/lib/theo: This thread is too long. Please just stop.
/sys/games/lib/fortunes: redaction day
/sys/lib/dist/ndb/common: add git and gits
/sys/lib/dist/ndb/common: add hjgit port, remove unused
/sys/src/cmd/test: enable zones.rc test (thanks unobe)
mkmany: check more carefully for test folder
