L’evoluzione del web

L’idea del web è nata al CERN di Ginevra, dalla necessità di condividere facilmente documenti, in particolare articoli scientifici, tra i ricercatori. Quando Tim Berners-Lee progettò l’architettura del web, pensò due principali standard: html per rappresentare un documento ipertestuale, e http per ottenere e gestire i documenti sul server.

Con il tempo il web è approdato anche nel settore commerciale, e il modello di base si è evoluto: ha visto nascere CSS, Javascript, Ajax, fino a standard come HTML5. Oggi il browser, da semplice “visualizzatore”, è diventatato un vero e proprio ambiente in cui eseguire software (Javascript), e in grado di renderizzare un’interfaccia grafica ricca e dinamica. Ora si parla di applicazioni web, dove il server è deputato al lavoro pesante (storage, database, elaborazioni…), e il client è un’interfaccia verso l’utente.

Questa architettura, forse per merito della semplicità alla sua base, è molto elastica, e ha avuto successo. In passato c’erano pesanti applicazioni da installare ed eseguire in locale, oggi semplici pagine web, che scaricano ed eseguono il codice solo quando effettivamente necessario. Un altro vantaggio è che il server è controllato e gestito da personale qualificato, sollevando l’utente da questo problema, e il client è un software di semplice utilizzo e disponibile per qualsiasi piattaforma.

Tuttavia, secondo me, ci sono alcuni aspetti di questa architettura che non agevolano lo sviluppo di applicazioni web complesse. Una su tutte è l’avere, lato client, un solo linguaggio di programmazione da utilizzare. A parte le preferenze personali, il fatto è che per risolvere problemi diversi sono necessari strumenti diversi. Inoltre occorre interfacciare la parte javascript con quella server, facendo quindi interagire linguaggi e tecnologie diverse, complicando il lavoro. Riguardo l’interfaccia, per quanto html e css si siano molto evoluti, sarebbe comunque interessante poter provare strumenti e paradigmi diversi.

La mia idea è che il browser potrebbe diventare più simile ad una virtual machine, eseguendo un bytecode standard. Dovrebbe esporre delle api, che permettano al programma di accedere alle risorse hw e sw del client, come input, output, storage, rete… Il tutto in un ambiente sand-box e sempre tenendo conto della sicurezza dell’utente.

In questo modo si potrebbero sviluppare molti linguaggi e tecnologie diversi, che andrebbero a “compilare” verso il bytecode standard, permettendo di scegliere gli strumenti migliori per ogni problema, e di sperimentarne di nuovi ogni giorno. Si potrebbero comunque continuare ad utilizzare le vecchie tecnologie, semplicemente reimplementandole con il bytecode standard.

Sarebbe un ulteriore strato di astrazione, con cui sviluppare software indipendente dalla piattaforma hardware e software e progettato per esistere e lavorare in rete.