Importante riconoscimento per OpenJDK

Sta per uscire la nuova versione di Android, che sarà la 7, il cui nomignolo avrà l’iniziale N. Pare che non ci siano molti nomi di dolciumi che iniziano per N nella lingua inglese e c’è chi scommette che, per tener fede al nomignolo che richiami un dolciume, Google dovrà ricorrere a “Nutella”, rendendo così omaggio all’inventiva dolciaria italiana. Da buon cremonese mi accontenterei anche di “Nougat”, che è il termine con cui è universalmente conosciuto il torrone.
A parte questa piccola incertezza, è ormai certo, invece, che Android 7 sarà una cannonata e che la piattaforma ufficiale per lo sviluppo delle applicazioni sarà OpenJDK, cioè la versione libera e open source di Java Standard Edition.
La storia della libertà di Java è alquanto intricata.
Creato nei pensatoi della Stanford University ad opera di una equipe guidata da James Gosling, il linguaggio Java venne prodotto dalla Sun Mycrosystem (dove Sun non è il sole ma sta per Stanford University Network). Questa azienda, già nel 2006, prima di essere assorbita dalla Oracle (per la modica cifra di 7 miliardi di dollari), aveva avviato una implementazione libera e open source della piattaforma Java, che assunse presto il nome di IcedTea e che costituisce il germe su cui si è sviluppata l’attuale piattaforma open che, da Java 7 in poi, si chiama OpenJDK ed è distribuita sotto licenza GNU GPL, cioè come software libero.
Parallelamente anche la fondazione Apache aveva avviato la realizzazione di una piattaforma Java open source con il progetto Harmony.
E’ proprio da quando l’IBM, nel 2010, ha abbandonato il sostegno al progetto Harmony unendosi alla Oracle nel sostegno a OpenJDK che quest’ultimo è diventato il riferimento unico del mondo del software libero e lo troviamo di default inserito in tutte le distribuzioni Linux.
OpenJDK sta per Open Java Development Kit ed è il pacchetto necessario per sviluppare applicazioni per computer usando il linguaggio Java. Il pacchetto contiene il sottopacchetto OpenJRE, cioè Open Java Runtime Environment, necessario per far girare sul computer le applicazioni sviluppate con il linguaggio Java. Per chi non è interessato a sviluppare applicazioni Java basta il JRE, che, nella versione Open o nella classica originale della Oracle, comunque gratuita, è bene avere sul computer per poter utilizzare le numerose applicazioni sviluppate in Java che esistono.
La Oracle, pur appoggiando la diffusione della versione open del kit di sviluppo standard, continua a distribuire i pacchetti binari del JDK e del JRE da lei prodotti e protetti da una licenza proprietaria.
Per cui non tutta Java è libera: alcune API (Application Programming Interface) possono essere presenti nel pacchetto originario della Oracle e non essere presenti nel pacchetto open e tutto questo genera pericolose trappole.
La stessa Google, che per sviluppare il primo motore Java a corredo del sistema Android ha fatto affidamento su API Java derivate dal progetto Harmony in itinere, è caduta in una di queste trappole e, pare inavvertitamente, ha utilizzato qualche cosa che non era o non era ancora sotto licenza libera: da qui l’annosa diatriba tra Google e Oracle, arrivata fino alla Corte Suprema degli Stati Uniti, con alla base la richiesta della Oracle di un indennizzo da un miliardo di dollari.
D’altra parte su OpenJDK, qualche anno fa, erano diffuse voci di inaffidabilità: pare che non funzionasse bene per la costruzione di applicazioni un po’ impegnative. Ma pare anche che col tempo abbia raggiunto un ottimo livello di affidabilità. Ne è una dimostrazione il fatto che Google lo abbia finalmente adottato in pieno; nè possiamo credere che ciò sia avvenuto, come qualche maligno insinua, per fare un dispetto alla Oracle: Android è ormai una cosa molto seria e non se ne può certo giocare la fama per un dispetto infantile.
Allora usiamo anche noi con fiducia OpenJDK.
Se siamo studenti che vogliono imparare o, come nel mio caso, dilettanti hobbisti ne avremo sicuramente a sufficienza, anche nel caso abbia ancora qualche difetto, per i nostri esperimenti.
Per i professionisti valga il fatto che lo ha scelto anche Google e, soprattutto, che il suo utilizzo anche per programmi da mettere in commercio con profitto eviterà all’autore di essere inseguito dalla Oracle.
Nel documento PDF allegato, scaricabile e stampabile, a vantaggio di studenti e hobbisti ho raccolto alcuni suggerimenti sugli strumenti di software libero esistenti per programmare in linguaggio Java, anche per applicazioni Android.

java_android

Vari tipi di programmi

I primi tre programmi che ho proposto sono ognuno di un tipo diverso.

Il programma calendario è un programma compilato, cioè è codificato, come si suol dire, in linguaggio macchina in modo da poter essere letto ed eseguito direttamente dalla CPU (Central Processing Unit) del computer attraverso il sistema operativo di cui il computer è dotato.
Questi programmi si scrivono in un linguaggio di programmazione che usa parole del linguaggio umano seguendo una determinata sintassi. Una volta scritti si traducono in linguaggio macchina attraverso programmi compilatori e si producono i così detti eseguibili (file che nel mondo Windows hanno l’estensione .exe).
I più famosi linguaggi che si prestano per produrre questo tipo di programmi sono, in ordine di anzianità, Pascal, C, C++, ADA.
Una volta che abbiamo l’eseguibile non ci interessa avere il programma compilatore e non ci interessa nemmeno sapere con quale linguaggio è stato prodotto l’eseguibile. A meno che vogliamo modificare l’eseguibile stesso: ma allora dobbiamo avere anche il codice sorgente, cioè quello scritto prima di essere codificato in linguaggio macchina.
La stragrande maggioranza del software commerciale è costituita da eseguibili di questo tipo e le aziende che producono questo software ben si guardano dal distribuire il codice sorgente, che mantengono protetto da brevetti. Nel mondo del software libero, invece, è normale distribuire anche il sorgente affinché ognuno possa contribuire al miglioramento del software stesso.
Il vantaggio di questo tipo di software è quello della velocità di esecuzione: vantaggio che, con la potenza dei processori che abbiamo oggi, è sempre meno percepibile in quanto vengono ormai eseguiti velocemente anche programmi di altro tipo.
Lo svantaggio sta nel fatto che un programma destinato ad essere eseguito su un certo sistema operativo deve essere compilato su e per quel sistema operativo. Un programma compilato per Windows non gira su Linux e su OS X e viceversa. Cioè, come si dice, gli eseguibili compilati non hanno portabilità.

Il programma calcoliGeometrici, prodotto utilizzando il linguaggio di programmazione Java, è anch’esso un programma compilato: la codifica, tuttavia, non lo traduce in linguaggio macchina ma in qualche cosa di intermedio, chiamato bytecode.
Questo bytecode non è direttamente proponibile per l’esecuzione dal sistema operativo del computer alla CPU ma viene passato alla CPU da una piattaforma intermedia installata sul sistema operativo, la così detta macchina virtuale Java, JRE (Java Runtime Environment).
Se il computer non ne fosse dotato, basta scrivere la parola java in una barra di ricerca sul web e verremo immediatamente indirizzati al sito da cui possiamo scaricare la versione adatta al nostro sistema operativo.
Molto software commerciale è prodotto con Java con distribuzione dell’eseguibile codificato in bytecode, che non è umanamente leggibile e si presta alla tutela dei segreti di fabbricazione. Nel mondo del software libero viene ovviamente diffuso anche il sorgente scritto nel linguaggio Java, derivato dal linguaggio C.
Il vantaggio di questo tipo di software sta nel fatto che lo stesso eseguibile gira su tutti i sistemi operativi che siano dotati della macchina virtuale Java, cioè è dotato della massima portabilità.
Lo svantaggio sta nella relativa lentezza di esecuzione dovuta al doppio passaggio tra sistema operativo e macchina virtuale e tra macchina virtuale e CPU; lentezza che praticamente non si avverte con i più moderni processori ma che si può avvertire su computer anzianotti.

Il programma MasterMind non è un programma compilato ma è, praticamente, un sorgente scritto nel linguaggio Python: in termine tecnico si chiama uno script.
Gli script, per essere eseguiti, hanno bisogno di essere tradotti in linguaggio macchina attraverso un interprete che li legge, li traduce e li trasmette alla CPU.
Sul computer dove vogliamo utilizzarli deve essere installato questo interprete.
I principali linguaggi di scripting, in ordine di anzianità, sono Perl, Python e Ruby.
Come per Java il vantaggio è la portabilità, a condizione che sul computer sia installato l’interprete.
Lo svantaggio è la relativa lentezza di esecuzione.