9FRONT “THIS WAS SUPPOSED TO BE FUN” RELEASED

NOTABLE CHANGES

In this release:

  • revised affinewarp API, many programs now using it for scaling/zooming
  • new: gdbfs(4) tool that lets you mount a remote gdb as a /proc
  • new: Synaptics driver
  • new: nusb/battery driver (for UPS)
  • new: nusb/dump tool to dump usb descriptors
  • new: libsec got support for SHA3
  • new: awk got a testsuite
  • new: pc/pc64 kernel now support *x2apic=

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.

; sha1sum -2 256 9front-* b338c4cdf65d9fb8950b22dd21873d27d15254862cb9de8f7cd0c112b2663b05 9front-11952.386.iso.gz 59ba79f1304f02c1aae573b337fa2569fc78027ce8e4c2056c4117e971025b91 9front-11952.amd64.iso.gz 3c1b57c4b609525e76cb0abac48bc657f71187fd3506674dba4e49b42141729c 9front-11952.amd64.qcow2.gz 1199debe5e9cadadb9d143c9f64ef02c8a8010e173ebbff69aeaa23dff1a7457 9front-11952.arm64.qcow2.gz c009cde1200d107c902030126b82d8aaec05356e0afcfed2b27291f68265b247 9front-11952.honeycomb.img.gz 704e87d263a27c5f3077f9aec3126acefcc1bdbc4729584bbd28ec33eedfbc25 9front-11952.pi.img.gz 7bf714dfb6d5a07a3bc64cebf113a1419f15bf9e208214bddcc64d5c6410c84f 9front-11952.pi3.img.gz e7c3dcaf95216a1ce0849947fca61ed75994de5af7dc20bbd1dc386af77a58a6 9front-11952.reform.img.gz

MIRRORS

GIT REPOSITORY

DASH 1 MANUAL

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

SONGS

by qwx

by hgc

THANKS

For what?

KERNEL AND DRIVERS

9boot: Stop PXE stack manually before booting.

9boot: mkfile: install “bootaa64.efi” into /arm64, create 9pc64 kernel test image by default

aux/acpi: free acpi tables after parsing, if possible

aux/vga: igfx: fix DP lane count register for Sandy Bridge

bootrc: set $NPROC for gefs

devaudio: fix parsing of “in” and “out” ignored options to volume write

devdraw: fix devdraw kernel buffer leak (thanks Arusekk)

devether: always use fixed receive queue sizes

devether: don’t drop packets when bypassing

devether: don’t print link status from interrupt context

devether: inhibit transmission when link is down

devether: set Qkick flag in Ether.oq

devip: correctly handle packets where len < hdrsz

devip: ensure we have full headers in iput() and forward()

devip: increase queue size for pktmedium to 1MB, dont block

devip: use Ipifc.loopback queue for pkt interface input (avoiding recursion)

devkbd: Add *kbdpoll= boot parameter (for broken interrupts) and cleanup the code

devmouse: Driver for Synaptics touchpad

devmouse: avoid nil pointer crash for absmousetrack() and scrmousetrack()

devmouse: export lastmousems() timer for protocol recovery.

devproc: Allow opening /proc/n/note and /proc/n/notepg when sharing same note group

devshr: fix missing *sizeof(Qid) in memmove

ether8169: don’t mix lock and ilock() in transmit

ether82557: Add PCI ID for built-in LAN adapter on Fujitsu-Siements Amilo Si 1520 laptops. (thanks Yaroslav)

ether82557: add PCIID for Intel 82801CAM (thanks yarikos)

ether82563: access to i82579 phy1 page 800 (wake up registers)

ether82563: add a watchdog handling rx dma stuck condition

ether82563: add did for i219-v (thanks HaveHope)

ether82563: fix “phy wedged” for i219, inhibit transmission until link-up (thanks hiro)

ether82563: fix link detection for i82566 (and possibly others)

ether82563: fix phy handling according to datasheets

ether82563: fix transmission getting stuck

ether82563: preserve multicast table during reset

ether82563: put full 64-bit PCIWADDR() into registers.

ether82563: receive and transmit descriptor counts are constant, use mallocalign()

ether82563: use ethermii for phy access

ethermii: set page for mmd register access

ethermii: support phy register extension using paging

icmpv6: fix some potential out of bounds accesses in valid()

ipmux: allow single digit value expressions for single bytes

ipmux: check for contradicting (excluding) filters

ipmux: data-range can’t exceed 255 bytes in parseop() (thanks moody)

ipmux: fix memory leak in ipmuxtreefree()

kernel: allow building without uarti8250, generating dummy i8250console() function

kernel: avoid reacquiering imagealloc.Lock

kernel: don’t hardcode reclaim page target, use palloc.headroom, kick pager before acquiering pwait queue

kernel: fix dropped beagle config for removal of esp

kernel: fix newpage() and pager wakeup()

kernel: fix typo in freenotes()

kernel: fix wrong accounting for imagealloc.pgidle (thanks qwx)

kernel: make qiwrite() handle bypass, make local copy of q->bypass before nil check

kernel: move Mnt* out of portdat

kernel: nuke devsdp and ip/esp

nusb/battery: Add HID battery driver (for UPS)

nusb/disk: raise usb endpoint timeout

nusb/dump: display human-readable information about usb device

nusb/joy: add 2 xbox360 compatible controllers

nusbrc: add cdd vid/did for Realtek ‘USB 10/100/1G/2.5G LAN’ (thanks edo)

nusbrc: attach rtl8153 devices as cdc ethernet

nusbrc: honor $etherargs for devices that also show up as cdc

pc, pc64: zero registers on the way out of the kernel

pc/pc64: Rename Aintr.intr to Aintr.type, remove entry type field.

pc/pc64: allow conflicting ioalloc() resources with ACPI

pc/pc64: dont clobber NMI disable bit in port 0x70 when reading rtc/nvram

pc/pc64: ensure valid destination lapic, print machno and tbdf in #P/irqalloc

pc/pc64: enumerate _CRS methods, provide *noenumcrs= option to disable that

pc/pc64: implement x2APIC support

pc/pc64: move MP-table struct definitions out of mp.h into archmp.c

pc/pc64: print gsi of interrupts for *apicdebug=

pc/pc64: put devkbd after devusb in devtab

pc/pc64: rework mp interrupt code

pc/pc64: use VectorMC instead of constant 18 for machine-check vector

pc/pc64: use linked lists for lapics and ioapics instead of arrays

pc/pc64: use x2apic when cpu0 uses it

pc64: fix punmap()

pc: vmx: fix potential buffer overflow in fpregs write from typo

qio: make trimblock() free blocks for negative offset or len, fix missing unlock in rudp

sgi/mouse: use lastmousems()

uartpci: Oxford Semi OXPCIe952

usbxhci: fix initialization issues (thanks edo)

vgaradeon: fix KADDR panic on amd64 (thanks john)

xen: stub out nvramread() to get nmienable() compiled (never called in xen)

COMPILERS, LINKERS, DEBUGGERS

5l: add missing [F]HOREG case for register offset class (thanks qwx)

9a, 9l, tl: remove unused function declerations

acid: don’t let breakpoint instructions mangle asm()’s output

cc: bump max include directories limit

cc: fix the fix of taking address of incompletely defined types

cc: untangle class and type specifiers

gdbfs: fix short buffer in gdbwritemem

gdbfs: off-by-one in arg parsing error msg

gdbfs: spawn the gdb processes in the file-server proc’s note group

gdbfs: use encode(2) for hex funcs

gdbfs: use standard stack size for gdbproc

LIBRARIES

ape: libsec: reduce diff with main libsec.h

ape: libsec: sync sha3 changes

draw.h: add BGR15 chan format

libaml: add dropped header defs from previous commit

libaml: defer freeing Name objects in gc() until all regions are unmapped

libaml: don’t crash when formatting unresolved name (n) with Nfmt()

libaml: implement Timer opcode, make amldelay argument 64-bit

libaml: implement ToBuffer operation (0x96)

libauth: correctly terminate nsfile args with nil

libc/9sys: avoid a buffer overflow formatting a stat in fcallfmt (thanks Arusekk)

libc/9sys: make fcallfmt more obviously correct

libc/amd64: fix setfcr

libc/test/pow.c: setfcr() for 386 and potentially mips

libc: initialize privalloc memory to zero

libc: simplify utf* functions

libc: utfwbreak: do not read past end of string

libdraw, libmemdraw: increase Warp decimal fixed-point precision to 13 bits

libdraw: add missing error messages in creadimage()

libdraw: avoid temporary integer overflow in unitsperline() (thanks nposting)

libdraw: constrain image rectangles to a subspace of intÃint to avoid overflows

libgeometry: make centroid3?() right

libmemdraw: add missing error messages in unloadmemimage()

libmemdraw: add optimized BGR15 (get|put)pixel routines to memaffinewarp()

libmemdraw: assert chan type uniqueness except for CIgnore

libmemdraw: avoid division in the memaffinewarp() k[124] routines

libmemdraw: avoid sw cursor for cloadimage and memaffinewarp (thanks rodri)

libmemdraw: catch integer overflow in allocmemimage()

libmemdraw: clean up some parts of draw.c

libmemdraw: finish the special handling of horizontal and vertical lines in memimageline(2)

libmemdraw: fix intupscalewarp()

libmemdraw: fix some of the error reporting

libmemdraw: move tests to test/ directory

libmemdraw: remove clipped arg from _memfillpolysc() and do a little cleanup

libmemdraw: remove potential race condition from memdraw()

libmemdraw: remove unused code frome line.c

libmemlayer: initialize dst and src rectangles correctly in memlaffinewarp()

libsec: add sha3 and shake

libsec: avoid strecpy() and use seprint() instead (for APE)

libsec: blake2s: fix block chunking

libsec: fix off-by-one in namedcurves scan (thanks leimy)

libsec: fix typo in ecdsaverify(), failing s<n check (thanks leimy)

libsec: sand of sharp edges for makeciphers() (thanks leimy)

libsec: sha3 and sha2 BIGMAC hmac functions

libsec: x509: appendaltnames needs to append

PROGRAMS

*: fix use of strncat

Mail: fix some off by one rendering issues

acme: resize tag when writing to tag programatically (thanks nposting)

astro: complete tz fix – we support timezones longer than 3 chars now.

astro: ensure we null-terminate timezone names

astro: fix thinko

auth/factotum: Allow reading and iterating over private keys for proto=rsa role=sign protocol (thanks kws)

awk: add test suite

awk: adding missing test files

awk: fix setting RLENGTH wrong when there’s no match

awk: fix test script permissions

bmp: ensure color tab entries are within bounds

disk/qcowfs: set refcount of new refcount blocks to 1

ed: fix rune alignment

exportfs: kill procs using PNGROUP on exit (work around “none” user /proc permissions)

games/^(eui.c doom rotzoomer): use new affinewarp api

games/doom: fix incomplete shutdown on error or end of demo

games/doom: simplify pal2xrgb()

games/doom: use affinewarp(2) for upscaling (thanks nposting)

games/gb: store sram in save state as well

games/gba: use the BGR15 chan on initemu()

games/md: 6 button and 2nd port controller support

games/md: SRAMEN is only technically needed for roms > 2MB (thanks qwx)

games/md: add support for SEGA mapper

games/md: correctly zero out some controller bits

games/md: implement TMSS

games/md: skip sram if cart doesn’t support it

gefs: ‘snap’ messages don’t need to hold an epoch

gefs: adjust ctl interface for usablility

gefs: back out unintentional portions of previous commit

gefs: be extra careful about referring only to committed trees

gefs: be stricter about checking wstat parameters

gefs: btnext() should not return deleted nodes

gefs: clean old snaps when retain is disabled

gefs: clean up and fill gaps in error handling

gefs: clean up readonly handing in mutator proc

gefs: clean up waserror() use

gefs: clearer ctl naming

gefs: correctly handle short reads from disk

gefs: correctly refcount snaps

gefs: cosmetic changes, better comments on pass 4.

gefs: count all deadlist nodes in dlcount

gefs: defer dlist reclamation

gefs: do not treat retention periods without a specified count as disabled

gefs: don’t allow creates in files

gefs: don’t allow double deletions with ORCLOSE

gefs: don’t go read-only when recovering from broken arena header

gefs: ensure we never write to immutable snaps

gefs: errors iterating the snap tree are still errors

gefs: fix accounting on deadlist cache

gefs: fix asserts/spill scan in tree

gefs: fix build warning

gefs: fix deadlist consistency on crash

gefs: fix double free of deadlist blocks

gefs: fix message going to wrong leaf when rotating

gefs: fix missing waserror()

gefs: fix refcount leak when deleting snapshots in some cases

gefs: fix tree refcount mismatches

gefs: get rid of ‘fs too busy’ error when trimming snaps on mount

gefs: hosst loadfs before all places that depend on it

gefs: improve check performance

gefs: improve ctl file formatting

gefs: improve error message for ignored config keys

gefs: initialize flags on directory entries to 0

gefs: make check print status at end of check

gefs: mark auth fid as open (thanks noodle)

gefs: match DMEXCL semantics with cwfs on remove

gefs: move admin commands to ctl file

gefs: move scratch tree to stack

gefs: only allow one concurrent epochclean

gefs: only print pivot warnings in debug mode

gefs: only remove a root node from the tree when we flushed its messages

gefs: packsuper does not return nil, and sysfatal is not appropriate here

gefs: put the snap deadlist in limbo

gefs: reduce debug output

gefs: refuse to write config to immutable snaps

gefs: remove epochwait()

gefs: remove useless memset

gefs: rename getmnt to mountlookup

gefs: replace assert on buffer size with proactive check

gefs: replace bad message train assert() with broke()

gefs: respond to Twrite in read-only fs mode

gefs: show callerpc for corrupt block

gefs: show default config if no override is set

gefs: show value instead of key in showval() fallback

gefs: simplify and correct growfs code

gefs: stricter consistency checks on deadlists

gefs: style fixes, don’t double compute mbits

gefs: teach check to verify refcounts

gefs: temporarily disable batch snap cleanup

gefs: the comment is a lie

git/branch: conserve memory by getting rid of $cleanpaths

git/branch: ignore touch error (for /adm), use touch -c for bumping mtime

git/clone: don’t redirect git/get errors to stdout

git/clone: properly quote the output dir when creating branch

git/commit: -p for partial commits

git/commit: fix -p namespacing and new file handling

git/commit: fix typo in git/commit -p

git/commit: only include files with modified hunks in commit -p

git/conf: limit the number of config files to nelem(file)

git/fs: don’t allow walking to ‘.git’

git/get: check getfields count

git/get: correctly skip duplicated refs

git/get: don’t silently change protocols from http to https

git/hist: fix relative path usage within subdirectories

git/import: do not break on no new line messages

git/init: run git/conf inside repository

git/log: don’t spuriously show files as changed in first commit

git/pack: clean up prefix match, look at right nibble

git/pull: show change log before we switch branches

git/query: add missing ignore for git submodules

git/query: handle submodules in ‘git/query -c’

git/rebase: fix typoed ‘nocommit’

git/serve: HEAD should be zero on empty repos

git/serve: correct capping of delta length

git/serve: don’t return spurious error, pick best index for new HEAD

git/serve: only gitinit after cd'ing into git repo

git/serve: we were sending a junk head if we couldn’t read it

git: Objset->obj is an Object*, not a hash

git: correct handling packfiles with offsets that have the top bit set

git: correctly inherit permissions from the .git dir for directories

git: disallow parsing sketchy names in packs

git: don’t leak pipe fd into spawned programs

git: dont' mangle ‘/’ in repo urls

git: double check for overflows and sign extension in pack parsing

git: fix a couple of integer overflows in packfile parsing

git: fix and improve subdirectory handling

git: fix typo causing partial listings when supplying git/diff -u with a path

git: fix typo in pack.c (thanks rransom.877)

git: fix warning

git: remove debug print

git: rename types for clarity

htmlfmt: also print title

htmlfmt: fix title (only print once)

htmlfmt: output links as footnotes by default

image/^(affinewarp histogram): use new affinewarp api

ip/dhcp6d: Reply to RELEASE message.

ip/tinc: Fix replay filter bug (thanks moody)

mk: defer unpretended targets until all are unpretended

mothra: fix form sumission leaing user’s files (thanks kristo)

ndb/cs: print address that couldnt be translated

ndb/dns: randomize srv records.

page: use affinewarp(2) for navigation and zooming

page: use new affinewarp api

patch: clean up temp files when create fails

patch: correctly handle clobbering new files

patch: handle almost-malformed patches

patch: refuse patching empty file names

plumb: use idle counter in thread pool

rc-httpd: filter out . for $SERVER_NAME (thanks penny and Mark Otzen)

rc: do not print to stderr if whatis does not find something

rc: don’t let dups clobber “from” fd of file-redirects.

rio: don’t treat chords as the start of a double click (thanks hiro)

rio: fix momentum when scrolling using button 1 and 3 single clicks

samterm: don’t treat chords as the start of a double click (thanks hiro)

samterm: fix momentum when scrolling using button 1 and 3 single clicks

samterm: follow rio’s scrolling behavior once and for all

service/!tcp564: remove bad example

stats: Add shr/usb/battery to battery file list

stats: sum up both battery capacities

games/eui.c: use affinewarp(2) for upscaling

tlssrv: add -T timeout option to prevent connection hogging

upas/Mail: also change htmlfmt in suggested actions

upas/Mail: fix leaks when composiing messages

upas/Mail: remove ‘-a’ flag, footnote URLs are more readable

upas/fs: ignore bad thumbprints for TLS connections.

upas/fs; allow clearing the last flag on an imap message (thanks noodle)

upas/send: allow user to mail themselves if mbox dir isn’t other writable and add more error messages

upas/smtp: declare return type of yylex

upas/smtp: don’t turn \r\n into \r\r\n

upas/smtp: limit number of bangs in bangtoat

upas/smtpd: declare return type of other yylex

upas/smtpd: delete dead and useless code

upas/smtpd: handle \r\n in pipelines

upas/smtpd: syslog(â¦) readcertchain(â¦) failure during starttls()

upas/smtpd: when parsing PLAIN auth, only look for nul in bounds.

uptime: use monotonic time

vnc: touch the artwork and remove unused mainmem reference (i’ll regret this)

zuke: fix old cover not getting fully cleared when new cover has a smaller width or height

DOCUMENTATION

/sys/doc/gefs: fix typos (thanks sleepydog)

/sys/doc: add dp9ik.txt

9boot(8): document bootaa64.efi, document *nopxestop= parameter.

9p(2) says remove() should call removefile

acmemail(1): fix typo “and” -> “an” (thanks eduardo)

allocimage(2): document deprecation of dolock flag in (read|write)image() (thanks umbraticus)

atomic(2): note that use is discouraged

atomic(2): update and clean up

cron(8): use $ instead of italic for user as it’s clearer on terminals and matches newuser(8)

crop(1): add missing source

crop(1): see also vcrop

draw(2): document new behavior of mkwarp() and improve description of affinewarp() (thanks nposting)

fshalt(8): mention gefs

games(1): add a description for rotzoomer

games(1): add rotzoomer (thanks unrznbl)

games(1): rotzoomer’s -s option takes no argument

gdbfs(4): add manual page

gdbfs(4): add default port to manual

gdbfs(4): refine language in manual

gefs(8): fix typo (thanks jpm)

gefs(8): update manpage to match current state of gefs

geometry(2): add missing routines in the NAME section (thanks qwx!)

git(1): add example for rewinding a branch (thanks noodle)

git(1): clarify git/branch -n

ip(3): remove references to ESP protocol

ipserv(8): fix two misspellings

kill(1): document Kill

man(2): delete manpage for removed function qball

man(9): remove useless manpages

man: add pdf references to papers

pc(1): fix typo with > sign

proc(3): document “wired -1” behaviour.

resample(1): remove misleading paragraph

rsa(8): include the full paths for commands in SYNOPSIS

runecomp(2): fix source references to ucd dir

smtp(8): document missing flags in SYNOPSIS and fix -h flag usage message for upas/smtpd

totp(1): correct typo in example (thanks akw)

upasfs(4): add -C (thanks flowerss)

OTHER

/adm/timezone/README: describe how to generate tz files (thanks noodle)

/lib/legal: no computer generated code

/rc/bin/inst/mountgefs: move to new ctl syntax

/rc/bin/inst/mountgefs: update for new ‘retain’ syntax

/rc/bin/inst: bail out of ndbsetup if we dont have an ethernet device

/sys/games/lib/fortunes: Try, and see. âJohn Whiteside Parsons

/sys/games/lib/fortunes: mention HERMES.md

/sys/lib/plumb/basic: extend non-ascii ranges to supplementary unicode planes

timezones: fix Egypt DST time zone name

remove /rc/bin/E