Home
Java, un linguaggio o una telenovela informatica?

03 Marzo 1998

Java, un linguaggio o una telenovela informatica?

di

Tra le tante promesse per il futuro di Internet e del mondo dei computer, c'è Java, il linguaggio promosso da Sun, ma anche da Netscape, IBM e Oracle. Unica ostile, Microsoft. Ma che cos'è Java, quale sarà il suo futuro? Marco Cantù si è messo sulle tracce di Java e lo seguirà per mezzo mondo, tra convention e incontri con i protagonisti di una vicenda che ormai travalica gli stretti ambiti tecnologici. Ecco la sua prima corrispondenza.

Java, Java, Java… questo nome risuona da tempo in modo insistente sulla stampa specializzata come una delle promesse per il futuro del software legato al mondo di Internet. E, come tutto ciò che riguarda Internet, accende passioni e dibattiti. La discussione e il conflitto si fanno più acuti nei casi, come questo, in cui sono in gioco interessi economici enormi e sono in campo molti “marketing dollars”(soldi spesi per il marketing).

In principio era un linguaggio

Tutti coloro che hanno un po’ di dimestichezza con Java sapranno certamente che l’origine del “mondo di Java”deriva dall’omonimo linguaggio di programmazione, inventato originariamente da alcuni esperti di Sun Microsystems per essere utilizzato all’interno di macchine dedicate, computer utilizzati all’interno di apparecchiature come una televisione o un videoregistratore. L’idea di partenza è stata quella di realizzare un linguaggio di programmazione a oggetti, potente ma non troppo complesso da utilizzare. L’aspetto chiave di questo linguaggio, però, è dato dal fatto che un programma non viene tradotto direttamente nelle istruzioni di una specifica CPU, ma viene convertito in una serie di istruzioni per una macchina virtuale (detta JVM, Java Virtual Machine). Con questo termine si intende un computer che in realtà non esiste (almeno fino ad oggi) ma che può essere emulato da un altro computer effettivo. Il vantaggio chiave di questo approccio è dato dal fatto che il programma potrà funzionare su qualsiasi computer, a patto che si disponga di una macchina virtuale. (Notate che questa idea non è terribilmente nuova, in quanto molti altri linguaggi sono stati spesso interpretati in una forma intermedia, spesso definita con il termine “pcode”, o pseudo-codice.)

Se l’idea originaria era legata al fatto che il programma per la televisione potesse funzionare su televisioni dotate di CPU differenti, Java oggi significa la possibilità di avere un programma che funziona sia sui computer Windows 95 che sui Macintosh, ma anche sui computer Sun e su tutte le varie piattaforme IBM. Lo slogan di Sun che accompagna questa idea è “Compile Once, Run Everywhere”(compila una volta, esegui dappertutto) e l’aspetto significativo è che il programma potrà funzionare su qualsiasi computer connesso a una rete eterogenea (una rete costituita da computer di tipo diverso) come è Internet.

Se questo modello in teoria è molto interessante, ci sono però alcuni problemi pratici. In primo luogo deve esserci una totale compatibilità tra tutte le macchine virtuali e le loro interfacce utente, altrimenti il mio programma funzionerà in modo diverso sui vari computer, obbligandomi a fare controlli su ognuna della tante piattaforme che i miei utenti vogliono poter utilizzare: da qui il controslogan “Compile Once, Debug Everywhere”(compila una volta, controlla che funzioni dappertutto).

Il secondo problema è dato dal fatto che questa emulazione comporta una perdita di prestazioni, che può essere ridotta ma non eliminata del tutto. A essere sinceri è un po’ ironico che il problema delle performance venga spesso sollevato dalle stesse persone (legate a Microsoft) che poi accettano senza problemi il codice generato da Visual Basic, che non brilla certo per efficienza.

Dal linguaggio a JavaOS

E qui veniamo al primo degli aspetti in gioco: la battaglia su Java (al di là degli indubbi meriti tecnici del linguaggio) è diventata subito una battaglia sui sistemi operativi, con da un lato Microsoft e dall’altro tutti gli altri produttori. La società di Bill Gates, infatti, negli ultimi anni è riuscita a convincere la grande maggioranza degli sviluppatori di programmi a scrivere codice che gira sulla piattaforma Windows, e che non è utilizzabile su altri computer. Questo ha fatto crescere ulteriormente la diffusione di Windows non solo come computer utilizzato da chi lavora in ufficio, ma anche come terminale sofisticato, utilizzato magari solo per un paio di programmi specifici dell’azienda.

Nello stesso tempo, la diffusione di Windows (e in generale dei PC) ha segnato una pesante sconfitta di chi all’interno delle grandi aziende vuole tenere sotto controllo i computer dei dipendenti, se non altro per fare copie di backup regolari dei file, evitare l’installazione di programmi non autorizzati e per evitare di dover modificare continuamente la configurazione di computer i cui programmi vengono aggiornati con estrema frequenza.

Per semplificare la vita alle aziende, dicono gli oppositori di Microsoft, basterebbe avere dei computer più semplici e meno sofisticati, che per la maggior parte degli utenti sarebbero comunque più che sufficienti, e potrebbero portare a notevoli risparmi, in termini di hardware ma soprattutto di manutenzione. Da questa considerazione è nata l’idea dei Network Computer, macchine molto semplici e in grado di utilizzare solo pochi programmi (come un browser, l’accesso alla posta elettronica e le applicazioni Java realizzate all’interno dell’azienda). In questo modo la Java Virtual Machine non è più in funzione sopra un altro sistema operativo, ma coincide in pratica con il sistema operativo del computer.

Ancora di più, Sun sta cercando di sviluppare CPU specifiche per Java, così da eseguire le applicazioni in modo nativo, praticamente eliminando l’idea della macchina virtuale. Il motivo è molto semplice: spingere le prestazioni di Java a livelli molto superiori a quelli attuali. Ma a questo punto, se Sun avesse il monopolio di un sistema operativo con annessa CPU, lasciando agli altri solo la possibilità di eseguire i programmi in modo più lento? Non sarebbe una situazione quasi peggiore di quella attuale, che vede Microsoft in posizione dominante e di monopolio di fatto?

Sun e Microsoft

Prima di rispondere a questa domanda occorre fare un passo indietro, per capire in che cosa consiste effettivamente la battaglia tra Microsoft e Sun.
Nella prima parte degli anni ’90, mentre Microsoft prendeva il controllo del sistema operativo delle macchine client (ovvero dei computer sulle scrivanie degli utenti), Sun assumeva una posizione molto forte sia per la piattaforma hardware sia per il sistema operativo dei computer usati come server (macchine più potenti e molto più costose usate tipicamente per macinare la grossa mole di dati necessaria a molte aziende). Ancora meglio andò per Sun quando l’esplosione del fenomeno Internet fece crescere enormemente la richiesta di macchine server dedicate appunto a servizi della Rete.

In un certo senso era una situazione di equilibrio, spezzata da Microsoft che negli ultimi due o tre anni ha iniziato a spingere in modo massiccio Windows NT come piattaforma server, conquistando significative quote di mercato sia per i server aziendali che per i server Internet. La contromossa, se vogliamo definirla così, di Sun è stata quella di fronteggiare Microsoft sul suo stesso campo di battaglia, ovvero le macchine client, con l’introduzione dell’idea della macchina virtuale Java, il JavaOS, i Network Computer e così via.

Java con o senza la JVM

La cosa importante da sottolineare, a questo punto, è che, anche se esiste un legame stretto tra Java e la sua macchina virtuale, questo legame non è indissolubile. Per esempio, Microsoft vuole spingere Java come linguaggio di programmazione Windows, perché ne riconosce i meriti tecnici. Quindi l’idea di Microsoft è che Java è un bel linguaggio mentre la JVM è inutile: tutti stanno usando Windows quindi meglio scrivere programmi Java ottimizzati per questo ambiente (e non più utilizzabili su altri computer). Diverse società stanno anche lavorando su compilatori Java nativi, che porterebbero i programmi a essere più veloci, ma a funzionare solo su una specifica piattaforma. L’idea, non del tutto sbagliata, è di poter avere un unico programma disponibile in versione più lenta per JVM (quindi qualsiasi computer) e in versione ottimizzata per Windows. Se questa idea avesse successo sarebbe una parziale sconfitta per Sun, e una mezza vittoria di Microsoft.

Dal lato opposto altre società stanno lavorando sulla conversione del codice da linguaggi di programmazione diversi da Java verso la JVM, con l’intento di lasciar lavorare i programmatori con il linguaggio che preferiscono, pur mantenendo i vantaggi di programmi in grado di funzionare su computer differenti.

Buoni e cattivi

Spero con questa descrizione di aver fatto un po’ di luce in mezzo all’impressionante mole di informazioni, quasi sempre esagerate, che sono state divulgate in relazione a Java e spesso prese per buone. La battaglia tra Sun e Microsoft è stata una delle battaglie marketing più spettacolari che l’informatica abbia finora prodotto, ma è stata anche una battaglia molto slegata dagli effettivi aspetti tecnici. Per esempio Sun ha più volte annunciato che Java era ormai il linguaggio più usato al mondo: cosa senz’altro molto lontana dal vero. Microsoft, dal canto suo, ha rivelato dati molto tendenziosi sulla scarsa efficienza di Java, per esempio nell’ambiente Windows a 16 bit (che Microsoft vuole morto e Java invece avrebbe potuto miracolosamente resuscitare).

Sun inoltre ha saputo giocare molto bene con un diffuso sentimento di ostilità verso Microsoft, proponendosi un po’ come paladino delle libertà. Se è vero che Sun ha un atteggiamento molto rigoroso e aperto nei confronti di altre società che vogliono realizzare tool per Java e garantisce le stesse informazioni sia alla società del proprio gruppo che realizza i compilatori sia a tutti i suoi concorrenti, è anche vero che i concorrenti devono pagare parecchio per avere questo rapporto di fiducia. La stessa Microsoft, quando ha scelto di supportare Java all’interno del proprio browser, ha dovuto sborsare cifre da capogiro.

In generale, la piattaforma Java non è così aperta come Sun vorrebbe far credere. Se è vero che il linguaggio Java diventerà uno standard ANSI, è anche vero che questo avviene sotto l’esclusivo controllo di Sun, una situazione abbastanza anomala. Un aspetto particolare, poi, è che lo stesso nome “Java”è protetto da copyright, e non può essere utilizzato senza autorizzazione (da qui un fiorire di sinonimi e di prodotti i cui nomi contengono solo la lettera J). L’idea che Sun possa avere l’esclusiva di un sistema operativo e una CPU Java non è certo molto promettente.

Detto questo, è certamente vero che l’atteggiamento di Microsoft è molto arrogante e che la società di Bill Gates sta facendo il possibile per rendere i programmi Java non del tutto compatibili.
L’atteggiamento un po’ schizofrenico di Microsoft, tipico dei suoi momenti di difficoltà, ha portato in un primo momento a ignorare Java (è solo un altro linguaggio come tanti), quindi ad accettarlo a proprio modo (uno dei migliori linguaggi per Windows) e infine a denigrarlo (ormai è un linguaggio morto).
Come sempre i buoni e i cattivi non stanno tutti dalla stessa parte. Con un po’ di memoria storica potremmo ricordare che all’inizio degli anni ’80 Bill Gates era visto come il paladino del programmatori liberi che combattevano contro il gigante IBM, al quale venivano imputate fin troppe colpe in fatto di monopolio.

Ma a che punto è la diffusione di Java?

Ovviamente tra tutte queste interpretazioni e posizioni, chi determinerà il successo di una o dell’altra strategia sarà il mercato, gli utenti finali. Quindi la domanda sull’effettiva diffusione di Java come linguaggio e della sua virtual machine è un punto chiave. Nonostante le dichiarazioni trionfalistiche di Sun (che definire esagerate è dir poco), Java oggi non è certo tra i linguaggi di programmazione più usati. Se IBM e alcune altre grosse società stanno puntando in questa direzione, la maggior parte dello sviluppo resta limitato (se così si può dire) alla piattaforma Windows.

C’è anche da dire che la tecnologia Java è ancora immatura e in continua evoluzione, e se molte persone che navigano su Internet dispongono di un macchina virtuale Java all’interno del loro browser, pochi sono aggiornati all’ultimissima versione. Si sono registrati alcuni casi di successo nell’uso di Java, ma sono ancora troppo limitati per essere indicativi di una tendenza diffusa.

Un punto chiave sulla diffusione di Java è la soluzione delle vertenze legali che coinvolgono Miscosoft: una forte diffusione di Internet Explorer, infatti, potrebbe portare la società di Bill Gates a una vittoria di grosse proporzioni. Ma le risposte recenti di Netscape, che ora lascia usare il proprio browser gratuitamente, e i problemi legali in cui Microsoft è coinvolta, potrebbero invertire la tendenza. Il paradosso è che Microsoft non può ignorare Java, come aveva fatto all’inizio, ma non può neppure piegare questa tecnologia ai propri interessi, come è sua abitudine fare. Un Internet Explorer senza Java, per esempio, sarebbe una sconfitta per Microsoft ma anche per Sun, che vedrebbe limitata la diffusione della JVM: da qui una causa legale veramente complessa, in cui Sun non vuole che Microsoft rinunci a Java ma che lo supporti come vuole la stessa Sun, e non nel modo preferito da Microsoft (ovvero parziale).

Java e Internet

Java è conosciuto come il linguaggio di Internet. È il momento di esaminare con cura anche questo aspetto. Il protocollo HTML di Internet, che è alla base del Web, permetteva in origine di inviare a un browser un documento, eventualmente corredato di immagini e altri elementi. Questo meccanismo è molto potente, ma se l’utente effettua anche un’azione semplice, come l’inserimento di dati in una form, il browser non può fare altro che prendere queste informazioni, rispedirle al server, per poi ricevere dal server la schermata successiva. Questo modello è strutturalmente troppo lento e parecchio macchinoso (anche se viene usato spesso sulla Rete).

L’idea successiva è stata quella di spedire alla macchina dell’utente anche un programma, in grado di funzionare localmente: si può mandare il testo con il codice del programma che il browser legge, interpreta ed esegue (come avviene con JavaScript e VBScript) oppure mandare direttamente un programma già compilato. Nel caso di Java il linguaggio compilato ha come target la JVM, quindi gira potenzialmente su qualsiasi computer, mentre nel caso alternativo degli ActiveX di Microsoft il programma funziona solo su Windows. Passando da JavaScript, a Java, agli ActiveX si aumenta la potenzialità di interazione con l’ambiente nativo e con l’utente, ma si perde notevolmente in sicurezza (tema su cui non voglio fermarmi oltre perché potrebbe essere il tema di un intero articolo).

La stessa Microsoft, che in passato dipingeva gli ActiveX come tecnologia alternativa a Java, ha in qualche modo cambiato strategia puntando su Dynamic HTML, una versione molto più ricca e potente del linguaggio HTML di descrizione delle pagine Web, in grado di dotarle di effetti dinamici e di animazione che in passato richiedevano uno specifico programma. Nell’annunciare Dynamic HTML Microsoft ha parlato della morte di Java, ma si tratta indubbiamente di un annuncio un po’ prematuro.

Conclusione temporanea

La “telenovela”Java è ben lungi dall’essere conclusa, e ci vorranno probabilmente un paio d’anni (quindi secoli, secondo il tempo accelerato del mondo Internet) prima di poter dire una parola chiara su tutta la vicenda. Restano molti altri aspetti di cui non ho parlato, a partire da quelli più tecnici: indipendentemente da tutto il resto, Java è un ottimo linguaggio di programmazione, che probabilmente non conquisterà il mondo, ma sta avendo e avrà un ruolo molto significativo (con o senza la virtual machine).

Mentre scrivo sono in aereo in viaggio verso gli USA, per partecipare a un’importante conferenza per sviluppatori software, dove Java sarà al centro dell’attenzione (parleranno sia l’autore di Java, Goslin, che alcuni detrattori, come l’autore del C++, Stroustup, ma anche Sun, Microsoft, IBM, Netscape e tutte le altre grosse società). Entro pochi giorni, quindi, conto di aggiornarvi (su Apogeonine e sul mio sito Web) con un po’ di notizie e novità… tra il tecnico, il marketing, il legale e tutti gli altri aspetti che ruotano attorno al mondo di Java.

(Continua)

Marco Cantù è un esperto di linguaggi di programmazione a oggetti, tra cui C++, Object Pascal e Java. È autore di libri sulla programmazione con C++ e Delphi pubblicati in Italia, negli Stati Uniti, e tradotti in molti altri paesi. Potete contattarlo attraverso il suo sito web, www.marcocantu.com o all’indirizzo di posta elettronica [email protected]

Vuoi rimanere aggiornato?
Iscriviti alla nostra newletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.