From Newsgroup: comp.lang.tcl
ANNOUNCE: Websh 3.7.8 released
==============================
Websh is a rapid development environment for building web applications
with Tcl, running as CGI or as an Apache 2.4 module (mod_websh).
Originally developed by Netcetera AG and contributed to the Apache
Software Foundation, the 3.7 series is a modernized continuation of
Apache Websh 3.6.
Highlight of this release: JWT support has moved out of websh into the standalone pure-Tcl package "jwt" — websh itself is leaner and no longer depends on the nacl and rl_json packages.
Preview: full Tcl 9 support is complete on the development branch
towardsTcl9 and will become the next release (see below).
Download / Repository:
https://fossil.sowaswie.de/websh
Reference:
https://fossil.sowaswie.de/websh/uv/index.html
English
-------
Changes since 3.7.7:
* JWT extracted: websh no longer ships a JWT implementation. The former embedded jwt package lives on as the standalone pure-Tcl package "jwt"
1.1 (BSD 3-Clause, own repository) with the identical API: ::jwt::sign, ::jwt::verify (-json, -claims, -leeway) and the
::jwt::base64url_encode/decode utilities. Callers simply "package
require jwt"; one installed copy serves Tcl 8.6 and Tcl 9. With only
websh loaded the ::jwt namespace stays empty — no silent shadowing
between the two implementations.
* Slimmer dependencies: the jwt code was the only user of the nacl
(crypto) and rl_json (JSON) packages, so websh now has no runtime
dependency on either.
* Build hygiene: the generated files configure, Makefile and
pkgIndex.tcl are no longer tracked in the repository — they are produced locally by autoconf and ./configure. This removes a real-world failure
where fossil update merged generated content and the resulting conflict markers broke ./configure (dash: "Syntax error: redirection
unexpected"). Building from a fresh checkout now requires autoconf.
* Zero compiler warnings again (a long-standing set-but-unused variable
in the HTML decoder was silenced).
* The 24 jwt test cases moved to the jwt package (still green there on
Tcl 8.6.17 and 9.0.3); the websh suite is now 502 tests (497 passed, 5 skipped, 0 failed).
* Documentation updated throughout (README, DocBook reference); the
published HTML reference points to the standalone jwt package.
Development branch towardsTcl9 — the next release:
* Full Tcl 9 support from a single source: websh builds and tests
identically against Tcl 8.6 and Tcl 9 (suite green on 8.6.17 and 9.0.3). Compat shims cover Tcl_Size (TIP 660), the removed CONST/_ANSI_ARGS_
macros, Tcl_InitStubs "8.6-", and both channel types lifted to TCL_CHANNEL_VERSION_5.
* Real-world fixes found by the port: octal file permissions are parsed explicitly (Tcl 9 no longer treats a leading zero as octal), multipart
upload bodies are read byte-faithfully — which also fixes a latent 8.6
bug where valid UTF-8 sequences inside binary uploads were corrupted —
and web::getContent normalizes IANA charset names (iso-8859-1 vs iso8859-1).
* Dual delivery: TEA names the Tcl 9 library libtcl9websh...;
pkgIndex.tcl selects the right flavour at load time, so both can coexist
in one directory. tclconfig is synced with upstream TEA 3.14.
* Known limitation (documented): ciphertexts produced by web::encryptd containing characters beyond the BMP are not portable between Tcl 8.6
and 9 builds.
Deutsch
-------
Änderungen seit 3.7.7:
* JWT ausgelagert: websh liefert keine JWT-Implementierung mehr mit. Das bisher eingebettete jwt-Paket lebt als eigenständiges Pure-Tcl-Paket
"jwt" 1.1 weiter (BSD 3-Clause, eigenes Repository) — mit identischer
API: ::jwt::sign, ::jwt::verify (-json, -claims, -leeway) und den
Utilities ::jwt::base64url_encode/decode. Aufrufer laden es einfach per "package require jwt"; eine installierte Kopie bedient Tcl 8.6 und Tcl
9. Mit nur geladenem websh bleibt der ::jwt-Namespace leer — kein
stilles Überschatten zwischen den beiden Implementierungen.
* Schlankere Abhängigkeiten: der jwt-Code war der einzige Nutzer der
Pakete nacl (Krypto) und rl_json (JSON) — websh hat damit keine Laufzeit-Abhängigkeit mehr auf beide.
* Build-Hygiene: die generierten Dateien configure, Makefile und
pkgIndex.tcl werden nicht mehr im Repository versioniert — sie entstehen lokal per autoconf und ./configure. Das beseitigt einen realen
Fehlerfall, bei dem fossil update generierte Inhalte gemergt hat und die Konfliktmarker ./configure brachen (dash: "Syntax error: redirection unexpected"). Ein frischer Checkout braucht zum Bauen jetzt autoconf.
* Wieder null Compiler-Warnings (eine langjährige
set-but-unused-Variable im HTML-Decoder wurde beseitigt).
* Die 24 jwt-Testfälle sind ins jwt-Paket umgezogen (dort weiterhin grün
auf Tcl 8.6.17 und 9.0.3); die websh-Suite umfasst jetzt 502 Tests (497 passed, 5 skipped, 0 failed).
* Dokumentation durchgängig aktualisiert (README, DocBook-Referenz); die veröffentlichte HTML-Referenz verweist auf das eigenständige jwt-Paket.
Entwicklungszweig towardsTcl9 — das nächste Release:
* Voller Tcl-9-Support aus einem Quellstand: websh baut und testet
identisch gegen Tcl 8.6 und Tcl 9 (Suite grün auf 8.6.17 und 9.0.3). Kompatibilitäts-Shims decken Tcl_Size (TIP 660), die entfernten CONST/_ANSI_ARGS_-Makros, Tcl_InitStubs "8.6-" und beide auf TCL_CHANNEL_VERSION_5 gehobenen Channel-Typen ab.
* Durch die Portierung gefundene echte Fixes: oktale Dateirechte werden explizit geparst (Tcl 9 wertet führende Nullen nicht mehr als Oktal), Multipart-Upload-Bodies werden byte-treu gelesen — das behebt zugleich
einen latenten 8.6-Bug, bei dem gültige UTF-8-Sequenzen in Binär-Uploads korrumpiert wurden — und web::getContent normalisiert IANA-Charset-Namen (iso-8859-1 vs. iso8859-1).
* Duale Auslieferung: TEA benennt die Tcl-9-Bibliothek libtcl9websh...; pkgIndex.tcl wählt beim Laden die passende Variante, beide können im
selben Verzeichnis liegen. tclconfig ist mit dem Upstream-TEA 3.14 synchronisiert.
* Bekannte, dokumentierte Einschränkung: von web::encryptd erzeugte Ciphertexte mit Zeichen außerhalb der BMP sind zwischen Tcl-8.6- und Tcl-9-Builds nicht portabel.
--- Synchronet 3.22a-Linux NewsLink 1.2