|
|
L'albero Unix ripensato: un'introduzione a GoboLinuxHisham Muhammad, 09 Maggio 2003. Ultimamente, vi sono state molte discussioni a proposito dello stato corrente di Linux come sistema desktop, e articoli sono comparsi qua e là, a volte con idee molto buone. Tuttavia, nessuno mi ha sorpreso più di questo. Era tutto molto ipotetico, ma conteneva idee piuttosto radicali sul modo in cui l'albero delle directory di Linux andrebbe riorganizzato. Questa era ovviamente la parte maggiormente polemica dell'articolo, e sollevò numerose discussioni per decidere se il tutto avrebbe potuto essere realmente implementato. E fu proprio questa la ragione della mia sorpresa: noi l'abbiamo già fatto da più di un anno. GoboLinux è una distribuzione Linux basata su un albero delle directory alternativo, che si è evoluta da un'installazione personalizzata di LFS a una distro ad oggi utilizzata e mantenuta da un piccolo gruppo di persone. È stato interessante notare come ci siano molte persone interessate ad idee simili alle nostre. Quindi, è forse giunto il momento di uscire allo scoperto. Un po' di storia Ricordiamo tutti i tempi in cui parlare di distribuzioni Linux per il segmento desktop significava discutere chi avesse la procedura d'installazione migliore. Molto è cambiato da allora: i semplici installatori grafici sono una realtà, ma noi siamo ancora un po' indietro. Tra le normali "sfuriate" sul "perché (inserire l'oggetto della discordia) è il problema", di tanto in tanto saltano fuori alcune idee interessanti. Ancor più interessante è il fatto che alcune persone cominciarono a credere che forse era tempo per tentativi più avventurosi. Stranamente, GoboLinux non fu uno di questi. L'intera faccenda ebbe inizio quando dovetti installare alcuni programmi all'università. Poiché non avevo accesso alle directory standard di Unix, creai le mie sotto $HOME nel modo che ritenni opportuno. Aggiornavo costantemente i programmi da sorgente, e non potevo usare un gestore di pacchetti. La mia soluzione fu anche la più ovvia: inserire ogni programma in una propria cartella, come ~/Programs/AfterStep. Presto le variabili d'ambiente (PATH, LD_LIBRARY_PATH...) divennero sempre più grandi, così creai delle directory centralizzate per ogni tipologia di file, contenenti collegamenti simbolici: ~/Libraries, ~/Headers e così via. Un'evoluzione naturale fu scrivere piccoli script di shell per gestire collegamenti, configure e Makefile. Questo sistema si rivelò molto conveniente da usare. A casa, cominciai gradualmente a rimuovere i pacchetti precompilati e a ricompilarli con gli script da me creati. Mi stavo muovendo verso un systema Linux completamente personalizzato, che chiamai scherzosamente LodeLinux. Quando fu completo all'80% circa, il Grande Collasso del Filesystem colpì. Dovetti cominciare tutto da capo, ma questa volta seguendo una strada differente: invece di "decostruire" una distribuzione esistente, io (Hisham Muhammad) e un amico, André Detsch, passammo due giorni creando un sistema Linux From Scratch modificato. Senza troppi intoppi, il 20 Marzo 2002 GoboLinux era nato. Un mese dopo, presentammo un articolo al 3° Workshop sul Software Libero chiamato "Una nuova proposta per l'albero delle directory Unix". Di cosa si tratta alla fine? GoboLinux non è assolutamente "ancora un'altra distro Linux per il desktop". È interamente basata su una struttura delle directory alternativa. Ogni programma risiede nella propria cartella: troverai XFree86 4.3 in /Programs/XFree86/4.3/, e ping in /Programs/Netkit-Base/0.17/bin/ping. Per sapere quali programmi sono installati nel sistema, tutto quello che devi fare è ls /Programs. Per ogni categoria di file, c'è una directory sotto /System/Links che raggruppa i file di ogni applicazione tramite collegamenti simbolici: Executables (eseguibili), Libraries (librerie), Headers, Shared (file condivisi) e Manuals (pagine di manuale). Per mantenere la compatibilità, ogni directory "tradizionale" è un collegamento alla categoria corrispondente. Quindi, /bin, /sbin, /usr/bin, /usr/local/bin (e via dicendo) sono tutti collegamenti simbolici a /System/Links/Executables. Anche le variabili d'ambiente sono semplificate: export PATH=/System/Links/Executables è sufficiente. Per farla breve, abbiamo un sistema di gestione dei pacchetti privo di una base di dati: la struttura della cartelle è sufficiente da sola all'organizzazione del sistema (non era forse questo il suo scopo originario, dopo tutto?). Ogni directory di programma (per esempio, /Programs/KDE) contiene sottodirectory di versione (/Programs/KDE/3.0, /Programs/KDE/3.1.1), insieme ad una directory "neutrale" per le impostazioni (/Programs/KDE/Settings), al cui interno sono contenuti file che normalmente sarebbero in /etc. Mantenere due o più versioni di una libreria è banale. Quando la maggior parte delle distribuzioni passò a GCC 3, queste rilasciarono una nuova versione principale, quasi del tutto incompatibile con le precedenti. Quando la serie 006 di GoboLinux adottò GCC 3, si trattò semplicemente di mantenere vecchie e nuove versioni delle librerie le une a fianco le altre, mentre l'aggiornamento veniva gradualmente completato. Nessun pacchetto "compat" (per compatibile, ndt). In GoboLinux la maggior parte delle procedure sono automatizzate tramite una collezione di script. Per creare un pacchetto GoboLinux, devi semplicemente scrivere CreatePackage CoreUtils. Tutto quello che fa questo comando è memorizzare CoreUtils/5.0/ e CoreUtils/Settings in un file .tar.bz2 chiamato CoreUtils--5.0--i686.tar.bz2. Un collegamento chiamato /Programs/CoreUtils/Current indica quale versione sia effettivamente quella corrente. Questa è usata dagli script come una 'versione predefinita'. L'installazione di un programma è gestita da tre script: PrepareProgram, il quale crea la gerarchia /Program/<program-name> e passa le opzioni necessarie a configure. SymlinkProgram crea i collegamenti in /System/Links. Uno script conenitore, CompileProgram copre il caso comune di configure && make && make install (insieme ad un certo numero di opzioni da linea di comando per gestire situazioni speciali). Script di avvio alternativi Poiché stavamo effettivamente "cominciando da zero", e volevamo seriamente creare un sistema nel quale ogni cosa avesse senso per noi, ci prendemmo anche del tempo per ripensare gli script di avvio. Sentivo che i due modelli storici (System V e BSD) erano troppo complessi per la nostra semplice impostazione da computer desktop. GoboLinux usa un sistema più semplice: due script, Init e Done, svolgono la maggior parte del lavoro. Script aggiuntivi, come Multi e Single, si occupano dei runlevel. Questi file sono semplici sequenze di comandi, preceduti dalla parola Exec e da una stringa di messaggio. Ecco un estratto di Init: Exec "Setting clock..." SetClock Exec "Loading keymap..." loadkeys "$KeymapLayout" Exec "Bringing up the loopback interface..." ifconfig lo 127.0.0.1 Compiti più elaborati come SetClock sono definiti come funzioni di shell in un file di tipo Task (questi possono inoltre essere eseguiti da linea di comando usando lo script RunTask). Le impostazioni configurabili sono definite come variabili d'ambiente all'interno del file Options. La funzione contenitore Exec permette una caratteristica aggiuntiva piuttosto carina: i temi d'avvio. La sequenza d'avvio può assomigliare a Slackware (con i classici messaggi di errore/output), a RedHat (con una marea di OK), o utilizzare lo stile GoboLinux (la seconda utilizza una versione modificata della patch Linux Progress). L'albero "tradizionale" Sfortunatamente, non tutti i programmi hanno la flessibilità necessaria per essere installati ovunque. Occasionalmente, percorsi inscritti nel codice si presentano anche in programmi che appartengono allo "spazio utente" e dovrebbero, almeno in linea teorica, permettere l'installazione all'interno della home directory di un utente. Per quanto mi piacerebbe che ciò avvenisse sul lungo periodo, correggere tutte le applicazioni non è un'opzione percorribile. Per questa ragione, GoboLinux mantiene, come detto prima, un albero "tradizionale" dove tutti i classici percorsi Unix sono posti in corrispondenza degli equivalenti GoboLinux, così, se un Makefile cerca /usr/X11R6/include/X11/Xaw3d/XawInit.h, lo troverà, seppure questo si trovi in realtà in /Programs/Xaw3d/1.5/include/X11/Xaw3d/XawInit.h. Quando due applicazioni hanno una directory con lo stesso nome, gli script di GoboLinux espandono quest'ultima ricorsivamente. Sia XFree86 che Xaw3d hanno X11 sotto include. Una directory /System/Links/Headers/X11 è creata automaticamente, contenente i collegamenti di entrambe le directory X11. Un'altra caratteristica interessante è che gli script di GoboLinux eseguono make install usando uno speciale id utente che possiede permessi di scrittura solamente all'interno delle directory dei sorgenti di programma e del programma stesso sotto /Programs. In questo modo, nessun file può "sfuggire" alla gerarchia GoboLinux e "infiltrare" qualche directory nell'albero tradizionale. La struttura delle directory di GoboLinux dà freschezza e chiarezza all'aspetto di un sistema Linux, ma la presenza dell'albero tradizionale, benché necessaria, toglie un po' di eleganza. Mac OS X utilizza uno "sporco trucco" per nascondere la propria natura Unix: Finder non mostrerà le directory Unix, che restano però visibili da linea di comando. In Linux esistono molti modi differenti di guardare al filesystem (shell, file manager, browser), così abbiamo dovuto andare più in profondità per ottenere un sistema che apparisse realmente ordinato. GoboHide è una patch (ovviamente opzionale) per il kernel insieme ad una serie di strumenti lato utente scritti da Lucas Correia Villa Real e Felipe Damásio che implementano efficacemente "file nascosti" in Linux (molto al di là dei dot-file [file il cui nome inizia per punto, solitamente considerati nascosti, ndt], i quali sono implementati a livello utente, proprio come in Finder). Ecco come si presenta ls / in GoboLinux: Depot Mount System Files Programs Users Lavori correlati Durante la lettura, avrai probabilmente incontrato molti concetti familiari (per non parlare dei nomi di directory). GoboLinux ha chiaramente tratto ispirazione da altri sistemi operativi, come Mac OS X, BeOS e AtheOS, ma penso che il fatto che essi creino "quacosa di differente" usando una base Unix esistente (sia questa un kernel Unix come in OS X o i GNU tools utilizzati da AtheOS) abbia avuto l'influenza maggiore. Proprio ora esistono numerosi altri progetti, in vari stadi di sviluppo, che utilizzano il kernel Linux come fondamenta fornendo un albero delle directory alternativo. Curiosamente, molti sono cloni o comunque sono pesantemente ispirati ad uno specifico sistema operativo proprietario: ROX OS vorrebbe assomigliare ad un sistema RiscOS, LinuxSTEP è un progetto basato su GNUstep che mira ad essere il prossimo sistema NeXT, e BlueEyedOS mira ad un clone di BeOS compatibile con quest'ultimo a livello sorgente. GoboLinux, d'altro canto, non è un clone di alcunché. Utilizza software desktop Linux standard. Pensiamo che la struttura delle directory ben organizzata ne faccia una buona piattaforma di test per nuove idee -- le possibilità sono infinite. A che punto siamo?
GoboLinux si è evoluto immensamente durante l'ultimo anno. Alla pagina gobolinux.org puoi trovare un'immagine ISO del nostro ultimo rilascio, 006. È un "live CD" avviabile che esegue GoboLinux in un filesystem in sola lettura sotto chroot, così da permetterti di esplorare la struttura delle directory e darti un sentore di come appaia GoboLinux. Il CD comprende anche i classici script d'installazione e alcuni pacchetti extra. Non esiste ancora un installatore grafico, ma penso che la facilità d'utilizzo della procedura d'installazione rifletta la corrispondente semplicità dell'intero sistema (a differenza di quanto accade in molte distribuzioni). A dispetto della base d'utenza moltro ristretta (non abbiamo mai fatto parola del progetto da nessuna parte), GoboLinux è progredito velocemente e ad oggi si è rivelato completamente utilizzabile (la maggior parte degli sviluppatori GoboLinux ne fa uso come unico sistema operativo, così come alcune altre persone). |