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