Vai al contenuto principale
StoriaStoria dell’informaticaPrincipiante

Java: scrivere una volta, eseguire ovunque

Dal progetto Green a OpenJDK: come Java ha costruito la portabilità attorno a bytecode, JVM e un ecosistema duraturo.

Pubblicato 17 agosto 2026Aggiornato 15 settembre 2026Lettura : 10 minDi Yann Bastien
Java: scrivere una volta, eseguire ovunque
Mostra indice
  1. 1991: il progetto Green
  2. Oak: Java prima di Java
  3. Bytecode e JVM: spostare il problema della portabilità
  4. Dal progetto Green al Web
  5. Java non è JavaScript
  6. Java 1.0: una piattaforma, non solo un linguaggio
  7. Java 2 e l’era aziendale
  8. La JVM diventa veloce
  9. Perché le applet sono scomparse
  10. Java 5: modernizzare senza rompere
  11. L’ecosistema diventa importante quanto il linguaggio
  12. OpenJDK: una piattaforma oltre un singolo fornitore
  13. Android: un’altra vita per Java
  14. Java 8: lambda e stream
  15. La JVM diventa multilinguaggio
  16. Java moderno: evoluzione regolare e virtual thread
  17. Perché Java è ancora importante
  18. Da Oak a un’infrastruttura mondiale
  19. In sintesi
  20. Domande frequenti
  21. Chi ha creato Java?
  22. Come si chiamava originariamente Java?
  23. Perché Java è portabile?
  24. Java e JavaScript sono collegati?
  25. Esistono ancora le applet Java?
  26. Cos’è OpenJDK?
  27. Qual è la differenza tra Java e JVM?
  28. Perché Java è durato così a lungo?

Java è uno dei pochi linguaggi di programmazione la cui storia attraversa diverse grandi trasformazioni dell’informatica: elettronica di consumo, ascesa del Web, applicazioni aziendali, open source, smartphone e cloud.

Quando fu presentato al pubblico nel 1995, la sua promessa era riassunta da uno slogan celebre: “Write Once, Run Anywhere”, scrivere una volta ed eseguire ovunque. Java diede forma concreta a questa ambizione con una combinazione duratura: un linguaggio relativamente accessibile, bytecode, la Java Virtual Machine (JVM), gestione automatica della memoria e una libreria comune.

Eppure Java non nacque per il Web. La sua storia iniziò alcuni anni prima in un progetto dedicato al futuro dei dispositivi elettronici.

1991: il progetto Green

All’inizio degli anni Novanta Sun Microsystems era nota soprattutto per workstation Unix e informatica di rete. Alcuni ingegneri pensavano però che la successiva ondata avrebbe coinvolto anche dispositivi intelligenti di consumo: televisori interattivi, set-top box ed elettronica domestica.

Nel 1991 Sun avviò il Green Project. Tra i membri c’era James Gosling, destinato a svolgere un ruolo centrale nella progettazione del nuovo linguaggio.

Il problema era chiaro: quei dispositivi potevano usare processori e ambienti molto diversi. Mantenere una versione del software per ogni architettura sarebbe stato costoso e fragile. La portabilità divenne quindi un requisito fin dall’inizio.

Oak: Java prima di Java

Gosling sperimentò inizialmente con C e C++. C++ offriva potenti astrazioni e controllo preciso delle risorse, ma il team cercava un ambiente più semplice da distribuire su hardware eterogeneo.

Gosling creò Oak, chiamato così per una quercia visibile dal suo ufficio. Il linguaggio mantenne una sintassi familiare agli sviluppatori C e C++, eliminando però diversi meccanismi difficili da gestire. Un garbage collector recuperava automaticamente la memoria e scompariva l’aritmetica esplicita dei puntatori.

L’obiettivo non era soltanto eseguire lo stesso software altrove, ma rendere i programmi complessi più sicuri e prevedibili.

Bytecode e JVM: spostare il problema della portabilità

La scelta architetturale decisiva di Java è il modello di esecuzione. Il sorgente non viene normalmente compilato direttamente per un processore specifico, ma in un formato intermedio, il bytecode Java, eseguito da una Java Virtual Machine.

Se una piattaforma dispone di una JVM compatibile, può in linea di principio eseguire lo stesso bytecode. Invece di adattare ogni applicazione a ogni macchina, si adatta la JVM alle diverse piattaforme.

È la base del Write Once, Run Anywhere. La portabilità perfetta dipende comunque da librerie, integrazione con il sistema e implementazioni, ma questa architettura riduce fortemente il lavoro specifico per piattaforma.

Dal progetto Green al Web

Il progetto Green non ottenne il successo commerciale sperato nella televisione interattiva. Nello stesso periodo il World Wide Web stava esplodendo. Sun capì che un linguaggio progettato per dispositivi eterogenei poteva essere utile anche in una rete di computer molto diversi.

Oak dovette cambiare nome per motivi di marchio e fu scelto Java. Sun presentò pubblicamente il linguaggio nel 1995.

Sviluppò inoltre HotJava, un browser capace di eseguire piccoli programmi Java incorporati nelle pagine: le applet. Animazioni, interfacce e piccoli giochi rendevano il Web improvvisamente molto più dinamico. Netscape aggiunse rapidamente il supporto a Java, dando al linguaggio enorme visibilità.

Quella vetrina sarebbe però stata temporanea.

Java non è JavaScript

La somiglianza dei nomi crea ancora confusione, ma Java e JavaScript sono linguaggi diversi.

JavaScript fu creato nel 1995 da Brendan Eich in Netscape come linguaggio di scripting leggero per il browser. La sua evoluzione è raccontata nel nostro articolo sulla storia di JavaScript.

Java si affermò soprattutto nelle applicazioni, nei server e nei sistemi aziendali. JavaScript divenne il linguaggio nativo del browser prima di estendersi a server e molti altri ambienti.

Java 1.0: una piattaforma, non solo un linguaggio

Nel gennaio 1996 Sun pubblicò il Java Development Kit 1.0. Java era già più di una sintassi: linguaggio, compilatore, JVM, libreria standard, strumenti di sviluppo, sicurezza e caricamento dinamico delle classi formavano una piattaforma coerente.

Gli sviluppatori potevano contare su API comuni per collezioni, input/output, rete, interfacce grafiche e concorrenza. Questa base condivisa divenne importante quanto il linguaggio stesso.

Java adottò inoltre molti principi della programmazione orientata agli oggetti: classi, oggetti, incapsulamento, ereditarietà e polimorfismo. Rispetto a C++, automatizzava maggiormente la memoria ed evitava varie operazioni di basso livello, favorendo la manutenzione di grandi applicazioni nel tempo.

Java 2 e l’era aziendale

Java 1.2, pubblicato nel 1998 con il nome Java 2, organizzò la piattaforma in diverse edizioni: J2SE per usi generali, J2EE per applicazioni aziendali e J2ME per dispositivi con risorse limitate.

J2EE ebbe un ruolo decisivo. Servlet, JavaServer Pages, Enterprise JavaBeans, accesso ai database, messaggistica e application server offrivano un ambiente standardizzato per grandi sistemi distribuiti.

Java divenne comune in banche, assicurazioni, telecomunicazioni, pubbliche amministrazioni e grandi aziende. Portabilità, tipizzazione statica, garbage collection, JVM matura e numerose librerie si adattavano bene a organizzazioni che dovevano mantenere software per dieci o vent’anni.

La JVM diventa veloce

Le prime JVM avevano fama di essere lente. La situazione cambiò con i compilatori JIT (Just-In-Time), che individuano il codice eseguito frequentemente e lo trasformano in istruzioni native ottimizzate durante l’esecuzione.

La JVM può così osservare il comportamento reale e ottimizzare i percorsi effettivamente utilizzati. HotSpot, acquisito e integrato da Sun, divenne una tecnologia centrale.

Java passò gradualmente dall’essere considerato troppo lento a sostenere sistemi server di grandi dimensioni.

Perché le applet sono scomparse

Mentre Java prosperava sui server, le applet declinavano. Richiedevano plugin o installazioni locali, comportavano problemi di sicurezza e distribuzione e potevano avviarsi lentamente.

Nel frattempo HTML, CSS, JavaScript e le API Web divennero abbastanza potenti da creare interfacce ricche senza plugin. I browser finirono per abbandonare quelle tecnologie storiche.

La scomparsa delle applet non significò la scomparsa di Java: il linguaggio aveva già trovato usi molto più duraturi nei server e nei sistemi aziendali.

Java 5: modernizzare senza rompere

Nel 2004 Java 5 introdusse, tra l’altro, generics, annotazioni, enumerazioni, autoboxing e cicli for migliorati.

I generics rafforzarono la sicurezza dei tipi nelle collezioni. Le annotazioni divennero essenziali per i framework che associano metadati a classi, metodi e campi.

Questa versione mostra una sfida permanente: evolvere abbastanza da restare moderno senza sacrificare la compatibilità che rende Java prezioso.

L’ecosistema diventa importante quanto il linguaggio

Una grande parte della storia di Java si svolge fuori dalla sintassi. Apache Tomcat, Hibernate e soprattutto Spring trasformarono lo sviluppo server. Spring diffuse la dependency injection e Spring Boot semplificò poi applicazioni autonome e servizi Web.

Strumenti di build come Maven e Gradle, librerie di test e IDE quali Eclipse, IntelliJ IDEA e NetBeans resero praticabile il lavoro su basi di codice enormi. Questo tooling industriale contribuì fortemente alla longevità di Java.

OpenJDK: una piattaforma oltre un singolo fornitore

Nel 2006 Sun annunciò l’apertura di gran parte di Java. OpenJDK divenne l’implementazione open source di riferimento della piattaforma.

Quando Oracle acquisì Sun nel 2010, Java entrò in una nuova fase istituzionale, con dibattiti su licenze e governance. OpenJDK assunse però un ruolo sempre più centrale.

Oracle, Red Hat, IBM, Amazon, Microsoft e altre organizzazioni contribuiscono oggi all’ecosistema o distribuiscono proprie build. Java è diventato così un’infrastruttura condivisa molto meno dipendente da una singola distribuzione commerciale.

Android: un’altra vita per Java

Le prime generazioni dell’SDK Android usarono Java come principale linguaggio applicativo. Android non eseguiva però semplicemente le applicazioni su una JVM Java SE tradizionale: Google creò un proprio stack, prima Dalvik e poi ART.

Questa differenza e l’uso delle API Java contribuirono a una lunga disputa legale tra Oracle e Google. Java rimase comunque per anni il linguaggio simbolo dello sviluppo Android.

Kotlin ricevette in seguito supporto ufficiale e divenne preferito per molti nuovi progetti, ma una quantità enorme di codice Java resta nell’ecosistema Android.

Java 8: lambda e stream

Nel 2014 Java 8 portò una delle più importanti evoluzioni moderne. Le espressioni lambda resero più concisa l’espressione dei comportamenti e l’API Stream introdusse un modello dichiarativo per filtrare, trasformare e aggregare dati.

Java incorporò così più idee della programmazione funzionale senza abbandonare le sue fondamenta orientate agli oggetti. Java 8 rimase una versione dominante in produzione per molti anni.

La JVM diventa multilinguaggio

La JVM non è più riservata a Java. Scala combina programmazione a oggetti e funzionale, Clojure porta un approccio ispirato a Lisp, Groovy offre un linguaggio dinamico e Kotlin una sintassi moderna con forte interoperabilità Java.

Questa diversità mostra che uno dei risultati più duraturi di Java potrebbe essere proprio la macchina virtuale. Gli sviluppatori possono beneficiare di garbage collector, JIT, diagnostica ed ecosistema JVM senza scrivere direttamente Java.

Java moderno: evoluzione regolare e virtual thread

Dal 2017 Java ha adottato un ritmo di pubblicazione più regolare. Le versioni moderne hanno aggiunto moduli, var, record, text block, pattern matching, sealed class e virtual thread.

I virtual thread, sviluppati con Project Loom, permettono di gestire un numero molto elevato di attività concorrenti leggere mantenendo un modello di programmazione familiare. Sono particolarmente utili per servizi che attendono spesso rete, database o altre operazioni di I/O.

Questa evoluzione riassume la strategia di Java moderno: ridurre gli attriti storici e adattare la JVM ai nuovi carichi di lavoro preservando il più possibile le applicazioni esistenti.

Perché Java è ancora importante

Java occupa un particolare compromesso tra prestazioni, portabilità, sicurezza di esecuzione, produttività e stabilità su larga scala. Python privilegia maggiormente concisione e rapidità di sviluppo; JavaScript domina storicamente il browser; C++ offre un controllo più diretto delle risorse. Java si è radicato nei sistemi destinati a durare.

La sua longevità deriva da forte compatibilità, JVM matura, garbage collector e JIT sofisticati, enorme ecosistema, buoni strumenti diagnostici e una vastissima base di codice esistente.

Java continua a essere criticato per verbosità, consumo di memoria e costi di avvio. Record, pattern matching, nuovi garbage collector, framework come Quarkus o Micronaut e tecnologie come GraalVM affrontano progressivamente questi limiti, soprattutto in cloud e container.

Java evolve quindi soprattutto per adattamento continuo, non per reinvenzione radicale.

Da Oak a un’infrastruttura mondiale

La televisione interattiva non fu il suo grande mercato. Le applet scomparvero. Sun Microsystems cessò di esistere come azienda indipendente. Eppure Java rimase.

Le sue fondamenta - portabilità, macchina virtuale, gestione automatica della memoria, librerie comuni e compatibilità - si dimostrarono utili ben oltre il contesto originale.

Java passò da linguaggio immaginato per dispositivi elettronici a piattaforma di esecuzione globale, utilizzata direttamente da Java e da una famiglia più ampia di linguaggi e strumenti costruiti attorno alla JVM.

In sintesi

Java nacque nel 1991 nel Green Project di Sun Microsystems con il nome Oak. L’architettura basata su bytecode e JVM mirava alla portabilità tra dispositivi eterogenei.

Il Web offrì a Java la prima grande vetrina attraverso le applet, ma il successo duraturo arrivò soprattutto da server e sistemi aziendali. Java 2, Java 5 e Java 8 fecero evolvere la piattaforma mentre framework e strumenti diventavano sempre più importanti.

L’apertura di OpenJDK, la diversità dei linguaggi JVM e sviluppi moderni come i virtual thread hanno trasformato Java in un’infrastruttura che va molto oltre il linguaggio originario.

Domande frequenti

Chi ha creato Java?

Java fu progettato all’inizio degli anni Novanta in Sun Microsystems. James Gosling è generalmente considerato il suo principale creatore.

Come si chiamava originariamente Java?

Il linguaggio si chiamava inizialmente Oak e fu rinominato Java prima della presentazione pubblica del 1995.

Perché Java è portabile?

Il codice Java viene normalmente compilato in bytecode, eseguito da una JVM disponibile su diverse piattaforme. Lo stesso programma compilato può quindi funzionare in più ambienti compatibili.

Java e JavaScript sono collegati?

No. Nonostante i nomi, sono linguaggi distinti con storie, progettazioni e modelli di esecuzione differenti.

Esistono ancora le applet Java?

Sono praticamente scomparse. I browser moderni hanno eliminato i plugin necessari e gli standard Web ne hanno assorbito gli usi principali.

Cos’è OpenJDK?

OpenJDK è il progetto open source che fornisce l’implementazione di riferimento della piattaforma Java. Diverse aziende e comunità contribuiscono e distribuiscono proprie build.

Qual è la differenza tra Java e JVM?

Java è un linguaggio. La JVM è una macchina virtuale che esegue bytecode. Anche Kotlin, Scala o Clojure possono usare la JVM come piattaforma di destinazione.

Perché Java è durato così a lungo?

Portabilità, compatibilità, maturità della JVM, enorme ecosistema e adozione diffusa nelle organizzazioni hanno creato una base particolarmente duratura.

Questo articolo ti è stato utile?

Fonti e riferimenti

  1. 1.Oracle - Java Language Specification
  2. 2.Computer History Museum - Java: The Inside Story
  3. 3.OpenJDK

Raccolta

Linguaggi di programmazione

15 / 26

  1. 01Grace Hopper: dai primi compilatori a COBOL
  2. 02John Backus: FORTRAN, la notazione BNF e il rifiuto del codice macchina
  3. 03Dennis Ritchie: il linguaggio C al cuore di Unix
  4. 04FORTRAN: dimostrare che un compilatore può competere con l'assembly
  5. 05Il linguaggio C: rendere portabili i sistemi senza nascondere la macchina
  6. 06Niklaus Wirth: da Pascal a Oberon, progettare con la semplicità
  7. 07Bjarne Stroustrup: progettare C++ senza rinunciare alle prestazioni
  8. 08Pascal: imparare a programmare rendendo visibile la struttura
  9. 09C++: da C with Classes al C++ moderno
  10. 10Programmazione orientata agli oggetti: oggetti, messaggi e astrazioni riutilizzabili
  11. 11Guido van Rossum: creare Python per rendere il codice leggibile
  12. 12Brendan Eich: JavaScript, dal prototipo Netscape allo standard del Web
  13. 13James Gosling: l'ingegnere all'origine di Java
  14. 14Python: leggibilità, batterie incluse e un ecosistema globale
  15. 15Java: scrivere una volta, eseguire ovunque
  16. 16JavaScript: il linguaggio che ha reso interattivo il Web
  17. 17Ken Thompson: da Unix a Go, la semplicità come metodo
  18. 18John McCarthy: Lisp e l'idea di programmare con i simboli
  19. 19Alan Kay: Smalltalk e il computer come medium personale
  20. 20Barbara Liskov: l'astrazione che ha reso modulare il software
  21. 21Robin Milner: ML, dimostrazione assistita e linguaggi dell'interazione
  22. 22Brian Kernighan: AWK, Unix e l'arte di spiegare il codice
  23. 23Anders Hejlsberg: da Turbo Pascal a C# e TypeScript
  24. 24Larry Wall: Perl, il linguaggio che ha collegato gli strumenti di Internet
  25. 25Yukihiro Matsumoto: Ruby e la felicità del programmatore
  26. 26Rasmus Lerdorf: PHP e la democratizzazione del Web dinamico
BiografiaStoria dell’informaticaPrincipiante

James Gosling: l'ingegnere all'origine di Java

Come James Gosling e il team Green di Sun progettarono Java: da Oak alle macchine virtuali e alla promessa della portabilità.

17 agosto 20265 min