10 passi per diventare un (potenziale) programmatore Open Source
Avete installato GNU/Linux, lo utilizzate, ma volete andare oltre. ... Il software libero è bello anche perché c'è il codice quindi perché non approfittarne per imparare qualcosa di nuovo?
In questo howto analizzeremo in generale un caso sufficientemente specifico. L'obiettivo non è diventare dei guru della programmazione, ma raggiungere l'obiettivo conoscendo un minimo i "blocchi" che ci interessano.
(1) Motivazione
Indipendente dalle capacità tecniche, chi contribuisce al software (filosoficamente) libero o (tecnicamente) Open Source lo fa per uno o più dei seguenti motivi:- Adattare al meglio il software alle nostre esigenze
- Interesse nel campo specifico
- Lavoro / soldi
- ...
In questo caso il motivo interessato è il primo perché "Se metto uno sfondo chiaro al Desktop di GNOME(Nautilus), i caratteri non si leggono bene".
Purtroppo questo valore non si può cambiare, neanche con un tema, perché questa informazione è proprio scritta nel codice (hardcoded). Non resta quindi che mettere mano al codice e risolverlo in qualche modo.
I colori verranno poi gestiti dall'interfaccia dei temi e a seconda della tonalità del desktop, verrà usato il viola o il giallo-verdino (che ovviamente l'utente potrà cambiare).
Ovviamente questa modifica è molto semplice da fare e non è neanche detto che venga accettata, comunque è un buon esempio giusto per iniziare.
(2) Documentazione
Prima di avventurarvi nel codice del programma, potrebbe interessarvi, almeno a grandi linee, come è stato strutturato. In questo modo eviterete di vagare in parti che non vi interessano.In questo caso il programma è Nautilus (il file manager di GNOME) la parte interessata si chiama NautilusIconContainer
(3) Preparazione (Strumenti di sviluppo)
Per poter compilare il codice sorgente del programma interessato avete bisogno di strumenti appositi tipo gcc (compilatore C), automake, .. (in Ubuntu: build-essential) e i pacchetti "-dev" delle librerie che andrete ad utilizzare. In questo caso serve anche subversion per poter prelevare i sorgenti aggiornati.(4) Ambiente di sviluppo
Avete bisogno di una cartella dove ospitare i sorgenti dei programmi, se si trova nella vosta $HOME non dovete avere permessi particolari.mkdir ~/developmentIn modo analogo dovete avere una cartella per i binari sperimentali che andrete a compilare
mkdir ~/testing
(5) Sincronizzazione (Versioning Control System)
La caratteristica principale dei progetti Open Source è quella di essere in continuo sviluppo, il codice si evolve molto rapidamente e ogni programmatore coinvolto deve sincronizzarsi con il lavoro degli altri, oltre che procedere con il proprio.Su http://svn.gnome.org/viewcvs/nautilus/trunk/ possiamo vedere molte informazioni interessanti, ma in realtà i file che andremo a prelevare sono su http://svn.gnome.org/svn/nautilus/trunk
cd ~/developmentAl termine dell'operazione avremo una sotto cartella nautilus con tutti i file che abbiamo visto
svn co http://svn.gnome.org/svn/nautilus/trunk nautilus
Per aggiornarla in futuro basterà (da dentro la cartella nautilus)
svn up
(6) Prima compilazione
Bisogna prima controllare che nel sistema ci siano tutte le librerie e i sw necessari, inoltre viene passata la cartella dove verranno installati successivamente i binaricd nautilusEventualmente si possono abilitare o disabilitare certe feature o librerie leggendosi
./autogen.sh --prefix=${HOME}/testing
./autogen.sh --helpUna volta che tutto è apposto e non ci sono errori, è arrivata l'ora del fatidico
make..che dopo una sbrodolata di informazioni vi darà i binari, ogni volta che modificate un sorgente dovrete usare make, la differenza è che dovrebbe essere un pochino più veloce perché compilerà solo quello che è cambiato.
Infine installate il tutto (in ~/testing) con
make installEssendo Nautilus un po' particolare accertatevi prima di averlo tolto da gnome-session-properties o aver rinominato l'originale, altrimenti partirà sempre la versione vecchia.
cd ~/testing/binEcco davanti a voi, l'ultima versione disponibile (Aiuto -> Informazioni vi darà la conferma).
./nautilus
(7) Apportare le modifiche
Trattandosi di semplici file di testo ogni editor di testo va bene.Cercate le funzioni che vi interessano e fate le modifiche che vi servono, dopodiché compilate e testate.
Quando siete soddisfatti potete estrarre le modifiche con
svn diff > ../nautilus-my-super-mega-feature.patchNel nostro caso la patch riguarda solo un file ed è questa:
Index: libnautilus-private/nautilus-icon-container.c
===================================================================
--- libnautilus-private/nautilus-icon-container.c (revisione 12793)
+++ libnautilus-private/nautilus-icon-container.c (copia locale)
@@ -7250,8 +7250,15 @@
LABEL_INFO_COLOR,
eel_gdk_color_is_dark (&widget->style->base[GTK_STATE_NORMAL])
? light_info_value : dark_info_value);
} else {
- if (container->details->use_drop_shadows || eel_background_is_dark (background)) {
- setup_gc_with_fg (container, LABEL_COLOR, 0xEFEFEF);
+ if (!eel_background_is_dark (background)) {
+ if (!eel_gdk_color_is_dark (&widget->style->base[GTK_STATE_NORMAL])){
+ container->details->use_drop_shadows = FALSE;
+ setup_gc_with_fg (container, LABEL_COLOR,
+ eel_gdk_color_to_rgb (&widget->style->text[GTK_STATE_NORMAL]));
+ } else {
+ setup_gc_with_fg (container, LABEL_COLOR,
+ eel_gdk_color_to_rgb (&widget->style->text[GTK_STATE_INSENSITIVE]));
+ }
setup_gc_with_fg (container,
LABEL_INFO_COLOR,
light_info_value);
(8) Pubblicare le modifiche
La via migliore per non far perdere nel nulla le nostre modifiche è quella di pubblicarle in un Bug Tracking System. Aprire un bug, per segnalare il problema (o nuova funzionalità), e allegare la patch.Se siamo fortunati la patch verrà inclusa nel programma e se siamo stati anche bravi potremo chiedere, dopo un po' di patch, un account per pubblicarle direttamente nel VCS (commit).
Se volete riapplicare la vostra patch o volete provare quelle di qualcun'altro
patch -p0 < ../another-cool-feature-or-bugfix.patch
Carino, no?
(9) Creare il pacchetto
Ogni distribuzione (o quasi) ha il suo modo di fare i pacchetti binari, ma in generale uno strumento molto utile è checkinstall. Questo software vi permette di fare un pacchetto di vari tipi senza troppi sforzi. Anche se un pacchetto di questo tipo non è considerato "a regola d'arte", per lo meno sarà di facile installazione o disinstallazione, quindi il vostro sistema rimarrà il più possibile pulito.(10) Conclusioni e consigli per tutti i giorni
Spero di avervi incuriosito abbastanza, non compilatevi staticamente in testa i tool che ho usato, perché magari per modificare il programma che vi interessa ve ne serviranno altri; piuttosto cercate di approfondire all'occorrenza il blocco che più vi interessa (anche perché quello che è meglio oggi non è detto che lo sarà anche domani)Vi lascio con qualche link.
Documentazione
GNU make & C.Kde
Freedesktop
GNOME (e versione Live)
Text Editor / IDE
La scelta dipende da 3 fattori: linguaggio scelto, funzionalità e RAM che avete.- vi/emacs per linguaggi C-like e poca RAM
- gedit, kate,.. multiuso
- Eclipse(Java), Kdevelop(QT/C++), Monodevelop(C#), più specifici e con più funzionalità(integrazione svn, class browser) ma richiedono più RAM.
Versioning Control System
http://it.wikipedia.org/wiki/Controllo_versionehttp://gentoo-wiki.com/HOWTO_Subversion (usato da GNOME, Kde,..) GUI
http://bazaar-vcs.org/QuickHackingWithBzr (usato da Ubuntu) GUI
http://linux.yyz.us/git-howto.html (usato da Linux) GUI
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
Dimenticavo..
Happy Hacking