From 2ce2077d1407a294c3af12e3763cd2fb167e108c Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 28 Feb 2026 15:08:44 +0000 Subject: [PATCH] Add risks and pitfalls analysis for sexp protocol Honest assessment: adoption chicken-and-egg, security surface area, accessibility gap, tooling desert, Lisp Curse fragmentation, Worse Is Better problem, and mitigation strategy for each. Co-Authored-By: Claude Opus 4.6 --- docs/sexpr-risks-and-pitfalls.md | 86 ++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docs/sexpr-risks-and-pitfalls.md diff --git a/docs/sexpr-risks-and-pitfalls.md b/docs/sexpr-risks-and-pitfalls.md new file mode 100644 index 0000000..e503ffb --- /dev/null +++ b/docs/sexpr-risks-and-pitfalls.md @@ -0,0 +1,86 @@ +# S-expression Protocol: Risks and Pitfalls + +**Bear traps, historical precedents, and honest assessment of what could go wrong.** + +--- + +## Adoption Chicken-and-Egg + +No one builds clients for a protocol no one serves. No one serves a protocol no one has clients for. HTTP won despite technically inferior alternatives because it was *there*. The Tier 0 strategy (sexp rendered to HTML by the server) is the right answer — you don't need anyone to adopt anything on day one. But the jump from Tier 0 to Tier 1/2 requires a critical mass of sites serving sexp, and that's historically where alternative protocols die. + +--- + +## Security Surface Area + +Evaluating arbitrary sexp from a remote server is `eval()` with s-expressions. Sandboxing matters enormously. What can a component do? Can it access localStorage? Make network requests? Read other components' state? HTML's security model (same-origin policy, CSP, CORS) took 20 years of CVEs to get to where it is. You'd need an equivalent — and you'd need it from day one, not after the first exploit. The "components are functions" model is powerful but "functions from strangers" is the oldest trap in computing. + +--- + +## Accessibility + +HTML's semantic elements (`