Il codice sorgente originale del Web
La testimonianza di Tim Berners-Lee
Vai agli altri articoli della serie “La rivoluzione tecnologica e le sue conseguenze”
Vai agli altri articoli della serie “L’industria del computer e la sua storia”
Sir Tim Berners-Lee ha messo all’asta il codice sorgente originale del web sotto forma di un “non-fungible token” (NFT). L’inventore del web ha affidato a Sotheby’s il compito di tenere l’asta che è partita il 1 giugno 2021 con un prezzo base di 1000 dollari. A quattro giorni dalla chiusura delle offerte sono stati già raggiunti i 3 milioni di dollari.
Tim Berners-Lee ha dichiarato che userà il ricavato per sostenere le iniziative benefiche intraprese da lui e dalla moglie Rosemary.
Per l’occasione Sir Tim ha scritto una lettera, pubblicata sul sito di Sotheby’s, nella quale ha raccontato la storia della sua scoperta e brevemente commentato i materiali offerti nell’asta che sono i seguenti:
- Archivio originale di file contenenti il codice sorgente, scritto tra il 3 ottobre 1990 e il 24 agosto 1991. Questi file contengono circa 9.555 righe di codice, il cui contenuto include le implementazioni dei linguaggi e dei protocolli inventati da Sir Tim; HTML (Hypertext Markup Language); HTTP (Hyper Transfer Protocol); e URIs (Uniform Resource Identifiers), così come i documenti HTML originali che fornivano indicazioni ai primi utenti web su come usare l’applicazione.
- Visualizzazione animata delle righe di codice scritte da Sir Tim (Video in bianco e nero, senza commenti), della durata di 30 minuti e 25 secondi.
- Una rappresentazione grafica vettoriale (formato SVG) del codice completo (A0: 841 mm di larghezza per 1189 mm di altezza), creata da Sir Tim con Pytohn dai file originali, completa della sua firma in basso a destra.
- Una lettera scritta nel file README.md (formato “markdown”) da Sir Tim nel giugno del 2021, che presenta alcune riflessioni sul codice e sul suo processo di creazione.
Token non fungibile ERC-721
Coniato il 15 giugno 2021, ed. 1/1
Smart Contract Address: 0x86ade256037d80d6d42df8df96d5be21cd25bd8f
Riflessioni sul codice di WorldWideWeb.app
di Sir Tim Berners-Lee
La gente sembra gradire le versioni autografate dei libri e, ora, che abbiamo la tecnologia NFT, ho pensato che potrebbe essere divertente fare una copia autografata del codice originale del primo browser web.
Sono stato molto fortunato, nel 1990, ad avere un po’ di tempo per sedermi e programmare. Grazie al mio capo, Mike Sendall, che si rese conto del mio entusiasmo per il sistema che volevo costruire e mi permise di farlo all’interno di un progetto ufficioso. Sapeva che volevo provare la macchina NeXT — il nuovo computer nero e fico che era anche una workstation Unix dell’azienda che Steve Job aveva avviato dopo la separazione dalla Apple. Quindi per me, un fisico diventato sviluppatore software, questo nuovo impegno sarebbe diventato stimolante su due fronti: un’occasione per provare il NeXT e, soprattutto, avere lo spazio e l’opportunità per creare il sistema ipertestuale globale basato su Internet al quale stavo pensando. Il sistema di sviluppo del NeXT infatti lo avrebbe reso facile.
Ho avviato il NeXTCUBE — il famoso cubo di magnesio da 12 pollici — forse l’Harley Davidson dei computer — e vi ho trovato uno strumento, InterfaceBuilder.app., se ricordo bene il nome. Quando creavo un nuovo progetto con Interface Builder (IB) dovevo scegliere una denominazione, così ho scelto “WorldWideWeb.app”. In IB c’era subito l’ossatura di alcune applicazioni di base per il sistema NeXT, con un menu “File” e un menu “Modifica”. Una volta scelta un’ossatura potevo aggiungere nuovi menu al progetto, finestre di dialogo e così via, semplicemente trascinando le loro icone. Non dovevo scrivere il codice di base dell’applicazione. Ho dovuto scrivere codice solo per le cose che rendevano la mia app diversa dalle altre app. Il linguaggio era Objective-C — nuovo per me, ma abbastanza simile ad altri che avevo già usato.
I file sono nella cartella “WWWNeXTStepEditor/WWW/NeXT/Implementation/”. Il codice che trovate in questo materiale è principalmente in Objective-C con estensione ‘.m’. C’erano anche file header con estensione “.h” ma le funzionalità browser erano nei nei file ‘.m’.
Ho già detto di Mike Sendall che mi ha lasciato la libertà di scrivere il codice un migliaio di volte, ma onestamente non riesco a ricordare una volta prima di adesso in cui sono tornato a riconsiderarlo. E anche se è stato scritto un sacco di anni fa, assomiglia molto al codice che scriverei oggi. Infatti si possono fare nuove applicazioni per iPhone usando Interface Builder di Apple (quando ho controllato l’ultima volta) che è un discendente di quello che usavo allora, e si può scrivere ancora in Objective-C.
Il design del web è fondamentalmente basato tre nuove specifiche che avevo nella mia testa mentre scrivevo questo codice.
L’Universal Document Identifier, ora chiamiamo URI o URL, è in un certo senso la chiave. Ogni documento sul web deve avere una denominazione che inizia propriamente con ‘http:’. Il codice che gestisce gli URI è in ‘HTParse.c’.
Le altre specifiche erano il protocollo di rete, Hypertext Transfer Protocol (HTTP), e il formato delle pagine ipertestuali, Hypertext Markup Language, HTML.
Il file ‘HyperText.m’ è quello che alimenta una finestra sullo schermo con il testo e con i link. Si parla molto di “ancore”. Nella terminologia ipertestuale, un’ancora è l’oggetto sul quale si può cliccare per eseguire un link. Quindi c’è del codice che permette di evidenziare una parola o un’espressione e segnarla come destinazione di un link, o renderlo il link ad un’altra ancora precedentemente assegnata. saprete che con un editor ipertestuale, si possono esprimere i propri pensieri e collegarli tutti insieme nel modo desiderato.
Il codice per comunicare con altri computer della rete è nel file HTTP. Ho progettato un nuovo protocollo, l’Hypertext Transfor Protocol, soprattutto per renderlo davvero semplice. Il codice in ‘HTTP.c’, per pubblicare un file su internet, è di appena 126 righe. In questo modo molte persone avrebbero potuto scrivere il codice già nelle loro applicazioni.
Il file ‘FileAccess.m’ ha il codice che carica e salva i file del computer locale. Notate che il codice di rete in ‘HTTP.c’ riceverà solo il contenuto da un server web e non permetterà si salvarlo direttamente su quel server. Se si desidera modificarlo occorre farlo nei file del computer locale, e poi sincronizzarli con i file di un computer che eseguono il programma server web. In questi primi giorni del web, questi erano in realtà eseguiti dalla stessa macchina, il NeXT.
A quel tempo non si poteva modificare direttamente il contenuto di un sito web. HTTP –il protocollo di rete — ha un’operazione “PUT” e una “GET”, ma non l’ho codificata all’epoca. In parte per mancanza di tempo. In parte per un’altra ragione: se si ha davvero intenzione di permettere alle persone di modificare la rete di ipertesti, non si può permettere a chiunque di aggiornarla. C’è bisogno di sviluppare concetti come identità e controllo degli accessi, dato che la maggior parte degli oggetti con cui lavoriamo non sono pubblici, o anche se finiscono per essere pubblici, hanno all’inizio una distribuzione limitata — e certamente una limitata capacità di modifica. Il progetto a cui sto lavorando ora, Solid, ha le parti standard per l’identità “single sign on” e per il controllo degli accessi. Il codice che vedete qui è solo un inizio, ma non abbiamo ancora finito!
È stato interessante tornare indietro e guardare quel codice. È sorprendente vedere come le cose contenute in quelle poche righe di codice, con l’aiuto di un’incredibile e crescente gruppo di collaboratori in tutto il pianeta, siano rimaste la base di quello che oggi è il web. Non ho mai pensato nemmeno una una volta di rilassarmi e sedermi — poiché il web era ed è in continuo cambiamento. Non è ancora al meglio delle sue potenzialità: c’è sempre tanto lavoro da fare!
Tim Berners-Lee 2021
#Thoughts on signing the WorldWideWeb.app code in 2021
As people seemed to appreciate autographed versions of books, now we have NFT technology, I thought it could be fun to make an autographed copy of the original code of the first web browser.
I was very lucky, back in 1990, to be allowed some time to sit and code. Thanks to a boss, Mike Sendall, who understood my excitement at the new system I wanted to build and let me do it as a quite unofficial project. He knew I wanted to try out the NeXT machine — the new cool black PC that was also a Unix workstation from Steve Job’s company when he split from Apple. So for me as a physicist-turned software engineer this was going to fun on two counts — fun to try out the NeXT, and especially, fun to have space to make this global internet-based hypertext system. The development system on the NeXT in fact would make it easy.
I fired up the cube — the famous 12" magnesium cube — maybe the Harley Davidson of computers — and found one of the tools, InterfaceBuilder.app. IIRC [If I Remember Correctly]. When I made a new project I had to choose a name for it so I typed in “WorldWideWeb.app” It gave me some basic skeleton apps for the NeXT machine, with a File Menu and an Edit menu straight away. Then I could add new menus to the project, and dialog boxes and so on, by just dragging things around, but then I had to write the core code to the app. I didn’t have to write code for that — only for the things which make my app different from other apps. The language of choice was Objective-C — a new one for me but pretty like others I’d used.
The files are in the folder ‘WWWNeXTStepEditor/WWW/NeXT/Implementation/”. The code you see in this artwork are mainly Object-C files with the “.m” extension. There were also header files with “.h” extension but the workings of the next browser was in the “.m’s”.
I’ve told the story of Mike Sendall letting me write the code a thousand times it seems, but I honestly can’t remember a time when I have actually gone back and looked at the code until now. And while it was a lot of years ago, it looks very like code I’d write today. And in fact you can make new iPhone apps using Apple’s Interface Builder (when I last checked) which is a descendent of the one I was using then, and you can write in Objective-C.
The design of the web is basically three new specs I wrote in my head as I wrote this code.
The Universal Document Identifier, which we now call a URI or URL, is in a way the key. Every document on the web has to have one of these names which starts typically with ‘http:’ The code which deals with URIs is in ‘HTParse.c’.
The other parts were the network protocol, Hypertext Transfer Protocol (HTTP), and the format for hypertext pages, Hypertext Markup Language, HTML.
The file “HyperText.m” is where I made a window on the screen with text with links. There is a lot about “anchors”. In hypertext terminology, an anchor is the thing you can click on to follow a link. So there is code to allow you to highlight something and mark it as a target of a link, or make it a link to another anchor you marked. Remember this was a hypertext editor, you could express your thoughts and link them all together however you liked.
The code for talking to other computers on the network is in the file HTTP. I designed a new protocol, the Hypertext Transfor Protocol, partly to be really simple. The code in ‘HTTP.c’ to get a file over the internet is just 126 lines. So lots of people would be able to write their own code to do that in their own apps.
The file ‘FileAccess.m’ has the code which loads and saves files to local computer files. Note the network code in ‘HTTP.c’ will only get content from a web server, not save it back. If you wanted to edit it you had to do that in the files on your computer, and then sync them with the files of a computer running a web server program. In the early days, those were actually the same NeXT machine.
At that time you could not directly edit content of a website. HTTP — the network protocol — does have a “PUT” as well as a “GET” operation, but I didn’t code it up. Partly from lack of time. Partly because if you are really going to allow people to all edit the same web of hypertext, you can’t let anyone update it. You need concepts of identity and access control as most things we work with are not public, or even if they end up public, they start off with limited distribution — and certainly limited ability to edit. The project I’m working on now, Solid, includes adding in those parts, web standards for identity “single sign on” and for access control. The code you see here was a start, but we are not finished!
It has been fun to go back and look over the code. It is amazing to see the things that those relatively few lines of code, with a help of an amazing growing gang of collaborators across the planet, stayed enough on track to become what the web is now. I have never once felt I could relax and sit back — as the web was and is constantly changing. It is not yet the best it can be: there is always work to be done!
Tim Berners-Lee 2021