9FRONT "THIS TIME DEFINITELY" RELEASED

15 min read Original article ↗

front

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://9front.org/iso/

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

back