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