La storia di Java: da un telecomando interattivo al backend delle banche
Dal Green Project di Sun a Java 25: la JVM, "write once, run anywhere", l'acquisizione Oracle e un linguaggio che si è reinventato ogni sei mesi
6 min di letturaStoria dei linguaggi
Luigi Iadicola, Programmatore - Napoli
In questo articolo
Secondo capitolo della serie sulla storia dei linguaggi backend. Dopo PHP, nato quasi per caso, parliamo di un linguaggio con una genesi opposta: progettato da un team dedicato, dentro una grande azienda, con un obiettivo preciso. Solo che quell'obiettivo non era il web. La storia di Java comincia con i televisori.
1991: il Green Project
Nel 1991 Sun Microsystems avviò un piccolo gruppo di lavoro, il Green Project, con James Gosling, Mike Sheridan e Patrick Naughton. L'idea era che la prossima ondata dell'informatica sarebbe arrivata dall'elettronica di consumo: decoder, telecomandi, dispositivi domestici interconnessi.
Il problema era che questi dispositivi usavano processori diversi tra loro. Scrivere software in C++ per ognuno era costoso e fragile. Gosling progettò allora un nuovo linguaggio: sintassi familiare per chi veniva dal C, ma più semplice e sicuro, senza aritmetica dei puntatori né gestione manuale della memoria. Lo chiamò Oak, dalla quercia che vedeva fuori dalla finestra del suo ufficio.
Il team costruì anche un prototipo, lo Star7, un dispositivo palmare con touchscreen. Nella sua interfaccia compariva un personaggio animato, Duke, che è ancora oggi la mascotte di Java.
La svolta: il web
Il mercato della TV interattiva non decollò. Ma nel frattempo stava esplodendo qualcos'altro: il World Wide Web. Il team capì che il problema che stavano risolvendo, far girare lo stesso codice su hardware diverso, era esattamente il problema del web, dove ogni utente aveva un sistema diverso.
Il nome Oak era già registrato da un'altra azienda, quindi serviva un'alternativa. Dopo una sessione di brainstorming venne scelto Java, come il caffè. Il 23 maggio 1995 Sun presentò Java alla conferenza SunWorld, insieme al browser HotJava, capace di eseguire piccoli programmi dentro le pagine web: le applet. Poco dopo Netscape annunciò il supporto a Java nel suo Navigator, e il linguaggio ebbe una visibilità enorme.
La JVM e "Write Once, Run Anywhere"
L'idea tecnica centrale di Java è la Java Virtual Machine. Il codice sorgente non viene compilato in istruzioni per un processore specifico, ma in bytecode, un formato intermedio eseguito dalla JVM. Basta avere una JVM per la propria piattaforma e lo stesso programma gira ovunque.
Lo slogan era Write Once, Run Anywhere. Nella pratica le differenze tra piattaforme non sparirono del tutto, ma il principio cambiò il settore. Insieme alla garbage collection automatica, rese la programmazione molto più sicura rispetto al C++ dell'epoca.
Il JDK 1.0 uscì nel gennaio 1996. Il JDK 1.1 (1997) portò le inner class, la reflection e JDBC per l'accesso ai database.
Java 2 e la conquista delle aziende
Nel 1998 arrivò la versione 1.2, ribattezzata Java 2, con le Collections e l'interfaccia grafica Swing. Poco dopo Sun divise la piattaforma in tre edizioni: J2SE per il desktop, J2ME per i dispositivi mobili, J2EE per le applicazioni enterprise.
Le applet, alla fine, non vinsero: lente, pesanti, piene di problemi di sicurezza. Ma Java trovò la sua vera casa sul server. Servlet, JSP ed EJB diventarono lo standard per banche, assicurazioni, pubblica amministrazione e grandi aziende. Con la JVM HotSpot (default da Java 1.3, nel 2000) e la sua compilazione just-in-time, le prestazioni smisero di essere un problema.
Gli EJB delle prime versioni erano però notoriamente complessi. Come reazione nacque nel 2002–2004 lo Spring Framework di Rod Johnson, basato su oggetti Java semplici e dependency injection. Spring cambiò il modo di scrivere Java enterprise, e anni dopo Spring Boot (2014) rese immediato avviare un'applicazione.
2004: Java 5, la più grande evoluzione del linguaggio
Java 5 (2004) fu una rivoluzione: generics, annotazioni, enum, autoboxing, il ciclo for-each, varargs e le utilità di concorrenza di java.util.concurrent.
I generics furono introdotti con la type erasure: le informazioni sui tipi esistono in compilazione ma vengono cancellate nel bytecode, per restare compatibili con il codice esistente. È un compromesso che pesa ancora oggi, e che vedremo trattato in modo diverso da C# nel prossimo capitolo.
Open source, Oracle e il periodo buio
Nel 2006 Sun annunciò il rilascio di Java come software libero, dando vita a OpenJDK. Nel 2010 Oracle completò l'acquisizione di Sun Microsystems, diventando proprietaria di Java.
Quegli anni furono difficili. Java 7 arrivò solo nel 2011, cinque anni dopo Java 6, con novità utili ma limitate come il try-with-resources e l'operatore diamond. Nello stesso periodo Oracle fece causa a Google per l'uso delle API Java in Android. La vicenda durò oltre dieci anni e si chiuse nel 2021, quando la Corte Suprema degli Stati Uniti diede ragione a Google, ritenendo quell'uso un fair use.
Intanto, sulla JVM crescevano linguaggi alternativi più espressivi: Scala, Groovy, Clojure e poi Kotlin, che Google avrebbe scelto come linguaggio preferito per Android.
2014: Java 8 e la programmazione funzionale
La risposta arrivò con Java 8, nel marzo 2014: lambda expression, la Stream API, Optional, i metodi di default nelle interfacce e una nuova API per date e orari. Il linguaggio diventò molto più conciso.
Java 8 ebbe un successo tale che molte aziende ci sono rimaste per anni. Ancora oggi non è raro trovarlo in produzione.
Dal 2017: un rilascio ogni sei mesi
Java 9 (2017) introdusse il sistema di moduli, il progetto Jigsaw. Ma la vera novità fu organizzativa: dal 2018 Java esce ogni sei mesi, con una versione LTS (supporto a lungo termine) a intervalli regolari: 11 (2018), 17 (2021), 21 (2023), 25 (2025).
Le funzionalità arrivano spesso prima in anteprima, vengono provate dalla comunità e poi stabilizzate. Così Java ha recuperato terreno in fretta:
varper l'inferenza di tipo locale (Java 10).- Records per i dati immutabili (Java 16).
- Sealed classes e pattern matching (Java 17 e 21).
- Virtual threads del progetto Loom (Java 21): milioni di thread leggeri, che rendono semplice scrivere codice concorrente senza programmazione reattiva.
Anche la parte enterprise si è trasformata: nel 2017 Oracle ha affidato Java EE alla Eclipse Foundation, dove è diventato Jakarta EE.
Cosa ci insegna la storia di Java
Java è nato per un mercato che non è mai esistito, ha fallito nel browser e ha conquistato il server. Il suo punto di forza non è mai stato l'essere alla moda, ma la stabilità: compatibilità all'indietro, una virtual machine eccellente e un ecosistema enorme.
Il suo punto debole è stato, per anni, la lentezza nell'evolversi. Il rilascio semestrale ha risolto proprio questo. Nel prossimo capitolo parliamo del linguaggio nato, in buona parte, come risposta di Microsoft a Java: C#.
Hai lo stesso problema in azienda?
Raccontami cosa non va e da quando. Guardo la situazione con te prima di proporre qualsiasi intervento.
Ricevi il prossimo articolo
Una mail per ogni articolo nuovo, nient'altro. Ti disiscrivi con un clic dal link in fondo a ogni email.