L'avvento di Gnome e delle librerie Gtk+ nel mondo Linux ha contribuito non solo allo sviluppo generale del sistema, ma soprattutto ad una decisa svolta verso quell' "easy-to-use" che sembrava del tutto mancare al primo approccio dal lato utente con i sistemi "Unix-like". Allo stesso tempo si è offerto allo sviluppatore un potente e completo framework per la progettazione e costruzione di applicazioni basate su standard oramai affermati e facilmente integrabili con i più diffusi linguaggi di programmazione attualmente disponibili nel mondo Unix.
Gnome e Gtk sono nate per creare uno standard free (open source) per scrivere applicazioni grafiche uniformi per sistemi UNIX.
Chiunque può usare le librerie Gtk e la infrastruttura Gnome senza dover pagare diritti o sottostare a vincoli dei produttori.
Visto il rapido sviluppo di questi strumenti ho deciso di scrivere un paio di articoli in materia corredati da un tutorial integralmente in italiano che traduce e riassume essenzialmente quello ufficiale fornito a corredo delle librerie:
Spesso vi è una gran confusione tra Gnome e Gtk+ e non appare a molti chiaro il rapporto in cui si pongono l'uno rispetto all'altro.
In questo breve articolo tratto essenzialmente dal noto libro di Havoc Pennington "Gtk+/Gnome Application Development" cercheremo di chiarire un po' i concetti di base sperando di sciogliere almeno qualche dubbio sull'argomento.
Cos'è GNOME?
Gnome è un progetto di sviluppo di software libero iniziato nel 1997 da Miguel de Icaza dell'Università Nazionale Autonoma del Messico e cresciuto in breve tempo grazie all'apporto di un gruppo di programmatori sparsi in tutto il mondo.
Gnome è l'acronimo per Gnu Network Object Model Environment. Originariamente il progetto era finalizzato alla creazione di una struttura per oggetti molto simile alle tecnologie OLE e COM della Microsoft. Lo scopo del progetto si è rapidamente ampliato e include ad oggi un ORB veloce leggero e compatibile con CORBA 2.2 chiamato ORBit ed un'architettura di embedding per oggetti chiamata Bonobo.
Per non fare confusione sui concetti è molto importante tenere presente che Gnome consta di due aspetti fondamentali:
1) Dal punto di vista utente è un ambiente di lavoro integrato ed una suite di applicazioni. L'ambiente include un file manager, un pannello per la gestione e avvio delle applicazioni e applet, un centro di controllo per la configurazione e altri programmi di utilità. Tutte queste applicazioni nascondono la riga di comando UNIX dietro ad un'interfaccia grafica facile da utilizzare.
2) Dal punto di vista dello sviluppatore è invece una potente struttura per lo sviluppo di applicazioni composta da un insieme di utili librerie.
Bisogna al proposito chiarire subito un dubbio di fondo:
Tutte le applicazioni scritte con le librerie di Gnome funzionano anche sotto gli altri ambienti (es. KDE) e non sono quindi legate necessariamente all'uso dell'ambiente Gnome.Gnome rende possibile scrivere applicazioni coerenti, facili da usare e con alta interattività con lo scopo di creare un look-and-feel logico ed uniforme. Gli originari sviluppatori del sistema X Window fecero infatti la deliberata scelta di non imporre nessuna politica sulla interfaccia utente e Gnome offre la possibilità di seguire uno standard in via di sviluppo capace di offrire una infrastruttura coerente funzionale e pronta all'integrazione.
La struttura di Gnome per lo sviluppo di applicazioni si concretizza in una suite di librerie scritte in ANSI C.
Le librerie che coinvolgono l'uso della grafica si appoggiano direttamente al sistema X Window. Come abbiamo già visto nella sezione dedicata agli strumenti per iniziare esistono inoltre dei wrapper sulle API di Gnome per pressocché tutti i linguaggi esistenti.Gnome non è stato scritto completamente da zero ma utilizza molte librerie che si sono sviluppate indipendentemente dal progetto Gnome. Queste librerie fanno parte della struttura di sviluppo di Gnome e sono automaticamente presenti nell'ambiente Gnome in quanto incluse nel pacchetto gnome-libs che comprenderà quindi librerie appositamente sviluppate per Gnome e librerie non-Gnome:
1) Librerie Gnome:
- libgnome: E' una collezione di istruzioni non legate all'interfaccia grafica che vengono utilizzate per le applicazioni Gnome quali ad es. quelle per gestire i file di configurazione, quelle di internazionalizzazione (attraverso gettext), o l'audio (attraverso esound). E' una collezione di istruzioni non legate all'interfaccia grafica che vengono utilizzate per le applicazioni Gnome quali ad es. quelle per gestire i file di configurazione, quelle di internazionalizzazione (attraverso gettext), o l'audio (attraverso esound).- libgnomeui: Comprende una serie di widget disegnati per migliorare ed estendere il Gtk+ (quali ad es. GnomeApp, GnomeCanvas, GnomeDialog e GnomePixmap).
- libgnorba: Fornisce funzionalità legate all'uso di CORBA, incluso un meccanismo di sicurezza e l'attivazione degli oggetti.
- libzvt: Fornisce un widget per terminale (ZvtTerm) che si può utilizzare nelle applicazioni Gnome.
- libart_lgpl: Contiene istruzioni di rendering grafico. In poche parole è una libreria di rasterizzazione della grafica vettoriale.
2) Librerie non-Gnome:
- glib: E' la base dell'infrastruttura Gnome. E' una libreria C di utilità che fornisce funzioni per creare e manipolare strutture di dati comuni. E' la base dell'infrastruttura Gnome. E' una libreria C di utilità che fornisce funzioni per creare e manipolare strutture di dati comuni.- Gtk+: E il toolkit per creare interfacce grafiche utente utilizzato nelle applicazioni di Gnome.
- ORBit: E' un ORB CORBA scritto in C. Un ORB è come un linker dinamico ma funziona con gli oggetti anzichè con funzioni. A runtime un programma può richiedere servizi di un particolare oggetto; l'ORB lo localizza e crea una connessione fra questo ed il programma.
- Imlib: E' la libreria che fornisce istruzioni per caricare e manipolare immagini di una vasta varietà di formati (inclusi jpeg, png, giff e tiff).
3) Altre librerie (non comprese per ora in gnome-libs).
- Gnome-print: Fornisce delle periferiche di stampa virtuali in modo che con le stesse istruzioni si possa stampare in un widget di anteprima, su PostSript e in altri formati di stampa. Fornisce delle periferiche di stampa virtuali in modo che con le stesse istruzioni si possa stampare in un widget di anteprima, su PostSript e in altri formati di stampa.- Gnome-xml: E' un motore XML il cui uso si rivela molto utile per tutte le applicazioni che hanno bisogno di caricare e salvare dati struturati.
- Guile: E' una implementazione del linguaggio di programmazione Scheme in una libreria, in modo che qualunque applicazione può avere al suo interno un interprete Scheme.
- Bonobo: E' un'architettura che si ispira direttamente a OLE della Microsoft. Permette ad es. di inserire grafici in un foglio di calcolo.In futuro grazie a Bonobo qualunque applicazione Gnome potrà visualizzare dati MIME, HTML o immagini, semplicemente chiedendo alle librerie di Gnome il componente Bonobo necessario.
Cos'è GTK+?
Gtk+ è un toolkit per creare interfacce grafiche utente. Gtk+ è originariamente nato per GIMP (GNU Image Manipulation Program), ma è in seguito diventato una libreria per utilizzo generale. Anche Gtk+ è, come Gnome, dipendente dalla libreria Glib ed include il GDK (Gimp Drawing Kit) che è un'astrazione delle librerie a basso livello del sistema X Window.
Dato che GTK+ utilizza GDK piuttosto che chiamare direttamente le primitive di X Window, un port di GDK permette di utilizzare GTK+ su altri sistemi con relativamente poche modifiche.
Gtk+ e Gimp sono già stati portati in questo modo sulla piattaforma Win32.Il Gtk+ mette quindi a disposizione del programmatore una serie di elementi grafici (widget), quali ad es. finestre, menu, bottoni etc.. per disegnare l'interfaccia grafica dell'applicazione che verrà poi gestita a mezzo di "segnali".
I widget infatti emettono dei segnali quando accade qualcosa (ad es. l'utente preme un bottone o chiude una finestra), ai quali l'applicazione può rispondere associandovi una funzione di callback.
In che rapporto si pongono GNOME e GTK+?
Da tutto quanto abbiamo detto sopra possiamo tirare le seguenti conclusioni:
1) Gnome è per l'utente un ambiente di lavoro integrato e per lo sviluppatore una potente struttura per lo sviluppo si applicazioni composta da un insieme di utili librerie.
2) Le applicazioni Gnome sono comunque indipendenti dall'ambiente Gnome e girano su X Window indipendentemente appunto dall'ambiente adottato.
3) Gtk+ è nato indipendentemente da Gnome come libreria per creare interfacce grafiche utente, rimane indipendente da Gnome e può essere quindi usato da solo per fornire di interfaccia grafica le proprie applicazioni (anche scritte in linguaggi diversi dal C).
4) Gnome invece include Gtk+. In altre parole se si include Gnome nelle proprie applicazioni non c'e' bisogno di includere anche Gtk+. Insomma Gtk+ è l'interfaccia grafica delle applicazioni Gnome. Gnome tuttavia fornisce una serie di widget ultriori e migliorati che si pongono come estensioni del Gtk+. Gnome inoltre fornisce uno standard coerente ed una serie di funzionalità ulteriori per gestire il suono, la stampa, l'internazionalizzazione, i file di configurazione etc.. etc.. etc..