Skip to content

superterm 5.2.2

Choose a tag to compare

@garacil garacil released this 02 Sep 02:06
· 96 commits to main since this release

One live workspace, from any SSH-capable screen

SuperTerm 5.2.2 is a persistent, shared terminal desktop for GNU/Linux, macOS
and Windows. Its dedicated, isolated OpenSSH entry lets an ordinary interactive
client open the workspace with nothing SuperTerm-specific installed on the
viewing device:

ssh -p 8022 user@server

OpenSSH provides TCP, encryption, host keys and account authentication;
SuperTerm provides the live desktop. The dedicated service keeps its own
configuration, keys and port under /etc/superterm/sshd, so it does not alter
the host's ordinary sshd, port 22 or /etc/ssh/sshd_config.

One architecture, chosen by measurement

This release closes a deliberate competition. Four branches were opened from
the same commit
and each implemented client responsiveness and the
surrounding architecture differently:

  • a threaded client, moving keyboard, mouse and output onto dedicated
    threads and keeping every thread out of the fork that creates a session;
  • a daemon-first thin client, with coherent per-client session mirrors, an
    isolated per-client compositor, a presentation controller and a
    transport-neutral attach contract;
  • the event-driven single-reactor client kept here, which waits on real
    descriptors and owns its physical output through one bounded reactor;
  • the integration branch that carried the result into main.

They were not judged by preference. Each was measured against the same frozen
behaviour contracts and the same interleaved performance harness — latency,
settling time, emitted bytes, changed cells and frame count at 100x30, 200x50
and 400x100 — and the line with the best measured results is the one merged.

The point is normalisation: from 5.2.2 there is one architecture to extend
instead of four candidate designs
, and the branches that lost remain readable
history rather than parallel futures. Later work builds on this base.

The selected commits are e581f9d (responsive client output and stress
coverage), b27f4a1 (harden interactive output and input responsiveness),
947982b (reference catalogue checksum) and b609745 (keep profile panes
alive after a command interrupt), on top of dbcc21f (downstream platform
branch flow), promoted through newfeatures and merged into main as
e1181c0, with 4c974bd closing the release.

Upgrading from 4.2.1

The attach protocol is unchanged (ATTACH_PROTO_VER 16), so this is not a
compatibility break
: sessions, profiles, window classes, configuration files
and the dedicated SSH service carry over untouched. Close live sessions before
replacing the binary — detach deliberately keeps them running — and rerun
sudo superterm ssh-server setup afterwards to refresh the generated service
descriptor. That operation preserves server.ini, the host key and every
authorized key.

Event-driven client presentation under terminal backpressure

The interactive client no longer pays FreeVision's fixed 10 ms idle sleep. It
waits on keyboard input, the session socket or local PTYs, and output
completion, so real work wakes it immediately instead of at the next scheduler
tick.

Runtime terminal output now belongs to a dedicated reactor with its own
nonblocking /dev/tty descriptor and an 8 MiB bounded queue. Complete ANSI
transactions stay indivisible, superseded framebuffer states coalesce, and pane
input, mouse handling, menus and detach remain responsive even when the host
terminal temporarily stops reading. Shutdown waits at most 500 ms for the
physical queue and never turns terminal backpressure into an unbounded hang.

The fork which creates a detached daemon quiesces that reactor first and
restarts it only in the parent, so no child inherits a TThread object whose
POSIX thread vanished at fork. Optional zoom transitions keep an ordered
frame lane, so their show/hide sequence stays exact while ordinary frames still
coalesce.

The detached-server worker-result drain has a per-reactor-pass budget, so
continuously readable pane PTYs cannot starve socket, control, output or
lifecycle work. GNU/Linux virtual-console mouse startup now uses the kernel
KDGETMODE ioctl instead of guessing from TERM; the GPM probe is nonblocking
and its connected descriptor wakes the same event loop, so a PTY named linux
never enters the RTL's blocking GPM connection.

Reproducible engineering and a permanent performance baseline

Every visible Free Pascal warning, note and hint is now an error in the
release, debug and test-runtime modes, with only the two FPC 3.2.2
configuration-file hints suppressed.

The regression harness enforces one exact suite inventory (107 scripts), maps
every suite to a frozen behaviour contract, reports uncatalogued
terminal-emulator parser defects, records distinct child-reaping outcomes and
checks the public wire constants against the server declarations. A
primary-reference catalogue records provenance, redistribution policy and
checksums for locally stored material. Performance regressions are rejection
conditions, not observations.

The first measured parser optimisation removes the managed-string allocation
previously performed for every printable ASCII byte: a focused 16 MiB parser
probe improved from a 874 ms median to 195 ms on the development host while
preserving pending wrap, disabled autowrap, indexed and direct-RGB rendition,
wide UTF-8 and combining-character behaviour.

Profile commands survive an interactive interrupt

A local or free-command pane recreated from a profile keeps its supervising
shell alive while the configured command runs. The command restores normal
SIGINT and SIGQUIT handling, so Ctrl-C or Ctrl-\ still stops it, and the pane
then returns to a usable interactive prompt instead of becoming an exited
window.

Native platforms

  • GNU/Linux: full shared detached daemon and dedicated OpenSSH service.
  • macOS: the same shared daemon and OpenSSH service, Apple Silicon and
    universal builds, published from macos-support.
  • Windows: native ConPTY and Windows-console workspace from
    windows-support; the Unix detached server and dedicated SSH service remain
    POSIX-server features.

For deployment, authentication and operations see
docs/SSH_SERVER.md
and the SSH quickstart.

macOS

Native builds for macOS (same 5.2.2 sources):

  • superterm-5.2.2-macos-arm64.tar.gz — Apple Silicon (M1/M2/M3/M4)
  • superterm-5.2.2-macos-universal.tar.gz — universal (Intel + Apple Silicon)

Install:

tar xzf superterm-5.2.2-macos-arm64.tar.gz
cd superterm-5.2.2
xattr -dr com.apple.quarantine superterm
sudo install -m 0755 superterm /usr/local/bin/superterm
./superterm

Notes: mouse works in Terminal.app/iTerm2 (enable "Use Option as Meta key"). Local shells and SSH panes both supported.