Gentoo Logo

Disclaimer : La versione originale di questo articolo è stata pubblicata da IBM developerWorks ed è di proprietà di Westtech Information Services. Questo documento è una versione aggiornata dell'articolo originale, e contiene numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.


Costruire una distribuzione, Parte 2

1.  Da Enoch a Gentoo, attraverso piccoli contrattempi e inserimenti corporativi

I primi passi di Enoch

Nel mio precedente articolo ho raccontato i giorni, poco piacevoli, passati con il team di sviluppo Stampede e il perchè me ne andai (per scappare da quei "strani" lower-level, politicamente-portati e progetto-controllori). A causa delle interferenze di queste inopportune persone, pensai fosse più semplice mettere insieme una mia distribuzione Linux piuttosto che continuare a lavorare su Stampede a queste condizioni! Fortunatamente portai con me un considerevole bagaglio di esperienze basate sul mio (posso dire sostanziale?) lavoro per Stampede, incluso anche il mantenimento di molti dei loro packages, la progettazione degli script di inizializzazione, e le attività principali di slpv6 (progetto per una nuova generazione del gestore di pacchetti).

La distribuzione sulla quale iniziai a lavorare, nome in codice Enoch, stava cominciando a diventare molto veloce dato che il processo di creazione ed aggiornamento dei pacchetti era completamente automatizzato. Devo ammettere che questo è successo, in larga parte, perchè ero l'unico membro del mio team e non potevo permettermi di spendere il mio tempo con del lavoro ripetitivo che la mia macchina di sviluppo poteva svolgere, in maniera automatica, al posto mio. Progettai così una distribuzione completamente da zero (piuttosto che "girare intorno" ad alrte tipo RedHat), avevo il lavoro adatto a me e adesso avevo bisogno di tutto il tempo libero che riuscivo a trovare.

Non appena riuscii a rendere il mio sistema Enoch, basilare, perfettamente funzionante, tornai su irc.openprojects.net e diedi vita al mio canale chiamato #enoch. Dopo questo, gradualmente, sono riuscito ad assemblare un team di una diecina di sviluppatori. In quei primi giorni "abitavamo" su IRC e lavoravamo alla distribuzione nel tempo residuo. Mentre noi, in maniera comune e cooperativa, lavoravamo su Enoch, cercando e facendo il fix di nuovi bug, Enoch cominciava ogni giorno ad avere sempre più funzionalità ed ad essere sempre più professionale.

Il primo ostacolo

Un giorno, inevitabile, Enoch ebbe il suo primo blocco. Dopo aver aggiunto Xfree86, glib, e gtk+ decisi di installare xmms (un player MP3/CD basato su X11/gtk+). Avevo pensato che fosse arrivato il momento di festeggiare con un po' di musica! Quando però, dopo l'installazione di xmms, tentai di avviarlo.......X si bloccò! In un primo momento pensai che il blocco di xmms fosse dovuto all'utilizzo di ottimizzazioni di compilazione insane ("-O6 -mpentiumpro", giusto per stupire). La mia prima idea fù quindi quella di ricompilare xmms con ottimizzazioni standard, ma questo non risolse il problema. Iniziai così a cercare altrove la soluzione. Dopo avre speso un'intera settimana di tempo di sviluppo per cercare di risolvere il problema, ricevetti una e-mail da un utente Enoch, Omegadan, che diceva che anche lui aveva avuto lo stesso problema con xmms.

Intanto ci tenevamo in contatto, e dopo diverse ore di test eravamo riusciti a determinare che il problema era dovuto ai thread POSIX. Per qualche ragione la funzione pthread_mutex_trylock() non ritornava nella maniera in cui avrebbe dovuto. Come creatore di una distribuzione questi sono proprio quei tipi di problemi che non avrei mai voulto incontrare. Io avevo contato su quei sviluppatori per realizzare codice sorgente funzionante, in maniera tale che io potessi concentrarmi sull'accrescere l'usabilità di Linux, piuttosto che debuggare codice per renderlo operativo. Naturalmente mi resi ben presto conto che questa aspettativa era del tutto non realistica e che problemi simili di tanto in tanto si sarebbero manifestati.

Come è risultato, il problema non era con xmms, gtk+ o glib. Non era nemmeno dovuto ad un problema con Xfree86 3.3.5 non ancora thread-save (il termine thread-save è usato per indicare una porzione di programma o di funzione che può essere chiamato da più thread senza avere interazioni indesiderate tra questi N.d.t.) e si bloccava. Sorprendentemente trovammo il bug nell'implementazione stessa dei thread POSIX, parte delle librerie C GNU (glibc) versione 2.1.2. Rimasi scioccato nello scoprire che una componente critica di Linux potesse avere un simile bug. (E in Enoch non avevamo usato una prerelease o una versione CVS!)

Come risolvere il problema allora? In quel momento, non saremmo mai riusciti a forinre una soluzione al bug, ma ad un certo punto incappai in un paio di mail, sulla maling list dei developer di glibc, di persone che avevano lo stesso problema. Gli sviluppatori postarono una patch che risolveva il problema dei thread, ma io ero curioso di sapere perchè la mia RedHat 6 (che usava anche lei le glibc 2.1.2) non soffrisse del problema, visto che la patch era appena stata postata, mentre RedHat 6 era disponibile già da un po' di tempo. Per scoprirlo mi scaricai gli SRPM (Source RPM) delle glibc di RedHat e cominciai a guardare le loro patch.

RedHat aveva una propria patch alle glibc che risolveva il problema di pthread_mutex_trylock(). Apparentemente lamentavano lo stesso problema e crearono la propria soluzione. Disgraziatamente, però, questi non trasmisero la patch in "upstream" verso gli sviluppatori di glibc e quindi non potè essere condivisa con il resto del mondo. Oppure chi sà, forse RedHat ha spedito la patch e per qualche ragione gli sviluppatori di glibc non l'accettarono. O magari quel particolare bug veniva generato solo da una specifica combinazione di compilatore e versione di binutils, e RedHat non incorse in questo (anche se avevamo una patch nel loro SRPM). Ho la sensazione che non sapremo mai come sono andate realmente le cose, ma ho scoperto che gli SRPM di RedHat contengono molte soluzioni "private" ai bug e che incredibilmente nessuno ha mai spedito tali soluzioni agli sviluppatori originali. Per un istante rimasi sconvolto da questo.

Declamazione

Una volta assemblata una bistribuzione Linux è veramente importante che ogni fix creata per i vari bug sia spedita agli sviluppatori originali. Per come la vedo io, questa, è una delle principali maniere in cui, un creatore di una distribuzione, può contribuire a Linux. Noi siamo i tipi che realmente riescono ad ottenere che molti programmi differenti lavorino insieme come un tutt'uno. Dovremmo quindi spedire le nostre soluzioni per unificarle e affinchè altri utenti ed altre distribuzioni possano beneficiare delle nostre scoperte. Qualora si decidesse di tenere le proprie patch per se, non si sarebbe di aiuto a nessuno, ma si sarebbe solo sicuri che molte persone perdano molto tempo nel coreggere lo stesso problema più e più volte. Una simile politica va contro tutti i principi etici dell'open source e frena lo sviluppo di Linux. Forse dovrei dire che questo è il "bug di noi tutti".

E' spiacevole che alcune distribuzioni (ahem) non siano buone (RedHat) mentre altre (Debian) condividono il loro lavoro con la comunità.

Dramma del Compilatore

Mentre eravamo impegnati nel cercare di correggere il problema dei thread di glibc, contattai via e-mail Ulrich Drepper (una delle persone di Cygnus maggiormente coinvolte nello sviluppo di glibc). Gli dissi che problema con i thread POSIX stavo avendo e che Enoch usava pgcc per avere prestazioni migliori. Questi mi rispose con qualcosa di simile a questo (lo sto parafrasando): "Il nostro compilatore incluso nel prodotto CodeFusion ha un eccellente backend per x86 che produce eseguibili ben più veloci di quelli prodotti con pgcc." Ovviamente fui molto interessato nel testare questo misterioso "turbo compilatore" che quelli di Cygnus avevamo creato.

Richiesi subito una copia dimosrtativa di Cygnus Codefusion 1.0 per poterlo testare, sia Omegadan che io rimanemmo stupiti nel verificare che questo compilatore era proprio quello che Ulrich aveva detto. Il backend per x86 incrementava le prestazioni degli eseguibili CPU-intensivi (tipo bzip2) anche del 90%! Tutte le applicazioni sembravano trarne vantaggio, beneficiando di un aumento reale delle prestazioni di almeno il 10%, era il caso di cambiare compilatore. Enoch si avviò con una velocità supriore del 30 - 40%. Il guadagno in termini di prestazioni era ben più grande del guadagno che ottenemmo nel passare da gcc a pgcc. Naturalmente, dopo averlo sperimentato cercammo di usare questo compilatore per Enoch. Fortunatamente il codice era incluso nel CD di CodeFusion ed era rilasciato sotto GPL, così eravamo pienamente autorizzati ad usare il compilatore.......o almeno cosi pensavamo.

Lasciamo che le stranezze inizino

Spedii una mail al direttore commerciale di Cygnus per fargli sapere le nostre intenzioni, mi aspettavo una risposta simile a "yeah, va bene, grazie per aver usato il nostro comiplatore". La risposta, invece, fu che eravamo (tecnicamente) autorizzati ad utilizzare il compilatore Cygnus, ma eravamo stati fortemente invitati a non usare o includere il sorgente del compilatore in Enoch. Gli risposi chiedendogli il perchè avessero rilasciato il codice sotto GPL, se era il caso. La mia opinione è che se avessero avuto una possibilità di scelta, non avrebbero optato per usare la licenza GPL, ma siccome il loro compilatore deriva da egcs (rilasciato sotto GPL) non avevano alternative.

Questo è un ottimo esempio di una situazione in cui GPL ha impedito ad una compagnia di creare prodotti proprietari basandosi sull'open sources. La mia ipotesi, plausibile, è che Cygnus fosse intimorita dal fatto che se avessimo usato il loro compilatore avremmo potuto compromettere le vendite dei loro prodotti, cosa che sarebbe davvero bizzara visto che nessuno dei loro prodotti di vendita (ne la rassegna di InfoWorld) menzionava il nuovo compilatore incluso con CodeFusion. CodeFusion era commercializzato solamente come un "ambiente di sviluppo IDE" e non come un compilatore.

Nel tentativo di calmare alcune delle loro paranoie, mi offrii di appoggiare CodeFusion e palesare tale approvazione sul nostro sito web con un link per essere da impulso alle vendite di CodeFusion stesso. Personalmente non pensavo che un Enoch "turbo" potesse incidere negativamente sulle loro vendite, anche perchè CodeFusion era etichettato come IDE, insomma non feci altro che tentare di convencerli. Il componente IDE di CodeFusion, però, era un prodotto commerciale e non avevano ne il desiderio, ne l'intenzione di distribuilo con Enoch.

Inviai via e-mail la mia (generosa?) offerta alla Cygnus e ricevetti un'altra strana risposta. Volevano il controllo su tutto il nostro "materiale commerciale" (apparentemente questo includeva anche i contenuti del sito web!). Un'altro shock. Sembrava che il team commerciale di Cygnus non avesse ben chiaro come la comunità Linux o GPL lavorasse. Decisi quindi di troncare le comunicazioni con Cygnus a tempo indeterminato. Nel frattempo avevamo creato una versione privata "turbo", e una pubblica "non-turbo" di Encoh, lasciando la decisione finale a dopo.

Dopo diversi mesi integrarono il backend x86 di CodeFusion in gcc 2.95.2. Adesso tutti potevano trarre beneficio dal nuovo e performante backend, non solo la gente che era a conoscenza del "compilatore segreto GPL" incluso nel CD di CodeFusion. Così decidemmo di passare a gcc piuttosto che usare il compilatore di CodeFusion. Oltre che ad essere più stabile gcc 2.95.2 adesso era dotato anche di Cygnus, che era stato comprato da RedHat per una somma ridicola. (Nota: il backend x86 di gcc 2.95.2 è stato quello che ha dato alle distribuzioni Linux il maggiore incremento di velocità che sia mai stato sperimentato. Esso ha anche dato a FreeBSD un incremento di prestazioni considerevole sopra la 3.3.6. Notate la differenza?)

Breve Parentesi

Grazie a questa ed ad altre esperienze, imparai molto sulle compagnie open source "for-profit". Non cè assolutamente niente di male se una compagnia open source vuole realizzare del profitto, nè è moralmente ingiusto produrre software proprietario closed-source, se questo è ciò che si vuole fare. Ma non ha alcun significato per le compagnie open source sovvertire o rifiutare la collaborazione con il resto del mondo open source, ad esempio non sostenendo la GPL o in qualsiasi altra maniera. Questo è un punto pratico che ha chiaramente il significato di affari.

Le compagnie open source dovrebbero capire che il libero scambio di idee e di codice è una cosa dalla quale trarre profitto. Opponendosi a cose come le regole standard GPL, minano l'ambiente sul quale contano per svilupparsi e prosperare. Se l'open source è il terreno sul quale il vostro business ha fiorito è sensato mantenere tale terreno sano.

E' comprensibile che ci sia la tentazione di mantenere alcune informazioni segrete per garantirsi vantaggi economici nel breve periodo. Codice avanzato o speciali tecniche costituiscono un ambito vantaggio competitivo, che può potenzialmente trasformarsi in un incremento delle vendite e dei profitti. Se, però, l'obiettivo è quello di essere il solo fornitore di un prodotto allora questo dovrebbe essere un prodotto commerciale piuttosto che open source. L'open source non prevede l'accesso esclusivo ai funzionamenti interni di una qualsiasi cosa. Questa è la sua idea.

Tornando ad Enoch

Adesso è il caso di chiudere la parentesi e tornare alla mia storia.

Man mano che Enoch cominciava a diventare sempre più raffinata, decidemmo che era necessario cambiarle nome, nacque cosi "Gentoo Linux". Nel frattempo avevamo già rilasciato un paio di versioni di Encoh (ora Gentoo), e stavamo forzando i ritmi per rilasciare la versione 1.0 di Gentoo Linux. Quasi contemporaneamente decisi di aggiornare il mio vecchio Celeron 300 (overcloccato a 450 Mhz e solido come una roccia) con un Abit BP6 (una piastra dual Celeron che era appena uscita sul mercato). Vendei il mio vecchio pc e contestualmente acquistai il mio sistema dual Celeron 366. Dopo aver overcloccato i processori per portarli a circa 500 Mhz, viaggiavo. Notai, però, che la mia nuova macchina non era molto stabile.

Naturalmente la prima reazione fu quella di riportare tutto a 2x366 Mhz. Nonostante ciò, però, continuavo a sperimentare continuamente un comportamento anomalo. Fino a che la macchina aveva la CPU sotto carico non si bloccava, ma se lasciavo la macchina scarica c'erano buone possibilità che il sistema si bloccasse completamente. Si, un idle bug -- argh! Dopo molte ricerche, trovai molti altri utenti Linux che avevano lo stesso problema con questa particolare scheda madre. Sembrava che un chip sul BP6 (era il controller PCI?) avesse un comportamento anomalo o fuori dalle specifiche e questo era la causa per cui Linux si bloccava in condizioni di macchina scarica.

Fui estremamente sconvolto da questo, e poichè non potevo ordinare ulteriori pezzi per il PC, lo sviluppo di Gentoo subì effettivamente uno stop. Ero molto pessimistico su Linux e decisi di orientarmi verso FreeBSD. Si, FreeBSD è quello con cui concluderò questa puntata -- leggi la Parte 3. :)

Risorse

L'autore

Daniel Robbins vive a Albuquerque, New Mexico. E' stato presidente/CEO di Gentoo Technologies Inc., Chief Architect del progetto Gentoo ed ha contribuito come autore a molti libri pubblicati da MacMillan: Caldera OpenLinux Unleashed, SuSE Linux Unleashed, and Samba Unleashed. Daniel ha avuto a che fare con i computer in diverse maniere, già dalle scuole supriori quando fù dapprima esposto al linguaggio di programmazione Logo e poi a dosi potenzialmente letali di PacMan. Questo probabilmente spiega perchè da allora ha lavorato come Lead Graphic Artist presso SONY Electronic Publishing/Psygnosis. Daniel ama passare tempo con sua moglie Mary e con la sua bambina, Hadassah. Puoi contattare Daniel all'indirizzo drobbins@gentoo.org.



Stampa

Aggiornato il 9 ottobre 2005

Oggetto: Nel suo precedente articolo Daniel Robbins ha raccontato la storia di come è diventato uno sviluppatore Stampede Linux e del perchè alla fine abbia lasciato Stampede per dar vita alla distribuzione Enoch. In questa seconda parte ci fa partecipi degli strani eventi che sono successi dopo che il team di sviluppo di Enoch ha scoperto un compilatore, poco conosciuto, ma molto veloce.

Daniel Robbins
Autore

Paolo Palana
Traduttore

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.