In questo articolo diamo un’occhiata allo stato corrente delle tecnologie Java e alla direzione in cui probabilmente si muoveranno le cose nei prossimi anni. Dopo un periodo anche un po’ confuso di riorganizzazione, seguito all’acquisizione di Sun da parte di Oracle, finalmente si cominciano a intravedere alcune direttrici chiare.
JavaOne 2011
JavaOne è da sempre la madre di tutte le conferenze su Java. Negli ultimi anni sono nati e cresciuti eventi alternativi, molti dei quali in Europa e con un rapporto costo/valore anche superiore a JavaOne, ma la conferenza americana rimane fondamentale, fosse anche solo simbolicamente, per un semplice motivo: si tiene là dove la tecnologia ufficiale nasce.
La conferenza di quest’anno si è tenuta a inizio Ottobre ed era particolarmente attesa. Infatti, è la prima tenuta da Oracle dopo che l’acquisizione di Sun è andata a regime. Vi ricordo che Oracle ha avuto il via libera definitivo dall’antitrust europeo a gennaio 2010 e la JavaOne si è tenuta a settembre: in questo mondo “agilissimo” vi sembrerà un’eternità, ma i tempi delle grandi multinazionali sono molto lunghi. In particolare la “fusione” della cultura aziendale è qualcosa che richiede pazienza e decantazione: in molti non tollerano questi passaggi e infatti questi mesi hanno visto un certo numero di persone di provenienza Sun lasciare Oracle. E non mi riferisco a Gosling, che ormai da anni aveva un ruolo meramente rappresentativo, ma ai responsabili di progetto operativi di alcune aree della tecnologia.
Chi ha partecipato alla precedente JavaOne 2010, come il sottoscritto, si ricorda dell’impressione delle due conferenze non amalgamate: Oracle aveva “fuso” la sua Oracle World con JavaOne, praticamente affittando mezzo centro di San Francisco, ma dando l’impressione di mescolare acqua e olio. Più di questo aspetto, sociale e non tecnologico, la sensazione era quella di un riavvio, anche tenendo conto che molte attività erano già ferme negli ultimi anni di gestione di Sun (vedasi per esempio la storia di JDK 7). Dopo l’acquisizione di Sun da parte di Oracle abbiamo letto un gran numero di annunci da giorno del giudizio: Java ormai era “finito”, Oracle avrebbe castrato l’open source e compagnia cantante, e altre profezie di sventura.
A conferenza 2011 finita, possiamo trarre qualche somma di questo primo anno e tre quarti. Vi anticipo che il bilancio, per quanto mi riguarda, è positivo.
La diffusione di Java
Cominciamo a parlare di popolarità del linguaggio. Se vogliamo dare un’occhiata alle statistiche, uno dei riferimenti è TIOBE [1], che elabora i dati provenienti da alcuni motori di ricerca per stilare una classifica dei linguaggi più popolari. Prima di commentare i dati è necessario avvertire di usarli con precauzione: l’algoritmo di TIOBE sembra sofisticato, ma è pur sempre un modello matematico non validato da dati sperimentali. I dati sperimentali sarebbero un censimento (o “poll” se preferite) condotto con criteri professionali, sull’effettiva popolarità dei linguaggi. I modelli non validati possono essere completamente inutili, anche se oggi, purtroppo, vanno molto di moda, a partire dalla climatologia. Qualche dettaglio di TIOBE, oltretutto, lascia a desiderare: come le percentuali espresse alla terza cifra decimale, che sono francamente ridicole. Personalmente ritengo TIOBE inutile per le posizioni della classifica dopo la 5a-6a, in quanto i numeri sono così vicini tra loro da “annegare” nel rumore. Ma probabilmente TIOBE è almeno parzialmente utile per le prime posizioni; più che altro per guardare i trend annuali, visto che l’algoritmo di calcolo è sempre lo stesso per lunghi periodi di tempo.
Dunque che dice TIOBE? Java è il primo in classifica sin da quando è uscito, con sporadici appaiamenti al vertice da parte del C. A partire dai primi anni 2000, la sua popolarità è in calo lineare e questo è noto da tempo. Applicando un po’ di media mobile, il trend non è particolarmente cambiato in questo primo periodo di Oracle (un consiglio: evitate di leggere i blog che commentano come eclatanti le variazioni degli ultimi pixel a destra del grafico). Dunque, la prima grossa notizia è che nessun terremoto ha colpito Java. Il calo è fisiologico per ragioni che vi spiego sotto.
Figura 1 – I dati elaborati da TIOBE: come diffusione, Java è sempre al primo posto tra i linguaggi di programmazione.
Il processo di evoluzione del linguaggio, che è sempre accusato di essere poco innovativo, si è rimesso in moto dall’anno scorso. Ad oggi abbiamo release stabili di JDK 7 ed è un grande passo in avanti rispetto alla confusione totale che regnava alla fine dell’era Sun. In roadmap abbiamo JDK 8 e 9, che Oracle ha rimesso a una cadenza ragionevole biennale. Dopo lunghe discussioni, pare che sia stata trovata una sintassi finale per le closure (anche se più probabilmente saranno “first class functions”, qualcosa di meno delle closure vere e proprie) che dovrebbe soddisfare la maggior parte degli sviluppatori, senza introdurre grandi rivoluzioni.
I ritmi di evoluzione rispetto agli altri linguaggi
Dite che questo avanzamento è troppo lento? A parte il fatto che la cadenza biennale è ciò che Sun ha sempre fatto tranne che negli ultimissimi anni, secondo me tale cadenza è perfettamente adeguata. Java infatti è una tecnologia di mainstream (qualcuno dice addirittura di legacy). È estremamente affidabile ed è adatta per tutti i progetti in cui si vuole rischiare poco sul fronte tecnologico. Questi progetti sono la maggioranza abbondante di tutto quanto si faccia nel nostro mondo, a dispetto di quanto vi raccontano i blog più di moda (che però non rappresentano proporzionalmente tutto il mondo reale). Secondo i blog sono molto più cool strumenti come Ruby, Scala, JQuery o Node.js? Forse sì: ma ricordiamoci che sono nicchie di eccellenza, adatte a gruppi di sviluppatori esperti, e per questo in grado di dominare il rischio tecnologico. A questo aggiungiamo pure che molti sviluppatori vogliono stare sulla cresta dell’onda e ne hanno tutti i diritti: ma se vi fidate di TIOBE quando rileva un lento declino di Java, dovreste però anche prendere atto che TIOBE dice che i linguaggi più cool del momento rimangono per ora al pian terreno.
Il fatto è che nel mondo industriale/enterprise si rimane su scelte tranquille. Per questo motivo, un tasso di innovazione costante, ma lento, è proprio quello che ci vuole. Prima o poi arriverà la next big thing e sarà di nuovo una rivoluzione, come è stato con Java all’inizio: ma è meglio che le rivoluzioni accadano solo una volta ogni tanto.
Riordinamento dei JDK
Un secondo importante fattore di consolidamento è che Oracle sta operando una sorta di grande riunificazione su OpenJDK. Dallo scorso anno ha convinto IBM a mollare il fronte Harmony e a collaborare a OpenJDK; ha persino risolto l’annoso problema di Apple, sempre in ritardo con la sua versione di Java fatta in casa: a partire da JDK 7, la casa di Cupertino si limita a scrivere le customizzazioni sul code base di Oracle. Certo, questa notizia è più di forma che di sostanza, in quanto l’impatto è limitato: Mac OS X è poco presente in ambito industriale e, nonostante quasi tutti gli speaker delle conferenze usino un portatile della mela, meno del 10% degli sviluppatori Java usano Apple. Paghiamo queste buone notizie con la probabile scomparsa di Harmony (peccato, la competizione fa sempre bene) e quindi di un JDK con una licenza Apache, molto più libera di GPL. Ma era inevitabile: GPL tutela gli interessi del produttore a scapito dell’utilizzatore (lo so, lo so, molti di voi ora non saranno d’accordo, ma basta leggere bene i termini delle licenze) ed è chiaro che una multinazionale opta per il primo (ecco, se la lettura delle licenze non vi ha convinto, forse dovrebbe farlo questo semplice fatto). Non è cambiato molto dall’epoca di Sun: la diatriba GPL/Apache risale al primo annuncio di open sourcing di Java e la scarsa forza di Sun nel confronto con le altre aziende aveva di fatto generato una situazione di stallo. Java rimane open e forkabile secondo le garanzie della GPL, ma secondo le intenzioni di Oracle non devono esistere implementazioni alternative clean room: Harmony era un tentativo in quella direzione. Per questo motivo i delusi da questa direzione sottolineano che è più corretto parlare di JDK 7, 8 eccetera invece che di Java 7, 8: ci viene messo a disposizione un prodotto open, non una specifica open.
Figura 2 – La roadmap per il JDK come è stata pensata per i prossimi anni.
Google la pensa diversamente con il suo pseudo-Java dentro Android e questo atteggiamento ha causato la nota causa miliardaria (in dollari) con Oracle, di cui non è possibile ad oggi prevedere un esito, e che quindi non commento ulteriormente: sulle questioni legali gli speaker alle conferenze hanno una proibizione esplicita di commentare; la parola deve rimanere agli avvocati, quindi JavaOne 2011 non ha annunciato novità dal fronte.
Tecnologie RIA: dove va JavaFX?
A JavaOne 2011 è stata anche rilasciata una nuova roadmap di JavaFX 2. In realtà, questa tecnologia non ha una gran fama… ad ogni JavaOne, a partire dal 2007 JavaFX è stata al centro di molte presentazioni,ma con limitati impatti concreti sul mondo dello sviluppo. A guardare bene, JavaFX 2 non è più tanto simile alla prima versione, e quindi forse non sarebbe stato male anche cambiare il nome per far dimenticare gli insuccessi del precedente rilascio. JavaFX era un tentativo dell’ultimo momento per far competere Java con Adobe Flash/Flex e Microsoft Silverlight. Grande cuore di Sun, in cui personalmente ho anche confidato, ma la realtà dei fatti dice che la prima incarnazione è stata un fallimento: peraltro, a giudicare dai trend recenti direi che nessuno dei due competitori ha vinto e a quanto pare soccomberanno tutti a HTML 5, ma se non altro hanno avuto una loro vita. Oracle, invece, è nota per avere “poco cuore”: se un prodotto non ha un futuro, viene tagliato o riposizionato. È quello che è successo a JavaFX: da competitore di Flex è stato riassorbito da Java: è stato riciclato il runtime come API Java, non c’è più JavaFX Script, anche se il vecchio codice open è stato ripreso dalla community sotto il nome di Visage [2], ed è stato riposizionato come linguaggio per le UI usabile con vari runtime, Android incluso. La prospettiva confermata da JavaOne 2011 è per JavaFX 2 quella di avviarsi a diventare uno Swing 2.0. Questo avverrà con i tempi non brevi di cui sopra: abbiamo appena visto una prima pre-release per Mac OS X e la versione per Linux è attesa a fine 2012, ma la notizia interessante è che sarà parte integrante di JDK 8: quindi verrà anche reso open source, anche se i dettagli dell’operazione ad oggi non sono stati resi noti. Swing è croce e delizia per molti programmatori: molto popolare in ambito “industriale” dove le imprecisioni nel look & feel hanno un impatto marginale (ve lo ripeto, non prendete per oro colato i blog che dicono che tutto l’IT è HTML 5 e Web 2.0, ma, solo per fare un esempio, date un’occhiata alla galleria di prodotti industriali nello showcase di NetBeans Platform [3]), Swing offre un’ampia gamma di componenti insieme a estensioni di terze parti. Ma la tecnologia risente dei suoi tredici anni abbondanti e quindi pensare a una riscrittura di Swing “from scratch” è ragionevole: questo, nelle intenzioni di Oracle, è proprio JavaFX 2.0. Presumibilmente tra tre anni inizierà a rimpiazzare lentamente Swing: se lavorate in ambito industriale, iniziate a tenerlo sotto osservazione.
Anche Oracle sulla nuvola
Una novità, che prefigura un cambio di linea, per altro atteso, è stato l’annuncio sull’offerta cloud di Oracle: qui sto parlando di uno speech di Oracle World, ma ovviamente non fa differenza [4] [5] [6]. In passato, quando tutti gli altri giocatori hanno iniziato a bombardarci con il termine cloud, Larry Ellison si era dimostrato molto scettico. Probabilmente perche’ non si può offrire un cloud se non si produce hardware di alta fascia, a meno di dover concedere qualcosa ai concorrenti IBM, HP, Sun, tutti produttori anche di hardware. Con l’acquisto di Sun e della sua sezione hardware. Oracle è ora in grado di proporre un’offerta completa e giocare in casa. Nonostante ciò, se mi chiedete in cosa consiste il Cloud di Oracle, ho ancora molti dubbi. Da un lato, c’è un’offerta legacy basata su WebLogic 11g (che è JEE 5) che integrerebbe una serie di prodotti per poter gestire il PaaS (Platform as a Service, cioè deployate su una fetta di cloud ritagliata su misura). Pare più orientata a una semplificazione gestionale e riduzione dei costi di ownership: la buzzword è “All the productivity of Java, without the IT” e a invitare le applicazioni esistenti a fare un primo passo senza troppi traumi. Dall’altro, tutta la specifica JEE 7 è chiaramente orientata al cloud “vero”, in particolare al modello di provisioning dinamico, cioè alla capacità di ridurre od incrementare in tempo reale il numero di nodi su cui l’applicazione è deployata: considerate che Java EE è sempre stato statico da questo punto di vista. Ma è difficile fare previsioni oggi: Java EE 7 ha come target fine 2012, tuttavia è stato chiaramente detto che entreranno nel rilascio solo quei componenti che saranno pronti in tempo, il che fa capire che il rilascio sarà un sottoinsieme di quanto annunciato.
Io non ho dubbi che Oracle venderà il suo cloud. L’esperienza dell’anno scorso è stata illuminante: per la prima volta ho potuto “toccare con mano” Open World e rendermi conto delle sue dimensioni. Un numero di partecipanti superiore di 3-5 volte (stimati, dati ufficiali non ne ho mai letti) a quelle di JavaOne. Anche considerando che JavaOne 2010 ha avuto un tasso di partecipazione più basso del normale,dovuto al momento di transizione, è un rapporto impressionante. Questo fa capire che la maggior parte dei soldi gira con criteri e strade che noi non vediamo, e che di sicuro non sono descritte dai già citati blog, in un contesto dove le strategie di marketing sono prevalenti rispetto alla tecnologia: per dirla in modo un po’ brusco, ma efficace, ad Open World trovate una folla di “cravattati”, non di geeks e ingegneri.
Personalmente, se dovessi fare cloud oggi guarderei in altre direzioni: terze parti offrono servizi che è possibile provare oggi e mi piacciono molto perche’ sono molto più semplici. Invece di partire dalla precondizione secondo cui il vostro codice dev’essere compliant con certe huge-specs come JEE, potete deployare quello che volete. Preferisco l’approccio “libreria di componenti” alla Spring, da cui prendo solo i pezzi che mi servono (da più parti, magari anche da JSR di JEE), piuttosto che abbracciare totalmente una huge-spec tirandomi nel classpath tanti terabyte di JAR. Tuttavia questa è una considerazione tecnologica e poche righe sopra ho appena scritto che il cloud si muoverà invece secondo considerazioni di business. Arrivato qui, mi dichiaro incompetente e chiudo il punto.
IDE: strategia “a tre punte”
Sul fronte degli IDE, sono state aggiornate le roadmap per NetBeans e JDeveloper. NetBeans 7.1, la cui beta è già scaricabile, includerà supporto per JavaFX 2.0 ma, notizia degli ultimi giorni, subirà un ritardo di qualche settimana. Oracle continua la sua strategia “a tre punte”, supportando contemporaneamente NetBeans (la IDE Oracle per tutti), JDeveloper (la IDE Oracle pacchettizzata con i prodotti di fascia superiore) ed Eclipse (la IDE non Oracle, ma popolare). È probabile pensare ad una progressiva integrazione tra NetBeans e JDeveloper, ma non è dato saperlo in anticipo, salvo voci di corridoio da verificare. Beninteso, come membro del NetBeans Dream Team potrei sapere qualcosa, ma anche se fosse così, con la nuova politica di comunicazioni di Oracle non potrei rivelarla; quindi per ogni scopo pratico di questo articolo, non so niente.
Conclusioni
Questi sono alcuni punti principali su cosa ci ha detto JavaOne 2011. In sintesi, il mondo va avanti regolarmente e le instabilità dell’acquisizione Oracle-Sun sono terminate. L’unica eccezione è la causa con Google, che potrebbe avere effetti importanti, anche se, per quanto mi riguarda, credo che si concluderà con un grosso bonifico bancario. Oracle, con i suoi mezzi e la sua strategia di business efficiente, ha eliminato dal mondo Java l’instabilità dovuta alla precaria salute di Sun, moribonda da tempo. Paghiamo questa cosa con la diversa strategia di comunicazione e la diversa cultura aziendale. A livello di comunicazione, con Oracle ci saranno poche selezionate roadmap, e per il resto le cose si sapranno quando arriveranno; e per quanto attiene alla cultura aziendale, quella di Sun è stata un’esperienza eccezionale e irripetibile, incluso il rapporto con la community.
Il mondo di Java oggi è un mondo multipolare consolidato. Chiusa da tempo la fase unipolare in cui Java era quasi esclusivamente quanto usciva da Sun, il secondo polo (collettivo) è la community con la sua offerta di prodotti e architetture. Sun nei confronti del secondo polo mescolava un misto di attitudine “leader / follower”, con un rapporto non sempre chiaro, probabile segno del conflitto tra quanto avrebbe voluto fare (“for the sake of technology”) e quanto avrebbe dovuto fare (“for the sake of money”). Diciamo quindi che c’era un confine molto vago tra i due poli, in continua evoluzione. Ora abbiamo un primo polo consolidato che è OpenJDK (non solo Oracle, ma anche gli altri grandi partner come IBM e Apple) con un confine molto più netto rispetto alla community. Attenzione: non sto dicendo che c’è una rottura inconciliabile: i due mondi si parlano comunque. Si sono chiaramente delineate strategie in gran parte diverse, con una parte di terreno comune. A me piacciono i discorsi franchi, quindi apprezzo la fine delle ambiguità. Rispetto a questo modello, Google è un caso a parte, una specie di terzo polo, che evolverà in modi diversi a seconda di come si concluderà la causa con Oracle.
Tecnologicamente, infine, non si scorgono “next big things” all’orizzonte e dal mio punto di vista non vedo necessità di cambiare le mie strategie, come professionista Java di lungo corso. “Java is here to stay for the foreseeable future” è in definitiva un messaggio rassicurante. Se volete i brividi dell’innovazione, datevi da fare voi: potete sempre metterlo voi, il pepe, nei vostri progetti.
Riferimenti
[1] TIOBE Software: the coding standards coding
[2] visage: declarative language for expressing user interfaces
http://code.google.com/p/visage/
[3] NetBeans Platform
http://netbeans.org/features/platform/showcase.html
[4] Oracle Introduces Cloud and Social
http://cloud.dzone.com/news/oracle-introduces-cloud-and
[5] Oracle Java Cloud Service
http://cloud.oracle.com//my-cloud/service_java_specs.html
[6] Java EE Past, Present, & Cloud 7
http://blog.eisele.net/2011/10/java-ee-past-present-cloud-7.html