Java & Linux Stefano Sanna – Gruppo Utenti Linux Cagliari Perché Java e Linux? • Linux è un ottimo sistema operativo, disponibile per piattaforme desktop, server e su sistemi embedded. • Java è un ottimo linguaggio di programmazione, con una libreria molto ricca e una architettura che permette di scrivere codice multipiattaforma, per sistemi desktop, server e sistemi embedded. • I maggiori strumenti di sviluppo per Java sono disponibili per Linux. Si tratta di versioni “full”, perfettamente funzionanti e ottimizzati per la piattaforma del pinguino. • Il mercato “alternativo” dei sistemi embedded si sta orientando verso l’accopiata Linux+Java per Internet Appliances e PDA. Stefano Sanna – Gruppo Utenti Linux Cagliari Il passato… Stefano Sanna – Gruppo Utenti Linux Cagliari Il presente… Stefano Sanna – Gruppo Utenti Linux Cagliari /1 Il presente… /2 • Sono disponibili estensioni HotSpot client e server che aumentano del 30% le prestazioni di esecuzione del bytecode. • Sono disponibili tutte le tecnologie Java più avanzate: – – – – JDK 1.4 (con Enhanced AWT) Servlets Javacomm API Java Media Framework • Numerosissime applicazioni Java sono distribuite con gli script di avvio per Linux Stefano Sanna – Gruppo Utenti Linux Cagliari Il presente… /3 • Linux e Java sono i protagonisti della piattaforma MHP (Multimedia Home Platform) per la televisione digitale interattiva domestica • I set-top box commerciali in via di sviluppo sono basati su una versione Linux Embedded come SO e su PersonalJava come ambiente applicativo. • PersonalJava è la piattaforma di riferimento per le Internet Appliances (quali i dispositivi basati su EPOC Symbian, come il Nokia 9210 Communicator) Stefano Sanna – Gruppo Utenti Linux Cagliari Il futuro… • E’ in via di rilascio il JDK 1.4 (attualmente in beta) che offre supporto nativo, tra l’altro, alla modalità AWT Full Screen e al controllo dei wheel mouse • Sono attualmente in studio le implementazioni a 64bit della Java Virtual Machine. I test attuali sono condotti su Solaris e Windows 64bit. Si attendono a breve le prime versioni per Linux • Il rilascio della CDC/FoundationProfile/Personal Profile per la piattaforma Linux confermano il ruolo di primo piano nel settore delle Internet Appliances e dei PDA high-end. Stefano Sanna – Gruppo Utenti Linux Cagliari Porting di Java /1 • Il porting di Java richiede lo sviluppo di tre componenti principali: – Il core della Java Virtual Machine (bytecode interpreter, memory manager, security manager) – La core library (Java e Native) – Il bridge dei componenti grafici • La complessità della Virtual Machine e la vastità della core library rendono il porting di Java una impresa non banale… Stefano Sanna – Gruppo Utenti Linux Cagliari Porting di Java /2 JAVA APPLICATION CORE LIBRARY JAVA VIRTUAL MACHINE NATIVE CODE (AWT BRIDGE, SOCKET) HOST OPERATING SYSTEM Stefano Sanna – Gruppo Utenti Linux Cagliari Porting di Java /3 • Java Virtual Machine – Contiene il codice che interpreta il bytecode delle classi Java, caricando e linkando dinamicamente il codice – Gestisce la memoria attraverso il Garbage Collector – Fornisce supporto alle applicazioni multithreading, attraverso meccanismi di green/native threading • Core library – Contiene la definizione della libreria standard di Java (java.lang, java.io, java.util…) – Parte del codice è pure-Java, mentre una parte delega l’esecuzione al codice nativo • AWT Bridge – Mappa i componenti del package java.awt con i corrispondenti widget grafici del sistema operativo – E’ una delle parti più complesse del porting. Su tale implementazione si basa la libreria Swing. Stefano Sanna – Gruppo Utenti Linux Cagliari Porting di Java Stefano Sanna – Gruppo Utenti Linux Cagliari /4 Porting di Java Stefano Sanna – Gruppo Utenti Linux Cagliari /5 Porting di Java /6 • Il progetto GNU CLASSPATH mira invece a produrre una versione completamente free della core class library. • Il progetto è collegato allo sviluppo di JVM indipendenti (specie per ciò che riguarda le classi natiuve e di bridge) • Maggiori informazioni si possono trovare sul sito http://www.classpath.org Stefano Sanna – Gruppo Utenti Linux Cagliari La sfida: il porting su Linux • Visti i presupposti, il porting di Java su Linux apparve come una vera e propria sfida • Una delle primissime JVM sviluppate fu quella fornita con Netscape Navigator (i bei tempi…) • Sun era l’unica a disporre del codice sorgente della Java Virtual Machine… • Diverse aziende cominciarono a licenziare il codice di Sun, effettuando il porting della JVM su diversi sistemi operativi (essenzialmente varianti di Unix)… Stefano Sanna – Gruppo Utenti Linux Cagliari Il progetto Blackdown • Randy Chapman e Steve Byrne svilupparono rispettivamente il JDK 1.0 e 1.1. Insieme a Karl Asha diedero vita al progetto Blackdown • Sun decise di fornire al gruppo i sorgenti della JVM gratuitamente. • Con la versione 1.2.2 Sun comincia a distribuire direttamente la propria versione del JDK per piattaforma x86 • Il gruppo è ancora attivo nel porting della JVM su diverse architetture hardware (PPC, ARM…) Stefano Sanna – Gruppo Utenti Linux Cagliari Java Virtual Machine • La Sun Java Virtual Machine è distribuita gratuitamente ed è sempre allineata con le corrispondenti versioni per Windows e Solaris. • Il sorgente è disponibile sotto licenza SCSL (Sun Community Source Licence) che permette di conoscere il codice sorgente; qualsiasi utilizzo commerciale o distribuzione deve essere autorizzata (a pagamento!) da Sun. Stefano Sanna – Gruppo Utenti Linux Cagliari Configurazione JVM su Linux • L’installazione della JVM è un’operazione abbastanza semplice. La Sun distribuisce le JVM in formato rpm e bin. • In rete è possibile trovare versioni compilate della JVM per diverse librerie di sistema (libc, glibc…). Come per qualsiasi altra applicazione distribuita in formato binario, è necessario verificare le librerie disponibili sulla propria macchina e selezionare la versione di JVM opportuna. • Perché il JDK sia parte integrante del sistema è necessario effettuare alcune piccole impostazioni. Stefano Sanna – Gruppo Utenti Linux Cagliari Configurazione JVM /1 • I parametri responsabili del comportamento della JVM sono: – CLASSPATH • Specifica i percorsi (sia directory che file .zip e .jar) dove il ClassLoader della JVM cerca le classi. – PATH • Deve contenere una referenza alla directory bin del Java Development Kit. • Permette di avere su linea di comando (e dunque a disposizione degli script) tutti gli strumenti di sviluppo. Stefano Sanna – Gruppo Utenti Linux Cagliari Configurazione JVM /2 • Gli altri parametri: – BOOTCLASSPATH (da Java 1.2) • Specifica la posizione della runtime library di sistema. Generalmente non si specifica mai (è implicito). E’ utilizzato pesantemente nello sviluppo per sistemi embedded (J2ME) per indicare alla JVM e al compilatore di non utilizzare le classi di sistema standard. – JAVA_HOME • E’ utilizzata da applicazioni di terze parti per individuare la posizione del JDK e poter utilizzare gli strumenti standard forniti con esso (ad esempio JAR). Stefano Sanna – Gruppo Utenti Linux Cagliari JVM Multiple su Linux • Spesso capita di dover disporre di più JVM diverse su una stessa macchina (ad esempio per testare una applicazione desktop e una per sistemi embedded in emulazione o per verificare il funzionamento di una stessa applicazione con JVM di diversi vendor). • L’uso di script per configurare opportunamente le variabili d’ambiente permette di tenere completamente isolate JVM diverse. • In altri ambienti non tutto così semplice… :-) Stefano Sanna – Gruppo Utenti Linux Cagliari Sviluppo in Java su Linux • Possiamo individuare due categorie di applicazioni di sviluppo: – Strumenti di sviluppo – Ambienti di sviluppo • Gli strumenti di sviluppo sono editor, compilatori, debugger, deployer, version control • Gli ambienti di sviluppo integrano le funzioni di numerosi strumenti di sviluppo, permettendo una facile condivisione di codice e risorse – Può sembrare banale ma non lo è (CLASSPATH, RMI…) Stefano Sanna – Gruppo Utenti Linux Cagliari Strumenti di sviluppo /1 • Con il JDK sono forniti tutti gli strumenti di sviluppo classici per Java: – JVM (java) – Compilatore (javac) – Generatore di header file per l’interfacciamento a codice nativo (javah) – Disassemblatore (javap) – Debugger (jdb) • Vi sono tool aggiuntivi, quali ad esempio: – Estensioni Java per GCC (GJC) – Estensioni per editor (xemacs) – Compilatori alternativi (guavac, jikes) Stefano Sanna – Gruppo Utenti Linux Cagliari Strumenti di sviluppo /2 • Vista l’ampia disponibilità di libreria e applicazioni, per assicurare compatibilità delle proprie applicazioni si consiglia di utilizzare sistemi di compilazione ed esecuzione ben collaudati e certificati • Il download dinamico dalla rete, ad esempio, impone delle garanzie di compatibilità del bytecode (versioning) e di sicurezza Stefano Sanna – Gruppo Utenti Linux Cagliari JVM disponibili • Sono disponibili diverse Java Virtual Machine per la piattaforma Linux. Purtroppo quelle Open Source non hanno raggiunto maturità tale da consentirne l’impiego in progetti importanti. • Le maggiori applicazioni delle JVM Open Source si trovano nel mercato dei sistemi embedded, per i quali sono disponibili implementazioni avanzate ed estremamente ottimizzate della piattaforma Java. • Tra le JVM disponibili: – – – – Sun JVM IBM JVM Kaffe Japhar Stefano Sanna – Gruppo Utenti Linux Cagliari Ambienti di sviluppo • Come detto, gli Integrated Development Enviroment permettono di semplificare, velocizzare e rendere più efficiente il processo di sviluppo. • Per Linux sono disponibili un discreto numero di strumenti molto potenti. • Poiché molti strumenti sono pure-Java (come Argo, per la redazione di documenti UML) la sola disponibilità di una JVM aggiornata permette agli sviluppatori Linux di disporre delle stesse applicazioni del mondo Windows. Stefano Sanna – Gruppo Utenti Linux Cagliari Borland JBuilder • E’ un ambiente di sviluppo full-Java semplice e completo, abbastanza veloce e facile da imparare. • Fra tutti gli ambienti commerciali disponibili è quello più aggiornato (in termini di librerie di support) e “user friendly”. • E’ distribuito gratuitamente per usi non commerciali (JBuilder Personal). • Sono in via di sviluppo interessantissime estensioni per sistemi embedded (J2ME) • Non esiste una versione OpenSource. Stefano Sanna – Gruppo Utenti Linux Cagliari Borland JBuilder Stefano Sanna – Gruppo Utenti Linux Cagliari IBM Visual Age for Java • E’ un ambiente di sviluppo molto sofisticato e, per certi versi, atipico. • Richiede un po’ di training per dominarlo (specie se si proviene da JBuilder…), ma una volta acquisito permette livelli di produttività molto elevati. • Ha un ottimo sistema di gestione di gruppi di lavoro e di versioning del codice. • La versione Entry 3 è disponibile per Linux, mentre la versione Entry 4 è attualmente disponibile solo per Windows. E’ in via di rilascio la versione per Linux. • Non esiste una versione OpenSource. Stefano Sanna – Gruppo Utenti Linux Cagliari IBM Visual Age Micro Edition • IBM ha sviluppato una architettura (J9) per l’uso di Java su sistemi embedded eterogenei. Il progetto ha portato alla realizzazione di una Virtual Machine e di un compilatore estremamente specializzati e performanti. • E’ un ambiente di sviluppo Java per sistemi embedded. • Comprende un IDE (per Linux e Windows) • Le J9VM supportano molti sistemi (Linux, WindowsCE, Windows Embedded, QNX…) e architetture hardware (x86, ARM, MIPS, PPC…) • E’ distribuito solo gratuitamente! • Non esiste una versione Open Source. Stefano Sanna – Gruppo Utenti Linux Cagliari Netbeans /1 • E’ un Integrated Development Environment interamente scritto in Java • Nato nel 1996 nella Repubblica Ceca ad opera di alcuni studenti, è diventato un breve tempo un prodotto commerciale • Nel 1999 esce la versione 3.0, che porterà Sun ad acquistare il prodotto e inserirlo nelle proprie linee di produzione • Nel 2000 Sun rilascia Forte, un potente IDE basato su Netbeans e contemporaneamente rilascia Netbeans come prodotto OpenSource Stefano Sanna – Gruppo Utenti Linux Cagliari Netbeans /2 Stefano Sanna – Gruppo Utenti Linux Cagliari Eclipse • E’ un progetto analogo a Netbeans. Inizialmente sviluppato da IBM, è stato convertito in un grosso progetto Open Source, che coinvolge centinaia di sviluppatori e aziende. • Utilizza una architettura a componenti che lo rende estensibile e personalizzabile • E’ basato su una sofisticata libreria di componenti nativi multipiattaforma (Grande AWT!!!) • E’ un prodotto relativamente giovane Stefano Sanna – Gruppo Utenti Linux Cagliari Eclipse Stefano Sanna – Gruppo Utenti Linux Cagliari Quale ambiente? • La scelta dell’ambiente di sviluppo è legata a quattro fattori principali: 1. Obiettivi dello sviluppo: l’ambiente utilizzato deve fornire supporto a tutte le tecnologie utilizzate 2. Prestazioni e produttività dell’ambiente di sviluppo 3. Integrazione con strumenti di team working 4. Costo • Allo stato attuale non esiste un prodotto che soddisfa completamente tutti i quattro parametri (ma neppure tre…) Stefano Sanna – Gruppo Utenti Linux Cagliari Conclusioni • Linux mantiene le promesse, dimostrandosi un ottimo sistema operativo per applicazioni server e desktop. • Java mantiene le promesse, dimostrando di essere realmente multipiattaforma e altamente scalabile. • La programmazione Java in ambiente Linux è supportata da numerosi strumenti: questo permette di affrontare “serenamente” lo sviluppo di progetti complessi. • Pur mancando la disponibilità di ambienti professionali Open Source, l’ampia disponibilità di strumenti commerciali distribuiti gratuitamente (a scopo di studio) fornisce alla comunità degli sviluppatori (e degli appassionati) importanti occasioni di crescita. Stefano Sanna – Gruppo Utenti Linux Cagliari Link • Java Virtual Machine for Linux: – – – – • • • • Sun: http://java.sun.com IBM: http://www.ibm.com Japhar: http://www.japhar.org Kaffe: http://www.kaffe.org Eclipse: http://www.eclipse.org JBuilder: http://www.borland.com/jbuilder NetBeans: http://www.netbeans.org VisualAge: http://www.ibm.com/software/vadd http://www.ibm.com/linux http://www.ibm.com/developerworks http://www.embedded.oti.com Stefano Sanna – Gruppo Utenti Linux Cagliari Bibliografia Titolo Autore Editore Learning Java P. Niemeyer et al. O’Reilly Java in a nutshell David Flanagan O’Reilly Java examples in a nutshell David Flanagan O’Reilly Thinking in Java Bruce Eckel EckelObject Java Language Specification J. Gosling et al. Sun Press Java Virtual Machine Specification T. Lindholm et al. Sun Press Java Programming on Linux Nathan Meyer Stefano Sanna – Gruppo Utenti Linux Cagliari Waite Group That’s all, folks! Stefano Sanna – gerda_AT_crs4_DOT_it Stefano Sanna – Gruppo Utenti Linux Cagliari