You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.8 KiB
2.8 KiB
G-018 Zig-built plain tclsh kits: self-contained zip-based executables without punk infrastructure
Status: proposed Scope: build.zig / build.zig.zon (per G-005), src/runtime/, src/make.tcl integration Acceptance: as in root GOALS.md index (canonical).
Context
G-005 establishes zig-based build infrastructure to build binary dependencies (including Tcl9) from source. This goal extends that infrastructure's output targets: beyond building the punkshell product's own runtimes, developers should be able to produce plain, self-contained, zip-based tclsh executables with no punk-specific infrastructure at all - no punk boot layer (punk_main.tcl dispatch), no punk modules, no punkshell apps. A general-purpose single-file tclsh, useful independently of punkshell.
This defines one end of a deliberate spectrum of buildable executables:
- plain tclsh kit (this goal) - stock Tcl only
- trimmed punk executable (G-019) - punk infrastructure plus only the modules a dependency scan proves needed
- 'batteries included' punk executable - the current full-kit approach
Approach
- Zip-based (zipfs) kit assembly as the packaging mechanism, consistent with Tcl 9's built-in zipfs support.
- Tcl 8.6 phasing (decided 2026-07-06): the 8.6 kit mechanism is more complex to support (no built-in zipfs) and is wanted in the end, but must not block other work. Interim step: support plain (non-kit) tcl 8.6 builds from the zig infrastructure, and implement 8.6 kits when practical. This goal's acceptance is satisfiable by a Tcl 9 kit alone; 8.6 kit support is a follow-on within the same goal's spirit, not a gate.
- The plain kit is a natural first smoke target for G-005's Tcl-from-source build: it exercises the compiled runtime with minimal packaging logic before the more elaborate punk kit assembly.
src/make.tclintegration so the target is invocable through the normal project build entrypoint as well as directly via zig.
Alternatives considered
- Relying on third-party tclkit/kitcreator builds for plain kits - rejected as the durable answer: the point of G-005 is developer-reproducible builds from source in this project's toolchain, and external kit builders are exactly the committed-binary/procurement dependency G-004..G-006 are removing.
Notes
- Depends on G-005 (zig builds Tcl from source); complements G-004 (no committed binaries) by making plain runtimes reproducible on demand.
- 'Self-contained' means: runs conventional tclsh invocations on a machine with no Tcl installation - stock Tcl library scripts ride inside the kit.
- Wish executables are not a build target at any point on the spectrum: kits
that want Tk ship it as a loadable package (as the punk Windows kit already
does -
package require Tkfrom the tclsh-style executable, console retained). Applies to plain kits here and punk kits alike.