Zucht, daar gaan we weer. Ik stam nog uit de goeie ouwe tijd dat programma's data verwerkten en de data geen programmatuur bevatte. Niet alleen is dat heel overzichtelijk, ik denk zelfs dat als die scheidslijn niet zo zou verwateren computers minder magisch zouden overkomen en begrijpelijker zouden zijn voor al die mensen die er nu niets meer van snappen.
En het is niet nodig. Als je data met programmatuur vermengt, noem het geheel dan niet een document (zoals nu steeds gedaan wordt) maar een applicatie of app. Het is geen document met ingebedde macro's, maar een applicatie met een ingebed document. Zet een andere formaatidentificatie in de eerste bytes van het bestand, gebruik een andere extensie, een ander mime-type, en maak de scheiding voor zowel gebruikers als voor de software waarmee het geopend wordt expliciet en onmiskenbaar: dit bestand is passief (enkel data) en daar wordt geen JavaScript- of andere interpreter voor geladen, alleen een documentviewer; dat bestand is actief (het is een applicatie), dat wordt in een interpreter geladen en kan potentieel ongewenste dingen doen (welk risico eventueel weer met een sandbox-mechanisme kan worden beperkt, maar dat hoort wel duidelijk in het applicatiedomein thuis).
Die 'interpreter' is specifiek voor het documenttype, maar doet weinig meer dan de omgeving opzetten: de JavaScript-interpreter en de documentviewer worden geladen, die krijgen de JavaScriptcode respectievelijk het document aangeboden, en dan wordt initialisatiecode in de JavaScript gestart met een referentie aan document en API. De laatste wordt door de viewer ondersteunt voor toegang tot het document. Vermoedelijk zal die initialisatie weinig anders doen dan het document doorlopen en zichzelf als event handler koppelen aan interactieve elementen. De viewer zal zelf nooit een JavaScript- of andere interpreter laden, zodat als hij standalone wordt opgestart er domweg niets is om code mee uit te voeren, en JavaScript die in het geniep toch in het document zit wordt niet uitgevoerd en is onschadelijk. Dat de interpreter in het geheel niet geladen wordt maakt het geheel veel ongevoeliger voor ongelukken dan wanneer dat wel zo zou zijn.
In deze opzet verwerkt het programma ouderwets de data en niet andersom, en de gebruiker levert niets in: die ontvangt en opent nog steeds één bestand, het gedraagt zich exact hetzelfde en heeft precies dezelfde mogelijkheden, het presenteert zich alleen nadrukkelijk als een applicatie en niet als een document. Een document is dan altijd veilig, doet nooit stiekem iets onverwachts, is gewoon een passief document waar je je geen zorgen over hoeft te maken. Een applicatie is als zodanig herkenbaar, en zowel de gebruiker als het besturingssysteem kunnen daar anders mee omgaan.
Natuurlijk is hier niet alles mee gedekt, een misvormd document kan een buffer overflow in de viewer forceren en langs die weg code uitvoeren. Maar dat zijn bugs die gerepareerd kunnen worden, de kwetsbaarheid is niet inherent aan het ontwerp, zoals wel het geval is als je documenten programmacode laat uitvoeren.
Ben ik nou de enige ter wereld die dit een open deur vindt? Kennelijk wel, voor zover mij bekend wordt het nooit zo benaderd. Jammer, want je blijft gewoon alle mogelijkheden behouden die je nu ook hebt, met als extra's expliciete duidelijkheid en de zekerheid dat iets wat je als document bekijkt ook niet meer dan een document kan zijn.