jointhefreeworld.org

The FREE stack - My Tech Radar

estimated reading time: 8 minutes

written on:

The FREE stack, layer by layer, and how much I trust each piece of it today.


The radar is drawn by JavaScript. Nothing is lost without it: every ring and layer it shows is listed, in full, further down this page.

Rings

    Layers

      Point at a blip for what it is and which way it moved; click it to open its entry. Click a ring or a layer to isolate it.

      The rings #

      Adopt
      proven in daily work, and the default for anything new.
      Trial
      running on real projects, not yet a default.
      Assess
      worth a prototype, and no commitment yet.
      Deprecate
      actively discouraged for new work.

      A name in parentheses โ€” (new), (moved in), (moved out) โ€” says what changed since the last revision; a note after a dash says why.

      What FREE means #

      F โ€” Functional
      declarative, predictable systems with clear effects.
      R โ€” REPL
      code evaluated on the running system, with no write-compile-test lag.
      E โ€” Extensible
      a stack built to scale into flexible, extensible systems.
      E โ€” Environment Control
      the whole lifecycle under my own control: no hidden telemetry, no paywalls, one-command self-hosting.

      ๐Ÿงฌ Languages #

      โœ… Adopt #

      ๐Ÿงช Trial #

      • Guile embedded in C and GTK4 (moved in) โ€” the dock Wayland was waiting for, with a Lisp engine inside a native app

      ๐Ÿ” Assess #

      ๐Ÿ—‘๏ธ Deprecate #

      • Haskell (moved out) โ€” as beautiful and powerful as it is, it’s simply too complex for 9/10 use-cases
      • Scala
      • Common Lisp โ€” rather use Scheme if possible
      • TypeScript

      ๐ŸŽจ Frameworks & UI #

      โœ… Adopt #

      ๐Ÿงช Trial #

      ๐Ÿ” Assess #

      ๐Ÿ—‘๏ธ Deprecate #

      • Svelte
      • Servant (Haskell), API as a type
      • ZIO (Scala)

      ๐Ÿ—ƒ๏ธ Data & Storage #

      โœ… Adopt #

      • SQLite
      • PostgreSQL
      • Plain SQL queries
      • Hetzner Storage Volumes with Cron-job based backups and rsync

      ๐Ÿงช Trial #

      ๐Ÿ” Assess #

      ๐Ÿ—‘๏ธ Deprecate #

      • MySQL

      ๐Ÿงฐ๏ธ Tools & Environment #

      โœ… Adopt #

      • GNU Guix
      • Emacs
      • Org mode
      • Maak build tool and command runner
      • Veritas test framework (idiomatic unit, integration and black-box testing framework powered by Lisp - Guile Scheme)
      • Scriba structured logging framework (modular log routing, formatting, and filtering, allowing developers to generate human-readable console logs during development and machine-readable logs for production environments)
      • Woodpecker CI/CD โ€” the CI that replaced the Jenkins pipelines I used to maintain
      • Nix Flakes
      • Nix dev shells

      ๐Ÿงช Trial #

      • Podman (moved in) โ€” daemonless, root-less containers that stay under my own control
      • Hyprland (moved in) โ€” the Wayland compositor I actually use daily, after SwayFX taught me compositor scripting

      ๐Ÿ” Assess #

      • Forgejo โ€” a self-hosted forge for code I want to keep closer than Codeberg’s public instance
      • Guix Home โ€” one declarative description of the machine I actually work on

      ๐Ÿ—‘๏ธ Deprecate #

      • Jenkins (moved out) โ€” shared-library pipelines and Groovy DSLs, traded away for a thinner agent

      ๐ŸŒ Platforms & Delivery #

      โœ… Adopt #

      • Custom low-power green VPS (Hetzner)
      • Codeberg โ€” free software’s own forge, and the home of every project of mine

      ๐Ÿงช Trial #

      • Self-hosted Woodpecker runners on the same VPS (moved in) โ€” CI that never leaves infrastructure I control

      ๐Ÿ” Assess #

      • Guix System images on AArch64 (moved in) โ€” a machine I can describe, build and roll back, on hardware that is not x86
      • Guix System as the whole server, not just the toolchain

      ๐Ÿ—‘๏ธ Deprecate #

      • Amazon AWS

      โš™๏ธ Practice & Craft #

      โœ… Adopt #

      • Authorization and Authentication with Bewaking tokens as cookies
      • Guix Manifests
      • Guix dev shells
      • Hexagonal architecture / ports and adapters (moved in) โ€” the boundary earns its keep wherever the domain is the complicated part; the Hexagon of Doom is the case where it is not

      ๐Ÿงช Trial #

      • Server-side rendering over client-side JavaScript (moved in) โ€” pages that work before, and without, a megabyte of framework
      • This very site as a single Org tree (moved in) โ€” prose, build script and metadata in one plain-text source
      • Parsing Expression Grammar in Scheme with (ice-9 peg) (moved in) โ€” how OrgWebAlchemy turns Org into HTML without a parser generator

      ๐Ÿ” Assess #

      • Property-based testing โ€” describing the invariant instead of the example
      • Reproducible CI with `guix time-machine`

      ๐Ÿ—‘๏ธ Deprecate #