Introduzione
In passato ci siamo più volte occupati della storia di Java, partendo dall’assunto che comprendere le ragioni per cui all’inizio sono state compiute certe scelte tecnologiche aiutava a capire meglio la “filosofia” della piattaforma e a ipotizzarne gli sviluppi. In un paio di articoli pubblicati circa tre anni fa, Luca Vetti Tagliati raccontava dettagliatamente la storia delle prime fasi [1] che avevano portato alla nascita di Java, e delle principali tappe nella sua evoluzione con alcune innovazioni tecnologiche che ne avevano stabilito la direzione [2]. Una lettura interessante e davvero raccomandata, specie per coloro che non hanno vissuto direttamente quel periodo o quelli immediatamente successivi.
Ridendo e scherzando, da poche settimane Java ha compiuto 20 anni. Un’età di tutto rispetto in un mondo, quello della programmazione e dell’IT, che esiste da molto più di quanto normalmente si pensi, ma che è comunque decisamente giovane in confronto ad altre discipline scientifiche o tecnologiche.
Una serie di post pubblicati da John Waters sul suo blog [3], ci hanno dato lo spunto per una riflessione che parta proprio da questo anniversario per discutere di alcuni aspetti importanti: l’attualità o l’obsolescenza del linguaggio, le principali innovazioni passate e possibili, il “ruolo” di Java nel panorama attuale dello sviluppo, i paralleli con alcune esperienze del passato e i loro esiti.
Vent’anni e non sentirli…
…oppure sì? Oracle ha voluto dedicare al “compleanno” di Java (rilasciato ufficialmente il 23 maggio 1995) una serie di articoli e di altro materiale multimediale [4]. Sono stati sicuramente venti anni di innovazioni ma, e qui sta la prima considerazione, se chiedessimo qual è stata l’innovazione più importante del linguaggio, le risposte che otterremmo non sarebbero univoche. Qualcuno, più causticamente, potrebbe dire che negli ultimi tempi le innovazioni che pure ci sono state non hanno avuto l’impatto “rivoluzionario” che modifiche molto più semplici hanno avuto in passato. E anche questo è discutibile.
Da Oak a Java
L’articolo citato all’inizio [1] aveva, tra gli altri, il merito di riportare l’elenco del personale a vario titolo coinvolto nelle fasi iniziali di sviluppo del linguaggio Java (non c’era solo il pur cruciale James Gosling…) nonché quello di sottolineare lo spirito innovativo e il fervore tecnologico che venti anni fa furono alla base della nascita di Java. Si tratta di aspetti che magari oggi ci appaiono meno importanti, ma che all’epoca rappresentarono il forte impulso alla direzione che la piattaforma Java avrebbe preso nei primi, cruciali, anni della sua vita, sotto l’ombrello protettivo di Sun Microsystems.
Alcuni dei protagonisti di quel periodo sono stati intervistati proprio da John Waters sul suo blog ed è interessante vedere come a distanza di tanto tempo sia cambiata, anche nei diretti interessati, la prospettiva nei confronti della loro creatura, ma anche come certi principi siano valutati ancora positivamente a distanza di due decenni.
Chi si occupò del marketing del progetto e del marchio di Java, Kim Polese, racconta per l’ennesima volta le ragioni per cui si è passati da un nome temporaneo come “Oak” (c’era infatti una quercia fuori dall’ufficio di Gosling) a quello di Java: è una storia che tutti conoscono e la ragione risiede nel fatto che Java è un nome di uso comune nell’inglese americano per indicare il caffè. Java era quindi il prodotto destinato a “risvegliare” il mondo della programmazione con la sua dose di “caffeina innovativa”.
Innovazione reale
Più interessante è invece notare come in effetti Java fosse per l’epoca qualcosa di estremamente avanti rispetto ai tempi. Scott McNealy, allora CEO di Sun, usava ripetere fin dalla fine degli anni Ottanta il celebre assunto per cui “la rete è il computer”: frase di grande effetto e sicuramente in linea con lo spirito del tempo. A noi oggi sembra normale, ma dobbiamo sempre ricordarci che in quel periodo Internet era affare per pochi e ciò che il WWW ospitava erano sostanzialmente pagine statiche di testo. L’idea per cui Java avrebbe portato l’interattività sulle pagine Web era decisamente innovativa. Che poi le cose siano andate in modo diverso è meno rilevante.
Un’altra considerazione da fare è che il potenziale di Java apparve chiaro fin dai primi momenti. Magari non non era altrettanto chiara la direzione sicura che il progetto avrebbe effettivamente preso nel giro di pochi anni, ma in tutti i partecipanti appariva piuttosto evidente che si stava lavorando a qualcosa con dei “numeri”.
Interattività e real time
Le applet sperimentali realizzate nei primi tempi da svariati programmatori indipendenti che furono chiamati a collaborare con il gruppo di lavoro ebbero il merito di dimostrare le enormi potenzialità di questa nuova piattaforma. Tra quelle che vengono ricordate ce ne era una in grado di realizzare in tempo reale una sorta di risonanza magnetica sull’immagine di un corpo umano: in pratica si era in presenza della riproduzione schematica di una persona e, muovendo opportunamente il cursore su una sezione del corpo, si otteneva in tempo reale l’immagine relativa a quella zona. Un’altra applet era stata realizzata pensando al mondo della finanza: era sostanzialmente un foglio di calcolo in grado di tener traccia del valore del proprio portafoglio (di azioni, titoli, obbligazioni etc.) in tempo reale. È chiaro che si tratta oggi di app “banali” che possiamo facilmente installare sui nostri smartphone; ma va ribadito che per l’epoca applet come queste furono cruciali nel far comprendere l’importanza dell’interattività e i potenziali sviluppi che Java avrebbe potuto avere una volta messa in relazione con la potenza della nascente rete Internet.
La promessa del “dappertutto”
L’altra grande spinta propulsiva iniziale di Java fu l’idea che il linguaggio — a quei tempi si parlava di linguaggio, in definitiva — potesse essere presente dappertutto. Questa “ubiquità” andava intesa certamente nel senso di “write once, run everywhere”: la frase, per quanto un po’ eccessiva, era quasi vera (il “quasi” è d’obbligo) grazie alla creazione e diffusione di numerose Java Virtual Machine per i più svariati sistemi operativi. Ma l’idea di ubiquità era legata anche alla diversificazione dei dispositivi su cui Java avrebbe girato: dai “normali” computer, a dispositivi mobili, a sistemi set-top box e così via.
Se ampliamo un po’ lo sguardo, questa promessa si è in gran parte avverata, sebbene forse non nel modo esatto in cui l’avevano pensata i padri del progetto. Con Android, infatti, Java è ormai presente in letteralmente ben oltre il miliardo di dispositivi [5], a dimostrazione che la visione generale alla base del progetto guardava avanti, a un mondo tecnologico distribuito, a una realtà dell’immediato futuro in cui la rete avrebbe connesso dispositivi, persone e sistemi.
Deviazione di percorso
Se però guardiamo al “periodo intermedio” tra la nascita di Java e l’attuale panorama dominato dal mobile, il quadro che emerge è diverso. La seconda metà degli anni Novanta del Novecento e la gran parte del primo decennio del XXI secolo, infatti, segnano lo sviluppo di Java in senso server-side.
Inizialmente, l’enfasi fu infatti sul lato client di Java: i dispositivi con Java embedded, le applet (sì… le applet… non fingete di averle dimenticate…) nei browser, le applicazioni a interfaccia utente “ricca” e così via. Ma questo orientamento non tardò a cambiare: l’approccio incentrato soprattutto sul lato client non assunse l’importanza che inizialmente era stata ipotizzata, mentre le applicazioni lato server divennero a poco a poco quelle più importanti e ricche di positive ricadute. Questo non significò certo la morte del Java lato client, quanto piuttosto un netto ridimensionamento della sua importanza a vantaggio del back end.
Un’eredità pesante
il primo decennio dopo la nascita di Java vedrà infatti il grande sviluppo di applicazioni di tipo Enterprise e una prima generazione di soluzioni ampiamente diffuse che hanno consentito l’affermazione di Internet come base per il commercio. Di fatto per la prima volta erano presenti i presupposti tecnologici, architetturali e sociali (la massa di potenziali acquirenti) tali da consentire il fiorire dei numerosi siti di e-commerce che hanno caratterizzato quell’epoca.
Le aziende infatti potevano sviluppare e mettere in funzione delle applicazioni Enterprise indipendenti dalla piattaforma che poi potevano essere gestite attraverso un qualsiasi “terminale”, di tipo mobile o fisso, in sicurezza e con un alto grado di affidabilità: aspetti certamente non secondari che solo Java è riuscito a garantire su larga scala. Questa è stata una delle ragioni affinché Internet diventasse una piattaforma importante per quanto riguardava le transazioni commerciali di vario genere.
Una affermazione molto interessante è quella fatta dal Mike Milinkovich, il direttore esecutivo della Eclipse Foundation [6], che ha dichiarato più volte come Java sia un po il COBOL dei nostri tempi. A qualcuno un’affermazione del genere potrà apparire quasi denigratoria, ma essa va invece vista come una considerazione piuttosto positiva. Certo, se guardiamo al livello di eccitazione e di entusiasmo che la parola COBOL è in grado di generare, può aver ragione chi non vede un complimento in questo paragone… Ma se si guarda alla questione in termini di un’intera generazione di infrastrutture software a livello Enterprise e industriale, caratterizzate da robustezza e affidabilità, gli aspetti positivi del confronto emergono piuttosto chiaramente.
Come per il COBOL, quindi, è lecito attendersi che l’importanza e la diffusione di Java resteranno piuttosto grandi anche negli anni a venire. Ma non si deve dimenticare il fatto che Java continua ad evolversi e che numerosi cambiamenti — e in certi casi veri e propri stravolgimenti — hanno interessato il processo di crescita di questa piattaforma e continueranno a mantenere il linguaggio allineato a nuove esigenze che si manifestano con lo sviluppo tecnologico e che saranno soddisfatte dalle caratteristiche nuove implementate nelle future incarnazioni di Java. Qui sta il punto di forza di Java: essere al tempo stesso il linguaggio standard “de facto” dell’infrastruttura tecnologica lato server, ma continuare ad evolversi introducendo al suo interno importanti novità e aggiustamenti.
Perché ancora Java?
Abbiamo assistito in questi ultimi anni all’ascesa e al consolidamento di molti linguaggi: da quelli più “anziani” ma sempre in gamba, come JavaScript, fino ai prospetti più “giovani” e promettenti, come l’interessantissimo Google Go, passando attraverso Python e Node.js, per citarne alcuni. Ciò nonostante, Java resta uno strumento importante anche nello sviluppo di applicazioni per mobile, tanto da portare Onno Kluyt [7], chairman del Java Community Process (JCP) dal 2002 al 2006, ad affermare perentoriamente “No Java, no Android”.
Ma quali sono stati i punti di forza che hanno garantito la longevità della piattaforma?
Astrazione dal linguaggio macchina seppur con buone prestazioni
Uno degli aspetti su cui c’è maggiore consenso nella comunità di sviluppatori e tecnologi è che Java ha rappresentato uno dei primi esempi in cui si poteva rimanere “lontani” dal linguaggio macchina pur non sacrificando eccessivamente le prestazioni. E questo fatto è andato migliorando con gli anni. Chiaramente, per certi tipi di applicazioni che necessitavano di prestazioni eccezionali, Java non ha mai rappresentato la scelta ottimale. Ma per tutte le altre applicazioni, e sono la maggior parte, il gioco valeva nettamente la candela.
La tecnologia JVM, abbinata alle API che gestivano la concorrenza, ha concesso a Java prestazioni sovrapponibili quasi a quelle di linguaggi nativi; prestazioni che andavano più che bene per il tipo di applicazioni che dovevano essere scritte in quel linguaggio.
Se da un lato, infatti, le prestazioni di tecnologie più vicine alla macchina, come C/C++, sono sempre rimaste superiori, Java ha avuto dalla sua la portabilità e la maggiore facilità di sviluppo di codice di qualità riusabile che ne ha favorito l’adozione su larga scala in contesti anche molto differenziati.
L’adozione da parte dei “big players”
Un’altra ragione che ha decretato il successo di Java e il supporto a lungo termine per la sua adozione (ricordiamoci il parallelo sul COBOL…) è il fatto che Java, a un certo punto, è stato adottato e sostenuto dai grandi attori della scena IT. Nel periodo tra la fine degli anni Novanta e i primissimi anni Zero del nuovo millennio, alcuni grandi produttori di software, segnatamente IBM e Oracle, hanno decretato il successo di questo linguaggio rispetto ad altre pur valide alternative.
E ciò ha fatto sì che, di conseguenza, molti altri vendor, medi e piccoli, abbiano seguito l’onda e si siano dati da fare per realizzare a loro volta soluzioni in cui Java aveva un ruolo fondamentale. In breve, Java è diventata la “lingua franca” in grado di mettere in connessione un’innumerevole serie di applicazioni Enterprise, in soluzioni architetturali di tipo diverso. Una volta raggiunta la massa critica, questa ha sostenuto fino ad oggi lo sviluppo e l’evoluzione del linguaggio su cui si basava.
In pratica, da sistema operativo per apperecchiature set-top, Java è diventato lo standard enterprise dei due scorsi decenni, rappresentando il fattore comune per molte piattaforme di big data, ma senza perdere la sua capacità di essere utilizzato per scrivere, ad esempio, molte applicazioni mobile.
Miglioramento continuo
Sul concetto di “miglioramento” qualche lettore avrà di che ridire, ma il concetto che si vuol far passare è quello per cui Java ha comunque subito un processo di evoluzione e adattamento. A momenti esso è stato più coerente e spedito; in altre fasi è stato più controverso e convulso. Ma ciò non ha impedito l’introduzione di molte novità che, di volta in volta, hanno rappresentato una spinta importante per il mantenimento della posizione.
Dall’introduzione delle Classi interne in Java 1.1 alle Lambda in Java 8; dalla presenza dei Generics a partire da Java SE 5 alla modularità che arriverà nella versione 9, tutte queste modifiche hanno aggiunto qualcosa [8].
Il processo di governance
Certo non sono mancati problemi di crescita per il nosto ventenne. Il processo che porta al rilascio di nuove versioni, gestito dal Java Community Process (JCP) ha avuto il suo bel da fare, ed ha subito degli aggiustamenti tutt’altro che facili da quando Sun è stata acquisita da Oracle nel 2010 [9].
Per non parlare delle querelle relative al rilascio di Java sotto una licenza Open Source: si è passati attraverso la causa legale che portò nel 1997 Sun a chiedere 35 milioni di dollari di danni a Microsoft, colpevole a suo dire di aver “modificato” Java in maniera che funzionasse diversamente (e meglio) sui computer con Windows e che si concluse solo nel 2003. Da qui, poi si è arrivati al rilascio di Java sotto licenza GNU General Public License (GPL) prima per alcune parti nel 2006 e, infine, in maniera completa, nel 2007.
Conclusioni
Non abbiamo inteso, con questo articolo, approfondire dettagliatamente la storia di Java da un punto di vista tecnico o cronologico, quanto piuttosto fare una piccola riflessione sulle ragioni per cui, a venti anni dal debutto, il linguaggio sviluppato da Gosling e compagni mantenga ancora un ruolo di preminenza in un panorama IT e tecnologico in generale molto diverso da quello in cui vide la luce.
Cosa accadrà nei prossimi venti anni è molto difficile da prevedere. Di certo, però, almeno nell’immediato, Java è destinato a non scomparire da tale orizzonte. Lo verificheremo, eventualmente, al trentennale…