Archivi categoria: Articoli

Articoli scritti da me, reportages. Piu in genere, tutto ciò che è troppo grosso per essere passato ragionevolmente via feed RSS generico.

Firefox e le estensioni

Questo articolo è stato pubblicato sul numero di aprile 2007 di PcWorld

La rivoluzione del WWW

Il World Wide Web è oggi uno dei protagonisti dell’era dell’informazione. Ideato da Tim Berners-Lee (insieme ad un altro manipolo di ricercatori) nel lontano (informaticamente parlando) 1989, ha conosciuto una vera e propria esplosione da quando l’accesso alla Rete ha raggiunto la popolazione.

Grazie ad internet è possibile non solo fruire di contenuti proposti da altri (un po come succede con la televisione), ma è soprattutto possibile rendersi autori, proporre contenuti, con costi talmente irrisori da aver portato ad una vera e propria rivoluzione mediatica.

Grazie ad una rete che è in grado di mettere in comunicazione miliardi di teste pensanti in tutto il mondo, farli lavorare a progetti comuni, sono nati e cresciuti oggetti come WikiPedia, l’enciclopedia libera. L’esigenza di dover fare ordine nel caos di informazioni disponibili ha portato alla nascita di colossi come Yahoo! e Google. Oggi tutto questo mondo viene spinto di un ulteriore passo in avanti, con l’introduzione di tecnologie quali AJAX e gli RSS, che trasformano l’idea stessa del World Wide Web, portandoci a parlare di “Web semantico” o di “Web2.0”.

Tutto molto bello. Ma tutto questo si appoggia sull’uso di un singolo strumento, in grado di interfacciare l’utente con questo splendido (e maligno) mondo che è Internet: il browser.

Un browser non è altro che quell’applicazione che a fronte della digitazione di un indirizzo URL, è in grado di proporci la pagina richiesta, completa magari di tutti quei dati che l’autore ha deciso di allegarvi, quali fotografie, animazioni o filmati.

Proprio i browser sono stati i protagonisti di un’asprissima “guerra”, che ha visto, verso la fine degli anni novanta, Internet Explorer 4 prevalere (per diversi motivi) su Netscape Navigator. Il dominio di Interet Explorer però, è stato messo a repentaglio dalla stessa casa produttrice che, non avendo provveduto per diversi anni ad un’adeguato sviluppo del proprio applicativo, ha lasciato campo libero alla nascita di numerosi concorrenti che un po alla volta hanno rosicchiato consistenti fette di mercato ad Internet Explorer.

Primo e piu noto tra questi (detiene oltre il 20% del “mercato”), è certamente Mozilla Firefox, lontano discedente di quel Netscape Navigator che la “guerra dei browser” l’aveva persa pur vantando, a dire di molti, caratteristiche tecnologiche piu avanzate di Internet Explorer 4.

Mozilla Firefox è un browser tecnologicamente molto avanzato, che vantava numerose importanti funzionalità ben prima che Internet Explorer le facesse proprie, con l’uscita della versione 7.0 (va ovviamente detto che altri browser quali Opera e Apple Safari implementavano alcune di queste funzionalità ancora prima di Mozilla Firefox).

Le funzionalità di Mozilla Firefox

Una delle funzionalità maggiormente visibili di Mozilla Firefox è il “tabbed browsing”, la possibilità cioè di aprire diverse pagine web all’interno della stessa istanza di Firefox. Questo consente di rendere “piu leggero” il browser (meno istanze aperte, meno risorse hardware occupate) e di avere sottomano le diverse pagine senza doversi spostare da una finestra all’altra. Inoltre proprio grazie al meccanismo della 2navigazione a schede”, è possibile cominciare a lanciare in background il caricamento di una pagina (in una nuova scheda che apparirà dietro quella correntemente visualizzata) continuando a leggere quella corrente, semplicemente cliccando con la rotellina del mouse, o tenendo premuto il tasto CTRL, sul link alla pagina che vogliamo caricare. Una volta che avremo finito di leggere la scheda corrente, potremo chiuderla (cliccando sull’apposito pulsante visualizzato all’altezza della scheda o premendo CTRL+X) e troveremo le altre schede già completamente caricate, pronte per essere lette senza ulteriori attese.

Altra importante funzionalità di Mozilla Firefox è il “blocco automatico dei popup”. I popup sono quelle odiose finestrelle che si aprono quando navighiamo su un sito web, che generalmente contengono pubblicità, e che si piazzano in primo piano, costringendoci a chiuderle. Mozilla Firefox come dicevamo, implementa un meccanismo di riconoscimento e blocco automatico dei popup. Nel momento in cui un popup viene bloccato, un’iconcina appare nella barra di stato (in basso a destra solitamente), avvisandoci di quanto avvenuto, e consentendoci eventualmente di richiedere lo stesso la visualizzazione del contenuto bloccato. E’ inoltre possibile creare delle liste di esclusione, definendo cosi una serie di siti web che sono autorizzati ad aprire popup.

Anche l’aspetto grafico di Mozilla Firefox è facilmente modificabile grazie alla possibilità di utilizzare dei temi (scaricandoli anche dalla rete). Un’ampia raccolta di temi è disponibile a partire dal sito ufficiale di Mozilla Firefox, o cliccando sull’apposito link nella finestra di gestione dei temi integrata nel browser. Oltre ai temi, è inoltre possibile modificare l’aspetto della barra degli strumenti di Firefox, cancellando le icone che non riteniamo utili, o aggiungendone di nuove. Per poterlo fare, è scorrere il menu “Visualizza”, scegliere il sottomenu “Barre degli strumenti”, e selezionare “Personalizza”. Sarà cosi possibile trascinare i diversi elementi dalla finestra che appare alla barra, posizionandoli e riordinandoli a piacimento.

Molto importante è anche la funzionalità “anti-phishing”, implementata a partire da Firefox-2.0. Si tratta di un filtro basato su una lista scaricata automaticamente da Firefox dal sito ufficiale ad intervalli regolari, che contiene un elenco di siti che sfruttano il meccanismo del phishing (creare appositamente pagine web in tutto e per tutto somiglianti a siti noti e considerati affidabili, come quelli delle banche, in modo da indurre l’utente ad inserire i propri dati personali, quali username e password, in modo per poi riutilizzarli in maniera fraudolenta). Grazie a questo elenco, Firefox è in grado di avvertire l’utente del fatto di trovarsi in presenza di una pagina falsificata, mettendolo cosi in guardia dall’eventuale pericolo.

Un’altra importante funzionalità introdotta con la versione 2.0 di Firefox, è la “ricerca veloce”. In alto a destra dell’interfaccia di Firefox infatti, troviamo un campo in cui è possibile inserire il testo da cercare, e selezionare il motore di ricerca da utilizzare. Battendo invio o cliccando sull’apposita iconcina a lato del campo di testo, verremo reindirizzati direttamente ai risultati relativi alla nostra ricerca sul motore di ricerca prescelto. E’ oltretutto possibile inserire nuovi motori di ricerca, o inserire la possibilità di fare ricerche su Ebay e WikiPedia, o su dizionari online, visitando il sito http://www.mozillaitalia.it/searchplugins/ che ne contiene una notevole quantità.

Ma la principale peculiarità di Mozilla Firefox, quella che lo distingue dagli altri principali browser del mercato, è il fatto di essere libero e gratuito. Gratuito perchè non si paga (lo si scarica infatti gratuitamente dal sito ufficiale http://www.mozilla.org/firefox o direttamente tradotto in italiano da http://www.mozillaitalia.it), libero perchè viene reso disponibile anche in formato codice sorgente, concedendo cosi agli utilizzatori una serie di garanzie tipiche del Software Libero, quali libertà di modifica, di studio e di redistribuzione.
Proprio la caratteristica di essere Software Libero, e di conseguenza il fatto di essere molto usato all’interno di sistemi operativi completamente liberi, come GNU/Linux, porta a Firefox il principale vantaggio (dopo la velocità di sviluppo e di aggiornamento): la disponibilità di uno spaventoso numero di “estensioni”, sviluppate dalla comunità del Software Libero (che è poi anche alle spalle dello sviluppo stesso di Mozilla Firefox).

Le “estensioni” sono dei componenti aggiuntivi (disponibili in gran numero anche sul sito ufficiale di Mozilla Firefox) che possono essere facilmente sviluppati da terze parti per estendere le funzionalità di Firefox fino ai confini dell’immaginazione, implementando funzionalità a cui gli sviluppatori non avevano pensato.

Mozilla Firefox e le estensioni

AdBlock Plus

Tra le estensioni piu note ed utilizzate di Firefox, troviamo “AdBlock Plus”. Si tratta di uno strumento in grado di “bloccare” tutto quello che non vogliamo vedere sul Web, ad esempio la pubblicità. Una volta installata l’estensione, sarà sufficiente cliccare con il tasto destro su un’immagine o un frame, per poter chiedere a AdBlock di inserirla nelle sue liste e quindi di non mostrarla piu. E’ inoltre possibile utilizzare degli asterischi all’interno delle liste, in modo da bloccare intere classi di contenuti: bloccando ad esempio “http://*.doubleclick.net/*”, elimineremo d’un colpo tutto il materiale proveniente da DoubleClick.net, nota azienda di pubblicità online. E’ infine possibile sottoscrivere “liste remote” che vengono mantenute aggiornate grazie al contributo di numerosi utenti della comunità, e consentono di bloccare la maggior parte dei contenuti sgradevoli del web.

Del.icio.us

Un interessante estensione poi, è quella sviluppata dallo staff di http://del.icio.us, che consente di interfacciare Firefox direttamente ai servizi offerti dal noto sito web. Sarà cosi possibile aggiungere il sito che state visitando ai vostri “bookmarks” (i preferiti condivisi su del.icio.us) assegnando solo delle parole chiave, sulla base delle quali potrete cercare sia all’interno dei vostri bookmarks, sia all’interno di quelli degli altri membri della numerosa comunità, entrando attivamente a far parte del “Web semantico”.

User Agent Switcher

Capita sempre piu raramente, ma alcuni anni fa era davvero frequente imbattersi in siti web che mostravano a chi non utilizzasse Internet Explorer una pagina di errore che vi rendeva noto che quel dato sito web, sviluppato per essere compatibile con Internet Explorer, non poteva essere visualizzato con altri browser. Con il passare degli anni per fortuna, anche Internet Explorer si è in parte adeguato alla necessità di implementare gli standard previsti per il World Wide Web, è quindi è possibile visualizzare adeguatamente anche quei siti web studiati per aggirare i bug di visualizzazione di Internet Explorer che li rendevano assolutamente inguardabili con tutti gli altri browser web. Con la diffusione dei browser alternativi inoltre, è in crescita l’attenzione che i webmaster rivolgono a questi loro visitatori. Qual’ora però vi imbatteste lo stesso in un sito web che poco elegantemente impone ai propri visitatori l’utilizzo di uno specifico browser web, l’estensione “User Agent switcher” vi consente di “mascherare” Firefox, comunicando al sito web in questione una “falsa identità” (inviando il campo “User-Agent” caratteristico del browser web prescelto) e consentendovi cosi di aggirare l’antipatica (e spesso inutile) limitazione.

Nello sfortunato caso in cui vi trovaste comunque di fronte ad una pagina scritta talmente male da non essere visualizzabile correttamente con Mozilla Firefox, potrete sempre (a patto che utilizziate una piattaforma Microsoft Windows) integrare un’istanza di Internet Explorer all’interno delle tabelle di Firefox, utilizzando le estensioni “IE Veiw” o “IE Tab” (non prima di aver segnalato al webmaster il problema, naturalmente).

Scaricare dal web

DownThemAll!! è un download manager completamente integrato all’interno di Mozilla Firefox. Al già ottimo download manager di Firefox aggiunge la possibilità di sospendere i download, per riavviarli in seguito, di implementare tecniche per rendere il download piu veloce, o ancora di scaricare tutti i link o tutte le immagini all’interno di una stessa pagina attraverso un’interfaccia semplice ed intuitiva.
Ci sono numerosissime estensioni poi, quali UnPlug, DownLoad Helper o ancora Media Pirate, che consentono di rendere piu semplice il salvataggio in locale di oggetti che non sono comunemente scaricabili, come filmati o oggetti Flash.

Web Developer

Un’altra interessante estensione, pensata per coloro che sviluppano siti web, è la “Web developer”, che consente di mettere in risalto, a richiesta, i diversi componenti di una determinata pagina web, o di mostrare in modo intuitivo lo schema dei fogli di stile CSS, o i JavaScript caricati fa Firefox, modificandoli anche “al volo” e visualizzandone il contenuto direttamente sul browser web.

Performancing

Performancing è un’estensione che consente di inserire nuovi contenuti al vostro blog direttamente a partire dalla sidebar di Firefox, magari mentre visualizzate una interessante pagina web, importando i contenuti (come ad esempio le foto) direttamente dalla pagina visualizzata.

Altre estensioni, reperibili sul sito sito ufficiale (che è stata tra l’altro profondamente rinnovata recentemente), consentono di fare cose come visualizzare i download attivi all’interno della barra di stato, o mostrare le informazioni meteo, interfacciarsi con particolari programmi o servizi offerti in rete (Flick, Del.icio.us, LinkedIn…) o anche semplicemente ricaricare ogni tot secondi la pagina correntemente visualizzata. Le estensioni disponibili per Mozilla Firefox sono davvero moltissime (solo quelle disponibili sul sito ufficiale sono oltre 2.000) e farsi un bel giro su https://addons.mozilla.org/firefox/extensions/ può riservarvi qualche gradita sorpresa.

GNU/Linux, quale distribuzione?

Questo articolo è stato pubblicato sul numero di Giugno 2007 di PcWorld

Un sistema operativo, tante versioni. Quale scelgo?

Come abbiamo piu volte detto, la libertà che caratterizza il mondo dell’opensource, porta anche al crescere del numero di scelte disponibili, in quando a numero di applicazioni disponibili, ma anche in quanto a versioni dell’insieme di tutti questi software, che costituiscono una “distribuzione”.

Se da un lato questo è un aspetto estremamente positivo, in quanto consente ad ognuno di scegliere tra diverse alternative disponibili secondo le proprie specifiche esigenze, molti utenti meno esperti si trovano spaesati di fronte a tanta possibilità di scelta.

L’obiettivo che si pone questo articolo è quello di fare una breve panoramica sulle principali distribuzioni disponibili sul panorama mondiale del software libero basato su Linux (cercando di metterne in risalto le diverse peculiarità e caratteristiche in base alle quali gli utenti potranno poi scegliere la distribuzione piu adatta alle relative esigenze) e di raccontare un po la storia di queste distribuzioni, che spesso dice molto piu di quello che un elenco degli applicativi inclusi potrebbe fare sugli obiettivi che la distribuzione vuole raggiungere.

Ubuntu Linux [ http://www.ubuntu.com ]

Si tratta della distribuzione attualmente piu utilizzata in ambito “desktop”, ovvero per l’utilizzo comune. Viene particolarmente apprezzata per la semplicità d’uso ed installazione.

Ubuntu Linux nasce ufficialmente nel settembre 2004 ad opera di Mark Shuttleworth, carismatico multimilionario sud africano (e secondo “turista dello spazio”) la cui società, la Canonical Ltd sta attualmente sovvenzionando il progetto.

La grande diffusione di Ubuntu Linux è dovuta essenzialmente a due fattori: il primo è il grande impegno profuso nello sviluppo e nella semplificazione del sistema (sia dell’aspetto di installazione che di quello di configurazione, ampliando ulteriormente anche il riconoscimento dell’hardware). Il secondo, sta nel supporto professionale offerto agli utenti tramite i forum, i wiki di documentazione collaborativa (alla quale cioè ogni utente può contribuire attivamente).

Infine, il fatto di poter richiedere l’invio gratuito di una copia di Ubuntu direttamente dal loro sito web (servizio Ship-It, recentemente riproposto in grande stile con l’uscita della nuova versione, la 7.04, in arte “Festy-Fawn”, uscita poco dopo pasqua) ha certamente contribuito a far conoscere al grande pubblico questa distribuzione (e con lei GNU/Linux) allargando la relativa fascia di utenza.

All’interno dello stesso progetto di Ubuntu, vengono fornite versioni differenti: ad esempio esistono una versione dedicata all’educazione scolastica (Edubuntu) che raccoglie del software utile per la didattica, piuttosto che una versione (Xubuntu) dedicata ai sistemi piu datati che potrebbero faticare a far “girare” correttamente la versione piu recente. Esiste inoltre una versione “Ubuntu Server” dedicata a coloro che devono gestire un server, ed è in lavorazione una versione detta “Ubuntu Studio” che dovrebbe rendere maggiormente semplice e banale l’uso di software dedicati al montaggio audio e video.

Proprio con l’ultima versione 7.04, Ubuntu ha affiancato alle features già disponibili nella distribuzione, che ne hanno garantito il successo, una serie di miglioramenti che la rendono ancora piu facile da provare (grazie al fatto che il cd di installazione è in realtà un Live-CD, che mette quindi in grado l’utente di provare il sistema prima di installarlo realmente), da installare e da configurare. Particolarmente notevoli sono le introduzioni di un nuovo applicativo che consente di migrare facilmente i propri dati e le proprie preferenze dall’eventuale concomitante installazione di Microsoft Windows XP e di un software che semplifica l’installazione semi-automatica dei codecs multimediali necessari per la visualizzazione di alcune tipologie di files. Infine, grazie all’integrazione dell’ambiente grafico Compiz nella distribuzione, si possono ottenere, disponendo di un’adeguata scheda video, di effetti grafici che nulla hanno da invidiare ai piu noti Windows Vista e MacOSX.

Ubuntu non fa della libertà del software una propria bandiera, incudendo infatti all’interno della distribuzione anche una serie di software proprietari (quali i driver proprietari per le schede video Nvidia ed ATI, ma anche alcune applicazioni sviluppate dalla Canonical stessa), cosa che invece non viene in alcun modo tollerata dalla distribuzione da cui Ubuntu nasce, Debian.

Debian GNU/Linux [ http://www.debian.org ]

Nata nell’ormai lontano 1993 per volere di Ian Murdock, Debian GNU/Linux è una delle distribuzioni piu usate ed apprezzate a livello mondiale. E’ stata inoltre utilizzata come punto di partenza stabile per oltre 120 altre distribuzioni, tra le quali anche Ubuntu Linux ed il live-CD Knoppix.

Debian GNU/Linux è forse la distribuzione piu “eticamente pura” tra quelle attualmente in circolazione. In fase di installazione infatti, Debian GNU/Linux contempla solo software libero, e anche in seguito, bisognerà indicare esplicitamente quando includere nel sistema software di tipo proprietario (anche a costo di sacrificare, in certi casi, alcune funzionalità).

Utilizzata moltissimo per i server, grazie alla sua impressionante stabilità, al supporto per numerose piattaforme diverse (sono supportate undici diverse famiglie di processori), ed alla semplicità di amministrazione, garantita dai numerosi strumenti utili per gli amministratori di sistema ed al potentissimo e flessibilissimo gestore di pacchetti “Apt” (ereditato tra l’altro anche da Ubuntu Linux), oggi si ripropone con forza anche per i sistemi “Desktop” (all’utenza meno esperta) con l’uscita della nuova ed aggiornata versione 4.0 (“Debian Etch”), dopo quasi 2 anni di sviluppo.

Per chi si avvicina per la prima volta a Linux però, rimane piuttosto difficoltosa la fase di installazione (nonostante l’installer sia disponibile anche in forma grafica e sia tradotto in 58 lingue), per la quale sarebbe consigliata la supervisione di un utente piu esperto. Una volta installato e configurato il sistema però, sarà semplice e facile da usare come ormai GNU/Linux è in grado di essere.

Il piu grande vantaggio ad oggi della distribuzione Debian GNU/Linux è probabilmente la forza della comunità che ci sta dietro: Debian infatti non ha alle spalle un’azienda, ma un gruppo di oltre 1000 volontari provenienti da tutto il mondo ai quali si affiancano i numerorissimi utenti di questa distribuzione. Questo uso diffuso del sistema consente di trovare un po’ ovunque su internet supporto nell’uso quotidiano del sistema e informazioni riguardo la soluzione dei problemi già noti.

OpenSUSE [ http://www.opensuse.org ]

Nel lontano 1992, un gruppo di entusiasti sostenitori di GNU/Linux tedeschi fondarono una società che offriva supporto professionale. Inizialmente, distribuirono una versione modificata di Slackware Linux, una delle distribuzioni piu anziane e stabili del panorama mondiale. Non ci volle molto però (era il 1996) prima che iniziassero a rilasciare una propria distribuzione, che prese il nome di SuSE Linux. Punto di forza di questa distribuzione era il sistema di amministrazione basato sul software Yast (inizialmente rilasciato sotto licenza proprietaria) che costituiva uno dei primi tentativi di integrazione volti a rendere facilmente installabile ed amministrabile l’intero sistema. Affiancando ad esso dell’ottima documentazione, la piccola azienda tedesca ottenne in breve tempo un successo davvero notevole, soprattutto in Europa e nel Nord America, e soprattutto in quegli ambiti commerciali dove aver a che fare, per quanto riguarda il supporto, con un azienda può fare la differenza.

Nel 2003, SuSE fu acquistata da Novell Inc. che faceva a quel tempo i primi passi nel mondo dell’opensource. La prima mossa di Novell fu quella di rilasciare come software libero Yast, rendere le immagini dei dischi di installazione liberamente scaricabili da internet ed aprire il processo di sviluppo al contributo della comunità. A partire da questi cambiamenti, vide la luce, nel 2005, il primo rilascio di openSUSE (quella che sarebbe dovuta essere SuSE 10.0) e la nascita di un progetto commerciale parallelo, chiamato SUSE Linux Enterprise Desktop e SUSE Linux Enterprise Server tramite i quali Novell aggredisce il mercato Enterprise rivaleggiando con l’americana Red Hat Linux, fornendovi supporto professionale.

L’apertura del processo di sviluppo e il rilascio libero e gratuito dell’intero sistema ha portato openSUSE a detenere nel giro di meno di due anni il secondo posto tra le distribuzioni piu usate in ambito desktop, seconda solo a Ubuntu Linux.

OpenSUSE si caratterizza per un sistema estremamente curato, integrato in ogni dettaglio, pulito e facile da installare, aggiornare ed amministrare, proprio grazie al software Yast.

Recentemente però Novell ha stretto con Microsoft un accordo secondo il quale la casa di Redmond concederebbe ai soli clienti di Novell l’uso di una fantomatica proprietà intellettuale detenuta da Microsoft sul codice di GNU/Linux. Il risultato di questo accordo è stato un coro unanime di condanne da parte di molti degli esponenti di spicco della comunità di GNU/Linux che hanno invitato gli utenti a cambiare distribuzione. Proprio l’accordo tra Novell e Microsoft inoltre, ha portato all’inserimento di alcune voci all’interno della nuova licenza GPLv3, che escluderebbero la fattibilità di questo genere di accordi commerciali e potrebbero porre a Novell diversi problemi nella distribuzione di software libero caso in cui questa licenza dovesse prendere realmente piede.

Fedora [ http://www.fedoraproject.org ]

La storia di Fedora richiama da vicino quella di openSUSE, anche se fortunatamente non ne condivide il “finale drammatico”. Quando infatti la distribuzione Red Hat Linux decise di non proseguire nello sviluppo di piattaforme desktop, dedicandosi al solo ambito enterprise, Fedora ereditò da questa la maggior parte del codice, lasciando che fosse la comunità degli utenti desktop di Red Hat Linux a proseguire lo sviluppo della piattaforma.

Red Hat Linux, che ancora oggi agisce come sponsor alle spalle di Fedora, naque nel 1995, quando Bob Young e Marc Ewing ne rilasciarono la prima versione. La vera svolta del cammino di Red Hat però fu il 1997, quando introdusse il sistema di pacchettizzazione “RPM”, il primo in grado di gestire le dipendenze tra i diversi software, che portò la distribuzione statunitense a strappare a Slackware Linux il titolo di distribuzione piu usata al mondo.

Fedora non tardò a recuperare il terreno perso nel travagliato passaggio allo sviluppo condiviso ed oggi è una delle distribuzioni piu usate, grazie alla semplicità di installazione, gestione e configurazione.

Ancora oggi, ad ogni modo, Red Hat Linux mantiene una forte pressione sugli sviluppatori di Fedora, indirizzandone molte scelte. Questo fa si che il progetto Fedora funga, in alcune occasioni, da piattaforma di test di nuove funzionalità che Red Hat Linux vorrebbe inserire all’interno della sua distribuzione commerciale, la “Red Hat Enterprise Linux”, a discapito di una strategia maggiormente orientata al desktop che ne migliorerebbe ulteriormente l’usabilità e ne favorirebbe la diffusione anche tra coloro che muovono i primi passi nel mondo di GNU/Linux.

Fedora ha comunque sempre avuto un occhio attento all’innovazione. Dopo essere stata una delle prime distribuzioni ad includere le estensioni di sicurezza avanzate note come SELinux e progettate niente meno che dalla National Securoty Agency statunitense (NSA), ha recentemente introdotto anche il sistema di virtualizzazione XEN.

Mandriva Linux [ http://www.mandrivalinux.com ]

La storia di Mandriva Linux (precedentemente nota come Mandrake Linux) è una delle piu difficili e travagliate tra quelle delle distribuzioni GNU/Linux. Nata nel 1998 come copia di Red Hat Linux con l’unica differenza di integrare il desktop manager “KDE” al posto di Gnome (al punto che per oltre un anno le due distribuzioni sono rimaste compatibili tra di loro), Mandrake Linux ha avuto per diversi anni grande successo, proponendosi come principale distribuzione per i nuovi utenti di GNU/Linux grazie alla sua semplicità di installazione e configurazione (in particolare l’applicativo DrakeConf tutt’ora incluso nella distribuzione). Mandrake Linux fu una delle prime distribuzioni a presentare un installer grafico che includesse un gestore del partizionamento dei dischi.

Nel 2003 però, una grave crisi finanziaria si abbattè sulla Mandrakesoft, azienda francese che portava avanti lo sviluppo della distribuzione. L’azienda restò per oltre un anno al limite della bancarotta, per poi tornare a fiorire. Al termine del 2005, Mandrakesoft perse una causa legale contro i detentori del copyright sul nome “Mandrake”, e dovette cambiarlo. Questo fu fatto contemporaneamente all’acquisizione della distribuzione brasiliana “Conectiva” e dell’americana Lycoris, danto origine all’attuale nome.

Pensata sin da subito per essere una distribuzione orientata al desktop ed alla semplicità d’uso, Mandriva si è da sempre distinta per la scelta di includere l’ultimissima release dei diversi software (anche a costo, a volte, di rischiare di compromettere la stabilità del sistema) e per il forte impegno nell’ambito dell’internazionalizzazione (il supporto di numerose linghe diverse).

Nonostante il processo di sviluppo sia stato uno tra i primi ad aprirsi ai contributi della comunità, Mandriva Linux ha negli ultimi anni perso parte della propria utenza a causa dell’emergere di nuove distribuzioni “user friendly”, ma anche di discutibili scelte del management che anno alienato parte della base d’utenza (non ultima la decisione di licenziare uno dei co-fondatori della distribuzione, Gael Duval, nell’ambito di un progetto di riduzione dei costi, nel marzo 2006).

L’ultima versione di Mandriva disponibile, la 2007.1, è stata la prima a veder rilasciare la versione “Free” (gratuita e liberamente scaricabile) contemporaneamente a quella “Enterprise” (a pagamento). Questa versione si caratterizza tra l’altro per una particolare attenzione all’aspetto grafico, con l’inclusione del supporto per l’accelerazione grafica openGL (anche legata all’inclusione di driver proprietari per le diverse schede video) e del software di gestione del desktop tridimensionale “Metisse”.

A partire da Mandriva, negli ultimi anni, hanno preso vita una serie di progetti diversi, tra i quali vale la pena segnalare PCLinuxOS, progetto che punta a fornire un sistema completo e dedicato ai nuovi utenti di GNU/Linux che include al proprio interno anche driver e codecs proprietari, in modo tale da fornire agli utenti tutto il necessario per sfruttare appieno il proprio computer senza doversi preoccupare di successive installazioni. Col tempo, PCLinuxOS si è lentamente allontanato da Mandriva, arrivando oggi a sostituire il famoso gestore di pacchetti “urpmi” di Mandriva con l’accoppiata APT-Synaptic di Debian e di Ubuntu Linux.

ArchLinux [ http://www.archlinux.org ]

Distribuzione giovane e dinamica, nata nel 2002 ad opera del canadese Judd Vinet, ArchLinux si caratterizza per la scelta di proporre software compilato per la piattaforma 686, che elimina quindi la retrocompatibilità con 486 e 586 (i processori precedenti il Pentium II), fornendo per contro un notevole incremento delle prestazioni: l’avvio di questa distribuzione, che si completa in una trentina di secondi, ne è la prova piu eloquente.

Si tratta di una distribuzione dedicata agli utenti piu avanzati di GNU/Linux che desiderano un sistema pulito e coerente. Questo è reso possibile grazie ad una filosofia di sviluppo basata sul principio “KISS” (Keep It Simple, Stupid) e anche all’ottimo gestore di pacchetti “pacman” che, nato in seno alla distribuzione stessa, si è rivelato uno dei suoi punti di forza, consentendo di scaricare direttamente da internet, con frequenza quasi quotidiana, gli aggiornamenti necessari. L’assenza di strumenti di configurazione automatizzata e centralizzata rendono questa distribuzione poco adatta a coloro che si approcciano per la prima volta a Linux, ma particolarmente appetibile per gli utenti piu esperti, tra i quali si sta diffondendo piuttosto rapidamente.

Oltre alla disponibilità di pacchetti binari precompilati scaricabili tramite pacman, ArchLinux mette a disposizione degli utenti un sistema di “ports” in stile BSD, chiamato ABS. Un semplice file di configurazione (PKGBUILD) consente di creare un nuovo pacchetto che includa l’applicativo desiderato dall’utente e non incluso nella distribuzione stessa. I files di configurazione dei pacchetti ufficiali sono disponibili sul sito web della distribuzione e scaricabili sul sistema (tramite un sistema basato su CVS) e quindi facilmente customizzabili da parte dell’utente. Tramite il sistema AUR infine, ogni utente potrà inviare e mettere in condivisione con gli altri utenti della distribuzione i propri PKGBUILD, che verranno eventualmente validati ed a volte inclusi all’interno della distribuzione stessa (tramite un meccanismo di votazione aperto alla comunità).

Anche per quel che riguarda la filosofia di rilascio delle versioni, ArchLinux è una voce fuori dal coro. Divisa in piu rami paralleli a seconda del livello di stabilità richiesto al sistema (un po come funziona con Debian Linux), a partire dalla versione 0.8 (rilasciata ad aprile 2007) il team di sviluppatori di ArchLinux ha infatti deciso di rilasciare una nuova versione del cd di installazione in concomitanza con l’inclusione di una nuova versione del kernel Linux, nell’intento di garantire releases stabili e frequenti, con software sempre aggiornato.

Knoppix [ http://www.knopper.net ]

Nata quasi per gioco nel 2003 dalle esperte mani del tedesco Klaus Knopper, Knoppix è stato uno dei primissimi LiveCD mai creati (tra i precedenti si può certamente citare un LiveCD derivato dalla distribuzione Slackware) ed ha letteralmente “aperto la via” a questo genere di tecnologie, grazie al suo innvativo sistema di riconoscimento avanzato dell’hardware ad alla sua collezione di script di autoconfigurazione.

Un LiveCD è un sistema operativo completo interamente contenuto in un normale cd, che si avvia direttamente a partire da questo senza la necessità di installare nulla sui dischi: grazie ad un particolare tipo di filesystem compresso infatti, questo genere di distribuzioni possono fornire oltre 2Gb di software e consentirne l’utilizzo sfruttando la sola memoria RAM del sistema, addirittura consentendo di scegliere la lingua nella quale utilizzare il sistema in fase di avvio. Knoppix include inoltre poi un apposito applicativo che ne consente l’installazione su disco.

Molti LiveCD oggi disponibili sono in realtà dei derivati di Knoppix (a sua volta un derivato di Debian GNU/Linux), sfruttando il notevole sistema avanzato di gestione dell’hardware che ne consente l’avvio senza bisogno di interazione da parte dell’utente su quasi tutti i computer sul mercato. Proprio il notevole supporto hardware e l’ottimo sistema di configurazione automatica, Knoppix è stato in molti utilizzato come punto di partenza per l’installazione di Debian (è infatti possibile trasformare un’installazione di Knoppix in una Debian GNU/Linux), come sistema di “resque” (un coltellino svizzero nelle mani degli amministratori di sistema nel far fronte a sistemi che si rifiutano di avviarsi nuovamente per risolvere il problema) o come “demo” di GNU/Linux da distribuire ai nuovi utenti, proprio grazie al fatto di consentire una completa valutazione del sistema senza dover installare alcunchè. Il suo sistema avanzato di riconoscimento dell’hardware può rivelarsi molto utile, inoltre, per verificare la compatibilità di un determinato computer con GNU/Linux, magari anche prima dell’acquisto stesso del sistema.

Negli ultimi tempi, molte distribuzioni hanno cominciato a basare il proprio sistema di installazione su tecnologie LiveCD (è il caso di Ubuntu) consentendo in questo modo all’utente di testare per intero il funzionamento del sistema prima di procedere all’installazione dello stesso.

Tra le moltissime customizzazioni di Knoppix, una in particolare ci preme segnalarla: si tratta di eduKnoppix, distribuzione realizzata in collaborazione tra il Linux User Group di Brescia ed il Dipartimento di matematica e fisica Università Cattolica di Brescia, pensata per la didattica (sia per gli studenti di tutte le età che per gli insegnanti) e che per questo motivo comprende numerosi software didattici. Trattandosi di una distribuzione pensata e realizzata in Italia, viene configurata in modo che si avvii automaticamente in lingua italiana.

Gentoo Linux [ http://www.gentoo.org ]

Nata nel 2000 grazie a Daniel Robbins, la distribuzione Gentoo Linux è stata per lungo tempo considerata la distribuzione ideale per gli utenti Linux piu esperti, anche per via della sua fama di distribuzione “difficile da installare”. Il sistema di installazione basato sul gestore di pacchetti “Portage”, che si caratterizza per la scelta di compilare ogni singolo pacchetto direttamente sul computer dell’utente (ottimizzandone cosi le prestazioni), potrebbe lasciare un po spaesati gli utenti meno esperti, oltre che richiedere diverse ore affinchè il processo abbia termine. Con il passare del tempo però, la distribuzione è andata man mano semplificando questi passaggi, consentendo ad esempio di effettuare l’installazione a partire da pacchetti precompilati, per poi procedere alla compilazione dei singoli pacchetti al momento di aggiornarli, consentendo nel frattempo all’utente di cominciare ad utilizzare il sistema.

Gentoo resta comunque una distribuzione dedicata agli utenti piu esperti, nonostante la documentazione fornita dalla propria community sia presa d’esempio ancora oggi per moltissime altre distribuzioni in quanto a completezza e precisione. Proprio la community di Gentoo è stata per diversi anni il grande punto di forza di questa distribuzione, contribuendo a fornire supporto e ad includere nuovi applicativi tra quelli disponibili in “Portage”.

Negli ultimi anni però, Gentoo ha cominciato a perdere in quanto a diffusione, a discapito di altre distribuzioni dedicate agli utenti esperti già pre-ottimizzate per le piattaforme 686 che rendono poco vantaggioso il lungo processo di compilazine del software direttamente sul proprio computer. Inoltre da quando nell’aprile 2004 Robbins lasciò la guida “dittatoriale” della distribuzione per passare a lavorare per Microsoft, lasciando quindi nelle mani della Gentoo Foundation la direzione del progetto, la distribuzione ha risentito della mancanza di una guida univoca, subendo i numerosi conflitti incorsi tra i diversi esponenti della comunità, contribuendo cosi al suo declino.

Ancora oggi, in ogni caso, Gentoo è utilizzata da numerosissimi utenti, e la comunità intera del software libero attende di vedere se la distribuzione sarà in grado di risorgere dalle proprie ceneri, ponendo fine alla brutta situazione venutasi a creare negli ultimi anni, o semplicemente subirà il proprio declino fino a diventare un mero insieme di progetti a se stanti derivanti da una radice comune.

10 motivi per scegliere GNU/Linux

Questo articolo è stato pubblicato sul numero di Maggio 2007 di PcWorld

Un nuovo modo di vedere il mondo dell’informatica

Da quando, nel lontano 1984, Richard Stallman decise di mettere in piedi il progetto GNU, con l’ambizioso obiettivo di creare un sistema operativo simile a Unix ma completamente libero, l’idea del software libero e dell’opensource sono andate sempre piu rapidamente diffondendosi.

Oggi allo sviluppo di GNU/Linux (il sistema operativo opensource per antonomasia, benchè non sia affatto l’unico disponibile) contribuiscono materialmente ed economicamente anche grandi imprese del calibro di IBM, Sun, Novell, HP, Nokia, Siemens. Molte di queste imprese sovvenzionano economicamente lo sviluppo di Linux e degli altri software che compongono poi il sistema operativo completo, altre assumono team di sviluppatori o rilasciano sotto licenze libere alla comunità del “free software” alcuni loro applicativi, anche di notevole interesse commerciale (è il caso di Eclipse di IBM, o Java, OpenSolaris ed OpenOffice.org di Sun).

1. Libertà in tutte le salse

I meccanismi economici che stanno dietro a tutta questa libertà, sfuggono a molti utenti finali, che si chiedono come possa un software di qualità essere distribuito gratuitamente. L’intento di questo articolo non è quello di approfondire questo aspetto (anche perchè è già stato approfonditamente discusso ed esposto piu di una volta), ma trattandosi di una delle peculiarità principali di GNU/Linux, dalla quale spesso e volentieri discendono le altre, è utile spendervi due parole.

Innanzi tutto va detto che il software non è sempre stato proprietario, ne tanto meno a pagamento. In principio, il software era solo uno “strumento” tramite la quale sfruttare le potenzialità offerte dagli elaboratori, che erano la parte centrale del business dell’informatica. Con la diffusione dei computer “domestici” (i cosi detti Personal Computer), si è però aperto un nuovo mercato, immediatamente colonizzato da una serie di aziende (piu o meno grandi) che fanno della produzione di software il proprio business. Il meccanismo economico che sta dietro questo procedimento, è quello prettamente industriale: viene assunto un team di sviluppatori, che si occupano di scrivere software, il quale viene poi “inscatolato”, impacchettato e venduto sugli scaffali di centri commerciali, negozi di informatica, e via dicendo. Lo stesso modello economico che sta dietro alla produzione della carne in scatola o del dado di brodo, con la differenza che trattandosi di oggetti non materiali, facilmente duplicabili, l’azienda produttrice si riserva la proprietà del prodotto, concedendone l’uso “in licenza” all’utente finale (un po come se si trattasse di un contratto d’affitto).

Nel mondo dell’opensource invece, le cose sono leggermente differenti. Il software non viene piu visto come un prodotto, ma come il mezzo tramite il quale vendere un servizio, o delle competenze. Un’azienda che usa il modello opensource come fonte di business, non si fa pagare concedendo in licenza gli applicativi che produce, ma si fa pagare l’assistenza che vi fornisce, eventuali personalizzazioni che i clienti possono richiedere, il tempo-uomo dedicato alla scrittura di applicativi su commissione, e cosi via. Gli utenti sono, in questo modo, pienamente padroni del software che hanno acquistato, commissionato, o scaricato: le modalità di distribuzione del software libero infatti (ed in particolar modo quelli che utilizzano la licenza GPL), prevedono che questo sia corredato del proprio codice sorgente (quel codice a partire dal quale è possibile “generare” l’applicativo vero e proprio). Avendo a disposizione il codice sorgente, l’utente ne è padrone: può modificarlo, distribuirlo a sua volta, studiarlo, o persino rivolgersi ad un concorrente dell’azienda che lo ha prodotto per chiedere loro delle modifiche o delle personalizzazioni.

2. Ricerca della qualità (a basso costo)

Dall’adozione del modello di business del software libero, e dalle libertà in questo modo introdotte, deriva un secondo, importante vantaggio per l’utente finale (ma non solo): se un’azienda che lavora rilasciando sotto licenze libere vuole restare in vita, non potendo applicare politiche di “lock-in” del cliente (legandolo a se stessa tramite il vincolo del software proprietario, “è mio quindi devi chiedere a me”), deve necessariamente perseguire la qualità del software stesso, in modo che il cliente soddisfatto non si rivolta alla “concorrenza”.

Inoltre, lo sviluppo del software stesso procede piu speditamente e con basi piu solide. Non è infatti necessario riscrivere ogni volta tutto il software. Ogni entità coinvolta nello sviluppo di software libero (sia essa un’azienda, un programmatore indipendente o lo stesso utente finale), potrà attingere liberamente a tutto il software libero disponibile “sul mercato”, modificarlo secondo le proprie esigenze, e contribuire al meccanismo mettendo le proprie modifiche a disposizione di tutte le altre entità. In questo modo, si riducono gli investimenti necessari a creare software di qualità, lavorando in modo corale, distribuito e condiviso. Spesso e volentieri, questo porta all’eliminare quasi del tutto il concetto di concorrenza, o per lo meno a vederlo profondamente mutato.

Il tutto, in ogni buon conto, a beneficio dell’utente finale, che potrà giovarsi di software di qualità (bisogna naturalmente precisare che non tutto il software libero è software di qualità, naturalmente), a costi ridottissimi (spesso e volentieri, gratuitamente).

Il fatto stesso che un utente possa, una volta ottenuta una copia del software, regalarla (in quanto sua proprietà), impedisce di fatto di apporre un prezzo di vendita al software in quanto tale. Che senso avrebbe infatti vendere un software che gli utenti posso liberamente scambiarsi gratuitamente senza infrangere la legge?

3. Sicurezza

Contestualmente al miglioramento della qualità del software, il modello di sviluppo opensource (se ben applicato), porta anche ad un incremento della sicurezza del software (questo non vuol certo dire che tutto il software libero sia software sicuro, esattamente come non vuol dire che sia software di qualità). Un ulteriore incremento alla sicurezza dei software liberi però, deriva direttamente dalle modalità con cui la comunità si fa carico del loro sviluppo. Visto che lo sviluppo è spesso e volentieri distribuito (tanto quanto lo è il codice sorgente e la voglia di fare dei coloro che contribuiscono), ci sono moltissimi occhi contemporanemante puntati sul codice, alla ricerca (anche) di eventuali problemi che vengono cosi risolti in breve tempo. Anche a fronte della scoperta di un bug particolarmente pericoloso, tramite un lavoro coordinato e distribuito, è possibile ottenere la soluzione del problema nell’arco di pochi giorni. Anche nel caso in cui il gruppo di sviluppo di un determinato applicativo non reagisse nei tempi desiderati, avendo a disposizione il codice sorgente, l’utente potrà sempre provvedere in prima persona ad individuare e corregge i bug, oppure piu banalmente ad affidarne individuazione e correzione alla propria azienda informatica di fiducia.

Nel mondo del software proprietario, gli occhi che possono essere puntati sul codice sono numericamente inferiori (anche perchè spesso e volentieri dedicare attenzioni alla ricerca di bug nel codice significa stornare forze al lavoro di sviluppo di nuovi applicativi), e questo pregiudica la rapidità d’intervento, giugendo a volte a risolvere i problemi solo dopo alcuni mesi durante i quali gli utenti rimangono esposti agli attacchi provenienti dalla rete, sempre piu presente e pervasiva.

Non è un mistero ormai per nessuno che determinate insidie legate alla sicurezza informatica, quali virus, spyware, e dialer siano peculiarità dei soli sistemi basati su Microsoft Windows. Questo è dovuto ad una lunga serie di ragioni, tra le quali troviamo sicuramente la maggior diffusione dei citati sistemi, ma anche una serie di brutte abitudini che gli utenti di Windows hanno e che sugli altri sistemi operativi vengono limitate già a livello di progettazione del software.

L’accesso al sistema tramite l’utilizzo di un utente “amministratore” (colui in pratica che può modificare la configurazione del sistema operativo, installare nuovi applicativi o rimuoverne altri) viene proposta come default al momento dell’installazione di un sistema operativo Microsoft Windows. Questo fa si che gli utenti piu sfaticati si limitino ad utilizzare il sistema cosi configurato, esponendolo all’attacco di numerosi malware e virus, che potranno sfruttare i pieni poteri dell’utente per riprodursi sul sistema ed in rete. In piu, molte aziende produttrici di software finiscono con il dare per scontato che gli utenti vantino privilegi inutili (non serve infatti avere tutti questi privilegi per le operazioni comuni quali leggere la posta, elaborare o riprodurre documenti, navigare il Web…), con la conseguenza che spesso e volentieri una serie di applicazioni “non girano” (non possono essere utilizzate) senza questi privilegi.

Su quasi tutti gli altri sistemi operativi (e naturalmente su GNU/Linux), la suddivisione dei privilegi degli utenti vengono imposte in maniera molto piu forte. L’installazione stessa di praticamente tutte le distribuzioni GNU/Linux imposta due utenti, un amministratore (che non verrà utilizzato se non per eseguire le operazioni di configurazione e/o aggiornamento del sistema) ed un utente non privilegiato, che potrà essere utilizzato per le operazioni quotidiane. Questo semplice espediente riduce sensibilmente i rischi a cui il sistema è esposto. Anche grazie a ciò, alla prova dei fatti, su GNU/Linux il problema dei virus, degli spyware e dei dialer non esiste. Semplicemente non si installano ne riproducono. Naturalmente si paga questa sicurezza con alcuni piccoli fastidi (ad esempio il dover inserire la password dell’utente amministratore quando si vuole installare un nuovo applicativo), che però sono tutto sommato accettabili se paragonati ai ben piu importanti fastidi che possono portare i malware.

4. Compatibilità oggi e domani

Abbiamo già parlato, qualche paragrafo piu indietro, del modello di business del software proprietario, che vede il software come un prodotto da vendere in quanto tale, impacchettato ed inscatolato. Oltre alla mancanza di libertà che questo comporta, non concedendo all’utente la proprietà del software acquistato ma solo una licenza d’uso, ci sono un altro paio di aspetti che derivano da questa scelta commerciale, e che probabilmente toccano gli utenti molto piu profondamente di quanto normalmente non si pensi. Il primo dei due problemi, è quello della compatibilità con gli standard.

Per difendere i propri applicativi dalla concorrenza, questo genere di aziende utilizza formati chiusi e protetti da “proprietà intellettuale” (che brutta parola… sembra quasi che qualcuno possa essere padrone di un’idea…), detti “formati proprietari”, che possono essere utilizzati solo a fronte del pagamento di una royalty in moltissimi stati (tra i quali, per fortuna, non quelli dell’Unione Europea, anche se lo scorso anno una lobby di aziende ha cercato di spingere affinchè questa possibilità venisse introdotta anche in Europa). Oltretutto è severamente vietata l’analisi del software (detta “reverse engineering”) per estrapolarne il formato dei dati in modo da consentire la realizzazione di applicazioni che gestiscano questi formati.

Grazie all’utilizzo di formati proprietari, di fatto, le aziende che producono software proprietario legano ai propri applicativi gli utenti. Se infatti volete aprire un file di AutoCad (noto applicativo proprietario per il disegno CAD), non potrete farlo a meno di usare quello stesso applicativo che l’ha prodotto. Per di piu, questo “legame” viene sfruttato senza esitazione per portare gli utenti nella condizione di dover necessariamente aggiornare il software: andando a cambiare il formato documentale con le nuove versioni del software (come sta facendo Microsoft con l’introduzione del nuovo formato OpenXML in Office 2007), le aziende fanno si che questi si diffondano, costringendo tutti ad aggiornare il software alla versione piu recente, per poter cosi leggere questo nuovo formato documentale, man mano che si diffonde.

Nel mondo del software libero, questo problema non si pone nemmeno. Non c’è infatti alcuna azienda che debba legare a se gli utenti al fine di continuare a vendere il proprio software. Anzi, al contrario, il rispetto degli standard è segno di qualità ed affidabilità di un’applicazione. Visto che la ISO (International Standard Organization) prevede formati per le diverse tipologie di applicazioni, compreso uno standard documentale semplice e funzionale come ODF (implementato nativamente da OpenOffice.org), la comunità del software libero utilizza questi formati per la produzione di documenti, anche se poi i diversi applicativi (OpenOffice.org compreso) sono in grado di leggere e/o riprodurre anche formati proprietari (probabilmente con l’espediente di fare “reverse engineering” per scoprirne la struttura in quegli stati che consentono di farlo).

5. Durata nel tempo

Il secondo aspetto legato alla scelta del modello di business del software proprietario è quello della cosi detta “Obsolescenza programmata”. Si tratta della strategia commerciale che porta una determinata tecnologia (sia essa hardware o software) ad essere sostituita (e quindi resa obsoleta) da una nuova versione dopo un periodo predefinito di tempo. Questo è fondamentale per un’azienda che basa la sua esistenza sui profitti derivanti dalle vendite del proprio prodotto, ma non lo è assolutamente per la comunità del software libero.

Ecco allora che mentre le grandi multinazionali del software non prevedono il supporto per vecchi formati documentali dopo 2 o 3 versioni di uno stesso applicativo (costringendo l’utente ad acquistarne una nuova versione), OpenOffice.org è in grado ancora oggi di leggere (e scrivere) documenti “.doc” di Word 6.0 o Word 95. Spesso addirittura viene utilizzato proprio per recuperare vecchi documenti che le versioni commerciali di molte suite per l’ufficio non sono piu in grado di leggere.

Inoltre, proprio l’implementazione degli standard di cui parlavamo al paragrafo precedente, insieme alla disponibilità del codice sorgente, consentono di poter garantire all’utente finale che i documenti salvati in questi formati saranno sempre leggibili. Anche quando, infatti, nessuno supportasse piu quel formato, la disponibilità dello standard (formato teorico) e del codice sorgente (tecnologia implementativa) consentirebbe all’utente finale di affidare alle esperte mani di un programmatore la realizzazione di un programma che, gestendo quel formato, gli consenta di accedere ai dati contenuti nel suo documento.

Questo aspetto è particolarmente importante per la Pubblica Amministrazione. Dovendo infatti gestire dati di altissima importanza (pensiamo soltanto agli archivi dell’anagrafe) per periodi particolarmente lunghi, si devono dotare di formati documentali per i quali sia garantito l’accesso a tempo indefinito, e non vincolandosi ad una specifica azienda. Proprio in quest’ottica, negli ultimi anni si è assistito ad un progressivo aumento d’interesse nei confronti dell’OpenSource da parte della Pubblica Amministrazione (Italiana e non), che ha in piu casi sfociato nella massiccia adozione di software opensource (ed in particolar modo della suite per l’ufficio OpenOffice.org).

L’aspetto dell’obsolescenza programmata, naturalmente, si applica anche all’hardware. Chi sviluppa software proprietario non ha interesse a fornire versioni “alleggerite” in grado di supportare hardware non recentissimo. E questo non solo in un’ottica di accordi con i produttori di hardware: semplicemente sviluppare una versione in grado di supportare configurazioni hardware particolarmente datate stornerebbe forze che sarebbe invece possibile dedicare allo sviluppo di nuove applicazioni, e pertanto viene fornita una compatibilità hardware “all’indietro” di pochi anni. Questo si è palesato in particolar modo con la recente uscita di Windows Vista: le “avanzate” caratteristiche di questo sistema operativo, fanno si che richieda importanti risorse hardware (non dissimili da quelle di Windows XP, sicuramente, ma non è un buon esempio di sistema operativo che giri su macchine datate), costringendo alcuni utenti a dover cambiare il proprio computer per poter utilizzare il nuovo sistema.

Anche GNU/Linux può naturalmente arrivare a necessitare di risorse hardware particolarmente importanti (a seconda di quello che l’utente deve fare con il sistema: se volete fare montaggio audio/video avrete bisogno di tanta memoria RAM e un ottimo processore, non ci sono santi che tengano), ma essendo completamente OpenSource, quindi modificabile e ridistribuibile, ne esistono una numerosa serie di versioni che sono espressamente concepite per funzionare con sistemi non particolarmente recenti. Bisognerà naturalmente rinunciare a qualcosa (grafica tridimensionale con finestre che si infiammano o cose simili), ma il sistema operativo sarà lo stesso funzionante, oggi, domani e anche piu in la, finchè non riterrete (voi!) sia passato sufficiente tempo da giustificare l’acquisto di un nuovo computer.

6. Perfomance

Su quella che è la mera comparazione sulle performance a parità di applicazione tra i diversi sistemi operativi, troviamo in rete una serie infinta di benchmark (comparazioni prestazionali delle elaborazioni), ognuno dei quali proclama la superiorità di un sistema operativo o di un altro a seconda del commitente del benchmark stesso.

Ci sono però una serie di cose che si possono comunque dire, senza il rischio di ricadere in inutili campanilismi. Linux gestisce in maniera estremamente efficiente la memoria RAM del sistema, ha una lunga lista di filesystem molto interessanti (e praticamente tutti introducono meccanismi che evitano all’origine la frammentazione che tante noie da agli utenti di Windows) e sfrutta tutte le potenzialità che i moderni processori offrono. Questo è dovuto essenzialmente al fatto che le persone che sviluppano GNU/Linux sono le stesse che alla fin fine lo usano nel quotidiano, e che, non essendoci attese di mesi o anni tra una release e l’altra, otterremo le migliorie che queste persone introducono entro brevissimo tempo (diciamo qualche settimana).

Avendo infine la possibilità di ricompilare (rigenerare a partire dal codice sorgente) interamente il sistema operativo, esiste sempre la possibilità di farlo ottimizzando al massimo il software per il proprio computer, sfruttandone tutte quelle caratteristiche non standard che potrebbero però riversi utili in un’ottica di miglioramento prestazionale. Questo è possibile installando particolari distribuzioni (come ArchLinux) che sono già compilate in oridine per processori 686 (ed eliminano quindi una serie di compatibilità con hardware ormai datato che portano ad un appesantimento del sistema), oppure altre (come Gentoo) che consentono di compilare da zero tutto il sistema operativo adattandolo al proprio computer (che potrebbe essere, perchè no, anche un sistema molto datato e quindi mal supportato dalle distribuzioni piu recenti).

Il modo migliore per verificare il livello di performance di Linux, ad ogni modo, è sicuramente quello di metterci le mani sopra e provarlo. Una volta che vi sarete procurati, contattando ad esempio il LUG (Linux User Group, di cui parleremo tra qualche paragrafo) della vostra zona, una copia di quelli che vengono chiamati “live-CD” (versioni di GNU/Linux che possono essere usate senza essere installate), sarà sufficiente provarlo per scoprire le performance che Linux mette a vostra disposizione, tenendo tra l’altro a mente che una volta installato sarà ancora piu veloce, in quanto andrete ad eliminare la latenza legata alla necessità di leggere tutto il sistema da una periferica estremamente lenta come il lettore CD/DVD.

7. Varietà di scelta

Abbiamo piu volte citato, nei paragrafi precedenti, l’esistenza di diverse distribuzioni di GNU/Linux. Proprio la possibilità di modificare e ridistribuire senza oneri il software, rende possibile la nascita di numerorissime versioni di GNU/Linux, ognuna specificamente pensata per un ambito. Esistono allora distribuzioni pensate per la scuola (eduKnoppix, edUbuntu, SodiLinux), altre per incrementare le performance (ArchLinux, Gentoo), altre per essere particolarmente semplici da usare e gestire (Fedora Core, Ubuntu, Mandriva, OpenSuse), e cosi via. Potremmo proseguire elencando una lunghissima lista di diverse distribuzioni. DistroWatch (il sito di riferimento per quel che riguarda la cernita delle distribuzioni GNU/Linux esistenti) ne censisce oltre 350 diverse.

Lo stesso discorso vale per gli applicativi software: su GNU/Linux potrete scegliere tra una quantità inimmaginabile di editor di testo (tanto che potrebbe sembrare che i programmatori di GNU/Linux non facciano altro che modificare file a suon di editor di testo), numerosissimi browser (testuali e grafici), programmi per gestire la posta elettronica, suite per l’ufficio… GNU/Linux viene abitualmente utilizzato per tutti gli aspetti della vita “informatica” da moltissimi utenti in tutto il mondo, e per ogni tipologia di applicativo che potete immaginare, ne esiste almeno un equivalente nel mondo di GNU/Linux.

8. Legalità

Non è da sottovalutare poi, l’aspetto legale legato all’uso delle licenze. Tutti noi sappiamo che copiare software, la dove non espressamente consentito dalla licenza d’uso (come invece capita per il software libero con la licenza GPL) è un reato. Negli ultimi anni abbiamo assistito (fortunatamente, lasciatemelo dire) ad una sempre maggior attenzione verso questo aspetto da parte delle autorità competenti. Molti utenti però, continuano a scaricare dal circuto peer-to-peer i programmi di cui hanno bisogno, e ad installarli, in barba a qualsiasi licenza, spesso e volentieri finendo con il cercare “crack” su siti piuttosto equivoci e sicuramente non ben intenzionati nei confronti del vostro computer (vi ricordo che i malware vengono scritti e diffusi proprio da quei pirati informatici che a volte scrivono le “crack” che vi consentono di utilizzare software proprietario in barba alla relativa licenza d’uso). I pericoli che questa pratica comporta potete tranquillamente immaginarli.

Ma perchè andare ad imbarcarsi in avventure pericolose quando esiste software di qualità che fa esattamente tutto quello di cui avete bisogno, che potete scaricare gratuitamente e liberamente dalla rete, nel pieno rispetto della legge?

La licenza GPL, che ci consente di farlo, si basa proprio sulle leggi che regolamentano il diritto d’autore, facendo si che sia il programmatore stesso che ha scritto il software a ”consegnarvi” quei diritti fondamentali che vi consentono di modificare e ridistribuire il software.

Questa è una lacuna che il software proprietario non potrà mai colmare. Potranno forse regalarvi il software, facendo in modo che la sua diffusione lo porti a diventare uno standard de facto per poi vendere altri prodotti sfruttando il monopolio cosi ottenuto, ma non potranno mai regalarvi il codice sorgente del software, perchè equivarrebbe a rinunciare ai profitti che questo può generare.

La licenza GPL tra l’altro, spaventa notevolmente alcune aziende produttrici di software proprietario. Negli ultimi anni, proprio questa paura, a portato a spingere un’azienda americana (SCO) che gestiva una distribuzione GNU/Linux (Caldera) e detiene in licenza parte dei diritti dello Unix proprietario a intentare una causa legale contro le aziende che spingono lo sviluppo di GNU/Linux (ed in particolar modo IBM) dichiarando che all’interno del sorgente di Linux vi erano spezzoni di codice su cui SCO detiene la proprietà intellettuale. La causa, intentata con l’evidente scopo di diffondere dubbi e paura sull’uso di Linux (anche perchè SCO stessa aveva fino ad allora distribuito la propria distribuzione GNU/Linux sotto licenza GPL, rinunciando quindi, di fatto, a qualsiasi diritto non previsto da questa licenza su quel software), ha recentemente vissuto una svolta definitiva: il codice su cui SCO può effettivamente detenere un qualche tipo di “proprietà intellettuale” ammonta alla bellezza di meno di 400 righe (tra l’altro piuttosto insignificanti, essendo costituite essenzialmente da commenti e cose simili), mentre la stessa SCO viola la “proprietà intellettuale” di IBM sul codice di Unix per un ammontare di 70.000 righe di codice. La causa è comunque servita a portare in un’aula giudiziaria la licenza GPL, mettendone alla prova la validità giuridica e rafforzandola.

9. Supporto condiviso e diffuso

Uno dei pregi sicuramente piu importanti di GNU/Linux, non si trova nella sua implementazione informatica, ma nei meccanismi socio-culturali che questa libertà di collaborazione innesca. Proprio quei meccanismi di gestione dello sviluppo del software che ne consentono la condivisione su larga scala geografica (i programmatori che lavorano sul kernel Linux non si trovano nella stessa stanza in un singolo edificio, ma sparsi per tutto il mondo e, anche con fusi orari diversi, collaborano avvalendosi di strumenti quali le mailing-lists, i software di bug-tracking o di sincronizzazione concorrente del codice) fanno si che l’interazione tra gli utenti e gli stessi sviluppatori sia molto piu informale e diretto.

Tramite questo meccanismo di condivisione, è l’utente stesso ad attivarsi in prima persona al fine di ottenere la risoluzione di un bug. Anche se non ha le competenze per ritoccare il codice sorgente in prima persona, potrà però raccogliere, sotto la guida degli sviluppatori stessi del codice, tutte quelle informazioni che consentono allo sviluppatori di isolare e correggere piu rapidamente il problema segnalato.

Tramite poi la vastissima community in rete (costituita da migliaia di forum, mailing-lists tematiche e gruppi di discussione), l’utente ha la possibilità di cercare (e spesso e volentieri trovare molto rapidamente) informazioni riguardo alle problematiche che riscontra, magari soluzioni trovate da persone che hanno riscontrato in precedenza gli stessi problemi e che hanno poi condiviso la propria esperienza e la soluzione trovata.

A tutte quelle risorse che abbiamo visto essere disponibili “in rete”, si affica poi il quotidiano lavoro dei LUG sul territorio. I LUG (Linux user Group) sono gruppi di appassionati di Linux, con competenze molto variabili (si va dall’utente che si è appena avvicinato al mondo di Linux ed è a caccia di informazioni alla persona professionalmente preparata), si incontrano sistematicamente per discutere delle problematiche legate all’uso GNU/Linux, organizzare corsi di formazione o eventi di scala nazionale quale il “Linux Day” che viene organizzato ogni anno in autunno da tutti i LUG Italiani. La diffusione dei LUG sul territorio è capillare: tramite il sito web http://www.linux.it/LUG/ è possibile cercare il LUG piu vicino a voi.

10. Portabilità del software

Ultima, per ordine ma non per importanza, tra le peculiarità di GNU/Linux che affrontiamo, è la sua portabilità. GNU/Linux supporta infatti una quantità davvero notevole di piattaforme: può essere lanciato ed installato su sistemi equipaggiati da processori Intel, sia 32 che 64 bit (quindi sui pc che trovate al supermercato come sui nuovi portatili Apple), PPC (quindi sui computer Apple precedenti al passaggio all’architettura Intel), Sparc, ARM (ci sono una lunga serie di cellulari e palmari che vengono forniti con versioni di GNU/Linux) e via dicendo, con una lunga lista di piattaforme differenti. Le varie distribuzioni poi, selezionano alcune piattaforme particolari (solitamente Intel e PPC) sulle quali dedicare il loro lavoro, fornendo il sistema già precompilato per quell’architettura.

Lo stesso discorso, vale anche per le applicazioni OpenSource che scritte per GNU/Linux. Ancora una volta la disponibilità del codice sorgente fa si che ogni applicativo possa essere modificato in modo da poter funzionare su sistemi operativi differenti, e poi liberamente distribuito. Ecco allora che possiamo trovare Mozilla Firefox per Microsoft Windows e per MacOSX, cosi come OpenOffice.org, il client di posta Thunderbird, o ancora la suite di sviluppo software gcc e l’IDE Eclipse rilasciata da IBM con licenza libera alcuni anni fa.

Che aspettate a provarlo?

Board arduino su ArchLinux 0.7.1

Preparazione della macchina

Dopo aver acquistato un Arduino (http://www.arduino.cc/), saranno necessari una serie di software, al fine di programmarlo.

Le dipendenze fondamentali sono:

* binutils-avr [ unsupported, lo trovate su http://aur.archlinux.org ]
* gcc-avr [ unsupported, lo trovate su http://aur.archlinux.org ]
* avr-libc [ unsupported, lo trovate su http://aur.archlinux.org ]
* uisp [ unsupported, lo trovate su http://aur.archlinux.org ]
* jikes [ “pacman -S jikes” (e relative dipendenze) ]
* subversion [ “pacman -S subversion” (e relative dipendenze ]

L’installazione di software da file PKGBUILD è banale:
si crea una cartella dedicata alla compilazione (tanto per stare puliti).

$ mkdir makedir && cd makedir

Vi si scarica dentro il tarball con tutti i files necessari

$ wget http://aur.archlinux.org/packages/binutils-avr/binutils-avr.tar.gz

Si estrae quanto scaricato:

$ tar -xzf binutils-avr.tar.gz && cd binutils-avr

Si lancia la compilazione:

$ makepkg

Attenzione, i pacchetti vanno compilati rispettando le dipendenze, quindi nell’ordine in cui sono scritti sopra: prima “binutils-avr”, poi “gcc-avr”, poi “avr-libc”, infine “uisp”. Le dipendenze le potete trovare aprendo con un editor di testo il file PKGBUILD, dove, alla voce “dependencies”, trovate l’elenco dei pacchetti necessari.

Nota: al fine di poter compilare correttamente gcc-avr, sarà necessario dare prima il comando:

$ export PATH=$PATH:/opt/avr/bin/

e dopo essersi autenticati come ‘root’

# rm /opt/avr/lib/libiberty.a

Compiliamo l’IDE

Una volta installati questi software, effettuando le operazioni di qui sopra per ognuno di loro, bisogna scaricare il software utilizzato per programmare il nostro hardware.

Alla pagina https://developer.berlios.de/svn/?group_id=3590 si scopre l’unica cosa da fare è la seguente:

$ svn checkout svn://svn.berlios.de/arduino/trunk

A questo punto, terminata l’esecuzione del comando, ci troveremo una cartella trunk, all’interno della quale si trova tutto il software.

Passiamo alla compilazione, quindi, di quanto scaricato. Dal forum di Arduino (per la precisione all’indirizzo http://arduino.berlios.de/cgi-bin/yabb/YaBB.cgi?board=swtrouble;action=display;num=1129025529″ ), si scopre che ci sono un paio di cosucce da fare:

$ export CLASSPATH=$CLASSPATH:/opt/java/jre/bin/:/opt/java/jre/lib/rt.jar

e

$ export DIRAVR=/opt/avr

Dopodichè, ci spostiamo nella cartella dove troveremo il sorgente:

$ cd trunk/build/linux/

E diamo avvio alla compilazione:

$ ./make.sh

Dopo una serie di permission denied (su cosa e perchè, lo sa solo make.sh), ci verrà chiesto se vogliamo rinominare tutta una serie di files. Rispondiamo “y” a tutte, e alla fine partirà la compilazione, per terminare con un “Done”.

Per poter compilare i programmi che scriveremo, avremo bisogno di un altro passo. Al momento, la IDE di Arduino (quella che abbiamo compilato), cerca avr-gcc nella cartella work/tools/avr/bin. Dopo esserci posizionati nella cartella che contiene make.sh e run.sh, faremo quindi:

$ mkdir -p work/tools/avr/ && cd work/tools/avr/ && ln -s /opt/avr/bin bin

A questo punto, lanciamo semplicemente quanto compilato, con un banale

$ ./run.sh

Apparirà la nostra tanto attesa IDE.

Configuriamo l’ambiente

Per poter esportare i nostri programmi sull’hardware, sarà necessario eseguire due operazioni:

* 1) Per chi usa un kernel linux 2.6.*, compilare e caricare il modulo ftdi_sio (experimental)
* 2) Modificare il file ~/.arduino/preferences.txt in modo da indicare la corretta device sulla quale trasferire. Di default è “COM1”, e quella che viene solitamente utilizzata se usate un Arduino USB, è /dev/tts/USB0.

Ora tutto dovrebbe funzionare correttamente. Happy Hacking 😉

TCP/IP: introduzione al networking

Abbiamo visto un po di settimane fa, come funzionano i protocolli dello stack TCP/IP. Abbiamo visto che cosa sia un indirizzo IP, e abbiamo dato una sbirciata a come dialoghino le macchine tra di loro, sfruttando il TCP, mentre spiegavamo del baco recentemente riaperto in questo protocollo fondamentale.

Abbiamo anche visto come tante macchine, connesse alla stessa rete, sono in grado di dialogare tra di loro, scambiandosi pacchetti tramite l’uso di una macchina in comune, che funge da nodo centrale della rete che abbiamo preso in considerazione (puo essere un hub, uno switch o un router, poco importa).

Ora prendiamo in considerazione la domanda seguente: “Come possono dialogare macchine che risiedono su reti fisiche differenti?”, e cerchiamo di dargli una risposta.

Per prima cosa, per far dialogare insieme macchine su reti differenti, bisognerà che queste due reti siano connesse in qualche modo, fisicamente. La necessità di collegare tra di loro reti anche molto diverse (ad esempio, una rete ethernet, una wireless e una token-ring), ha dato origine all’Internetworking. Le connessioni tra le varie reti si creano allacciando tra di loro tra loro macchine che appartengono alle singole reti che vogliamo connettere. Si creerà in questo modo una rete piu grande, e le varie reti piccoline che abbiamo connesso, si potranno chiamare “sotto-reti”, in quanto sottogruppi di una rete piu grande.

I punti di connessione tra le varie sottoreti, sono chiamati “gateway”, o “router” e sono delle macchine che hanno il compito (spesso non solo questo) di gestire i pacchetti dalla rete interna verso l’esterno, e viceversa. Dovranno quindi essere in grado di colloquiare sia con le macchine della propria rete, sia con i router delle altre sotto-reti che si vogliono collegare. E’ molto importante notare come gli HUB operino a livello fisico, o livello 1 (i singoli bit ricevuti su un’interfaccia vengono ritrasmessi su tutte le interfacce, gli SWITCH operano a livello 2 (mac address), e distinguono quindi a quale delle reti collegate alle proprie interfacce instradare il pacchetto ricevuto, e ancora i router lavorano a livello 3, reimplementando completamente i livelli sottostanti in base al solo indirizzo IP di destinazione. Con un router possiamo quindi connettere tra di loro reti completamente differenti tra loro, quali una rete ethernet e una rete wireless. Proviamo a riassumere la cosa con uno schemino:

   SOTTO-RETE 1                                    SOTTO-RETE 2

    [NodoA]---------+                                       +---------[NodoE]
                    |                                       |
                    [NodoB]---------------------------[NodoD]---------[NodoG]
                    |                                       |
    [NodoC]---------+                                       +---------[NodoF]

Nell’esempio che abbiamo sotto gli occhi, possiamo vedere una rete. Questa è formata da due sottoreti, la 1 e la 2. La sottorete 1 è composta da tre macchine: A, B e C. A e C sono client comuni, mentre B funge da gateway per la sottorete 2, che è composta da quattro macchine, D, E, F e G. D è il router di questa sottorete, in quanto connette piu reti, mentre E, G ed F sono macchine client comuni. Questa rete ci accompagnerà lungo tutto l’articolo, quindi stampatevela bene in mente 😉

Possiamo facimente immaginare, da quello che abbiamo visto finora, come i vari router, ed i loro collegamenti, costituiscano di per se una rete, che avrà quindi degli indirizzi IP assegnati. Ogni router avrà quindi due o piu interfacce, ad ognuna delle quali verrà assegnato un indirizzo IP univoco.

Iniziamo allora ad assegnare qualche indirizzo alle macchine (che d’ora in poi chiameremo con il loro nome corretto, ovvero HOST) delle due sottoreti. Prima di cominciare facciamo un breve ripasso su cos’è IP:

IP (o Internet Protocol) è quell’insieme di regole e convenzioni (un protocollo, per l’appunto) che consentono ai nostri pc di indirizzare i pacchetti alle macchine corrette. Ogni macchina connessa ad una rete (qualunque essa sia) che voglia trasmettere o ricevere dati, deve necessariamente avere un indirizzo IP, che la identifica univocamente all’interno della rete stessa. Un indirizzo IP è formato da 32 bit (un bit, è un 1 o uno 0), che vengono di solito raggruppati in 4 gruppi da 8 bit, e trasformati dalla forma binaria a quella decimale, per facilitarne la memorizzazione, ottenendo cosi un valore simile a “81.230.15.144”. Essendo ognuno degli ottetti un numero binario di 8bit, ogni campo dell’indirizzo in formato decimale non potrà avere un valore non compreso tra 0 e 255 (2^8=256, appunto i valori tra 0 e 255).
L’indirizzo viene poi comunemente suddiviso in due parti: la cosi detta Net-ID (indirizzo di rete) e la Host-ID (indirizzo di host). Questo per permettere una piu chiara visualizzazione delle reti: tutti gli host appartenenti alla stessa rete, avranno la stessa Net-ID.
Il processo di divisione tra host-id e net-id segue regole ben precise, che si chiamano “classi”: a seconda di quanti ottetti occupa il campo net-id, suddivideremo tutti gli indirizzi IP disponibili, in 5 classi:

* Classe A: comprende tutti gli indirizzi tra 0.0.0.0 e 127.255.255.255. La parte Net-ID occupa il primo ottetto, mentre la parte Host-ID i restanti 3. Le reti ottenute da questa classe sono poche (solo 127) la davvero gigantesche.
* Classe B: comprende tutti gli indirizzi tra 128.0.0.0 e 191.255.255.255. La parte Net-ID occupa i primi due ottetti, e la parte Host-ID gli altri due. Le reti ottenute da questa classe sono piu numerose, ma piu piccole di quelle di classe A.
* Classe C: comprende tutti gli indirizzi tra 192.0.0.0 e 223.255.255.255. Sono le reti piu piccole: la net-id è di 3 ottetti, mentre l’ultimo ottetto è occupato dall’host-id.
* Classe D: il multicast. Questa classe, che comprende gli indirizzi da 224.0.0.0 a 239.255.255.255, è riservata al multicast. La divisione tra host-id e net-id non c’è piu. Non tratteremo questa classe in questo articolo.
* Classe E: riservata per usi futuri. Questa ultima classe, che occupa la fascia di indirizzi tra 240.0.0.0 e 255.255.255.255, è stata lasciata inutilizzata prevedendo un suo utilizzo in futuro.

Alcune serie di indirizzi, appartenenti a ciascuna di queste classi, sono stati inoltre riservati per l’utilizzo nelle sottoreti provate. Queste serie di indirizzi sono la 10.0.0.08 (vedremo piu tardi cosa significa il 8 in coda), la 172.16.0.012 e la 192.168.0.016, nonchè la serie 127.0.0.08, che indirizza le interfaccia di loopback.
Questa suddivisione in classi, è ormai in disuso proprio grazie all’introduzione massiccia delle netmask di cui parliamo oggi.

Gli indirizzi ip che hanno la Host-ID contenenti soli “1”, sono gli indirizzi di broadcast. Un pacchetto inviato ad un indirizzo di broadcast viene ricevuto da tutti gli host connessi a quella rete. L’indirizzo di broadcast limitato (quello cioè che si riferisce a tutti gli host appartenenti alla sola sottorete su cui risiede il mittente del pacchetto) è 255.255.255.255. Un pacchetto inviato a questo indirizzo raggiungerà tutti gli host della rete fisica su cui risiede il mittente, ma non attraverserà nessun router. Per di piu, un indirizzo con la net-id composta di soli “0”, indica che il destinatario risiede sulla stessa rete fisica del mittente (se anche il campo host-id è composto da soli “0”, quindi 0.0.0.0, il pacchetto ha come desinatario il mittente stesso del pacchetto. Si usa quando la macchina non conosce il proprio indirizzo IP).
Gli indirizzi invece con Host-ID contenente soli “0”, sono indirizzi di rete (abbiate pazienza e vedremo anche questo).
Tutte queste eccezioni vanno al di la della mera spiegazione delle netmask che questo articolo si prefigge. Chi fosse interessato a saperne di piu, puo trovare informazioni molto dettagliate con una semplice ricerca su http://www.google.it.

E’ una buona consuetudine usare alcuni accorgimenti per facilitare il riconoscimento del tipo di macchina avendo il solo indirizzo IP. Questi accorgimenti sono assolutamente liberi. Possiamo ad esempio decidere di assegnare la serie 198.162.0.1-254 ai router, la serie 198.162.1.1-254 alle stampanti di rete, la serie 198.168.2.1-254 ai firewall, e cosi via (questo esempio non è per nulla ottimizzato, ma dovrebbe rendere l’idea. Torneremo sull’argomento piu avanti. Nel nostro esempio, ad ogni modo, abbiamo scelto di dividere gli indirizzi in due reti: 192.168.0.0 e 192.168.1.0, ed assegnare ai router il primo indirizzo di ognuna di queste due reti).

Cominciamo allora ad assegnare qualche indirizzo agli host del nostro esempio. Cominciamo con i due router.

+-------+---------------+
| Host  | Indirizzo IP  |
+-------+---------------+
| NodoB | 192.168.0.1   |
| NodoD | 192.168.1.1   |
+-------+---------------+

Procediamo poi assegnando indirizzi alle macchine host della sotto-rete 1:

+-------+---------------+
| Host  | Indirizzo IP  |
+-------+---------------+
| NodoA | 192.168.0.2   |
| NodoC | 192.168.0.3   |
+-------+---------------+

e a quelle della sotto-rete 2:

+-------+---------------+
| Host  | Indirizzo IP  |
+-------+---------------+
| NodoE	| 192.168.1.2   |
| NodoG	| 192.168.1.3   |
| NodoF | 192.168.1.4   |
+-------+---------------+

In questo momento, avendo un singolo indirizzo, possiamo facilmente intuire (noi netadmin coscenti) a quale rete appartenga una macchina, e quale sia la sua funzione. Se ad esempio inserissimo un’altra rete, e vi dicessi che ho assegnato ad una macchina l’indirizzo 192.168.2.1, sapreste dirmi se si tratta di un router o di un host? E il 192.168.2.9? Bravi, avete capito 🙂

Ora cominciamo ad introdurre il concetto di netmask (finalmente eh?). Come abbiamo visto qualche riga fa, la serie di indirizzi IP disponibili con i 32 bit di lunghezza dell’indirizzo, sono divise in 5 classi. Gli indirizzi di ciascuna delle tre classi che si possono utilizzare per il classico indirizzamento (non contiamo le multicast), hanno, come potete notare, grandi somiglianze tra di loro. Prendiamo ad esempio due indirizzi dalla classe B:

* 166.131.0.0
* 129.244.0.0

e prendiamone due dalla classe C:

* 200.168.232.0
* 191.175.123.0

Osserviamo ora le differenze tra gli indirizzi di classi diverse, e le somiglianze tra gli indirizzi della stessa classe. Gli indirizzi di reti di classe B hanno gli ultimi due ottetti (host-id? :)) uguali a “0”, mentre quelli di classe C hanno uguale a “0” solo l’ultimo ottetto (si, proprio l’host-id :P). Introduciamo quindi un valore che ci permetta di differenziare la classe di appartenenza: la netmask. Definiamo la netmask come un insieme di bit (sempre i nostri mitici 1 e 0) che indicano quali campi sono occupati dalla net-id, e quali invece dalla host-id; in particolare imposteremo a 1 la parte della net-id ed a 0 quella della host-id. Per chiarezza, traformiamo il nostro indirizzo 166.131.0.0 in binario. Mettiamo poi un 1 per ogni bit facente parte della net-id ad 1, e ogni bit della host-id a 0:

10100110.10000011.00000000.00000000
11111111.11111111.00000000.00000000

La sua netmark, varrà quindi in formato decimale 255.255.0.0. Che ci indica per l’appunto che i due primi ottetti sono occupati dalla net-id, e gli altri due dalla host-id.
Lo stesso discorso si farà con gli indirizzi di classe A (netmark 255.0.0.0), e di classe C (netmask 255.255.255.0)

Procediamo a passettini. Inseriamo le nostre netmask nel piano di indirizzamento che abbiamo fatto prima, e generalizziamo il tutto in un’unica tabella:

+-------+---------------+---------------+
| Host  | Indirizzo IP  | Netmask       |
+-------+---------------+---------------+
| NodoA | 192.168.0.2   | 255.255.255.0 |
| NodoB | 192.168.0.1   | 255.255.255.0 |
| NodoC | 192.168.0.3   | 255.255.255.0 |
| NodoD | 192.168.1.1   | 255.255.255.0 |
| NodoE	| 192.168.1.2   | 255.255.255.0 |
| NodoG	| 192.168.1.3   | 255.255.255.0 |
| NodoF | 192.168.1.4   | 255.255.255.0 |
+-------+---------------+---------------+

Osserviamo le reti cosi create: la sottorete 1 sarà caratterizzata dall’indirizzo 192.168.0.0 e netmask 255.255.255.0. Solo l’ultimo ottetto sarà quindi disponibile per gli host di questa rete, che saranno infatti 192.168.0.1,192.168.0.2,192.168.0.3, e cosi via. L’indirizzo di boroadcast della sottorete è naturalmente 192.168.0.255.
La seconda sottorete, allo stesso modo, avrà indirizzo 192.168.1.0 e netmask 255.255.255.0.

Facciamo ora un altro passettino in avanti: per rendere piu facile la notazione delle netmask, integriamo la loro dicitura all’interno dell’indirizzo ip, introducento il prefisso. Prendiamo ad esempio la netmask 255.255.0.0. Quanti 1 contiene? 16. Scriveremo allora in fondo all’indirizzo, un bel 16. Un esempio concreto? Riprendiamo la nostra sottorete 1: la sua netmask vale 255.255.255.0, che comprende 24 “1”. Il suo indirizzo sarà allora nulla piu che 192.168.0.024. Allo stesso modo, la sottorete 2 sarà 192.168.1.024.

Ennesimo passettino, questo un po piu grande di quelli precedenti. Partiamo dalla domanda: “Quanti host ha la nostra rete?”. Contiamoli, sono 7. Quanti indirizzi ci servono, quindi? Ovviamente 7, perchè utilizzarne piu di quanto necessario… eppure con la nostra suddivisione in reti abbiamo “requisito” ben 508 indirizzi! Non è molto efficente come scelta… certo utilizzando indirizzi destinati alle reti private ce lo possiamo ampiamente permettere, ma se dovessimo creare una rete con indirizzi pubblici? Con la scarsità (e il costo) degli indirizzi pubblici, direi che è meglio cercare un’ottimizzazione. Come fare? Semplice, mandiamo in pensione le classi, e teniamoci le nostre meravigliose netmasks. Rivelazione? Bene, già che siamo in vena di rivelazioni, vi faccio notare che lungo tutto l’articolo, per comodità, abbiamo presupposto di avere due sole reti. ma guardate bene: la linea che congiunge i due router non è forse anche quella una rete? Non ci sono forse due interfaccie? Sfatiamo il mito che ogni host ha un suo indirizzo IP, correggiamoci, e diciamo le cose come stanno: un indirizzo IP rappresenta una interfaccia di rete, e non un host. Il fatto che le nostre macchine di casa abbiano comunemente una sola interfaccia, non significa che tutte le macchine siano cosi. Lo dimostrano i router del nostro esempio, che hanno certamente ALMENO due interfaccie, e ognuna delle due avrà bisogno di un indirizzo. Dobbiamo quindi trovare il modo di indirizzare tre reti con il minor numero di indirizzi possibile (in nome della legge del dio denaro…).

Torniamo a osservare il nostro esempio: abbiamo 7 macchine e 3 reti, e a disposizione una bellissima 192.168.0.016. la prima rete, ha 3 host. La seconda, ne ha 4, la terza (quella dei due router) solo 2. Creiamo ora una netmask per ognuna di queste reti, cercando di minimizzare il numero di “0” (ovvero di host disponibili) alle nostre necessità.

Nel caso della rete 1, abbiamo bisogno di 3 indirizzi. Quanti bit servono per indirizzare 3 host? risposta: 3, infatti dovremo escludere i bit 00 e 11 (rete e broadcast) e quindi da due bit potremmo ricavare solo 01 e 10, che non ci bastano. Usiamo quindi 3 bit, 000 (rete), 001, 010, 011 (i tre host) e 111 (broadcast). Dai 32 bit, useremo quindi gli ultimi 3 (32-3=29), ottenendo cosi che la nostra prima rete avrà indirizzo 192.168.0.029, che comprenderà tutti gli indirizzi tra 192.168.0.0 e 192.168.0.7 (che saranno rispettivamente l’indirizzo di rete e il broadcast). Passiamo ora ad analizzare la seconda rete: 4 host, piu rete e broadcast, sono 6 indirizzi. Quanti bit? Sempre 3: infatti 2^2 fa 4 e non ci bastano, 2^3 fa 8, piu che sufficienti. L’indirizzo della seconda rete sarà quindi: 192.168.0.829. Il suo indirizzo di rete sarà 192.168.0.8, e il suo broadcast 192.168.0.15. Terminiamo quindi con la terza rete: 2 host, piu rete e broadcast, sono 4 indirizzi: 2^2=4, bastano 2 bit. Indirizzo di rete sarà quindi 192.168.0.1630. A voi il piacere di trovare il suo indirizzo di broadcast 🙂

Con questa ottimizzazione, abbiamo lasciato liberi tutti gli indirizzi della 192.168.0.1724, che non mi sembra proprio un brutto risultato 🙂

Il passo successivo a questo nostro discorso sulle broadcast, è senza dubbio l’instradamento e le tabelle di routing, ovvero come fanno i router a capire a quale rete è destinato un pacchetto, e su quale interfaccia instradarlo, ma questo è un argomento da trattare con la testa rilassata, e quindi ci concediamo una pausa. Happy hacking 🙂

Breve spiegazione della falla che affligge TCP e dei reali rischi.

Questo testo è estratto da un mio post su di un forum. Potrebbe contenere errori di concetto, di battitura, grammatica, sintassi HTML o altro. Se foste così; gentili da riportarli all’autore, sarebbe un atto di estrema gentilezza.

La falla di TCP di cui stiamo parlando, è nota da parecchio tempo. Darò una breve spiegazione di come funziona TCP per fare chiarezza a chi non conosce questo protocollo, prima di iniziare con la spiegazione della falla.

TCP, o Transmission Control Protocol, è un protocollo (un sistema di regole) che permette la connessione tra due host, che fa parte dello stack TCP/IP. Per la bontà del protocollo, e soprattutto dell’interoperabilità tra i vari protocolli dello stack, il TCP/IP è diventato lo standard DE FACTO di tutte le trasmissioni a commutazione di pacchetto. In sè, TCP è un protocollo orientato alla connessione. Per intenderci, è quell’insieme di regole che ci permettono di “connetterci” ad un server, e dialogare con lui utilizzando un protocollo di livello superiore (ad esempio HTTP, piuttosto che SMTP ecc ecc). Ora, non importa sapere come una connessione TCP ha inizio e come evolve, ma sicuramente questa è una buona occasione per impararlo no? Allora cominciamo: Abbiamo due host (sistemi) A e B, che vogliono comunicare tra di loro.

Per prima cosa, A invia a B un pacchetto con il flag SYN settato ad 1, e nel campo SN (serial number) un valore scelto a caso, che sarà l’origine da cui numerare i successivi pacchetti (e l’origine dei nostri guai). Questo permette di rendere univoco ogni pacchetto della connessione. B, ricevuto il pacchetto SYN, risponderà con un SYN/ACK (flags SYN e ACK settati ad 1) che contiene nei campi SN e AN, rispettivamente, il suo SEQ_NUM (sequence number, generato anche in questo caso randomly) e in AN il SEQ_NUM ricevuto da A, incrementato di 1. Il campo AN, per la cronaca, indica il prossimo pacchetto che l’host si aspetta di ricevere.

Quando A riceve il SYN/ACK, risponderà con un ACK finale (con flag ACK settato ad 1, non starò a ripeterlo per i pacchetti FIN e RST), con il campo SN = SEQ_NUM[A]+1 (che poi è l’AN ricevuto da B, in questo caso), AN = SEQ_NUM[B]+1 (A si aspetta di ricevere il pacchetto con quel numero di serie) e nel PDA (package data unit) cominceranno ad esserci i dati della connessione (segmenti).

Una volta terminato lo scambio di informazioni, quando si desidera chiudere la connessione, ci sono due modi. Uno “dolce”, e uno “violento”. Inutile dire che la disconnessione violenta avviene quando insorge un errore, mentre il “tear down” (disconnessione “dolce”) è la prassi. Come funziona il tear down. A (supponendo che sia lui a voler chiudere la connessione) manda a B un pacchetto FIN (bla bla bla… flag FIN=1… bla bla bla). B invia un ACK, e la connessione da A a B si chiude. Quando anche B ha finito di trasmettere, invia il suo FIN al quale A risponderà con un ACK finale. Allo scadere di un timeout, a questo punto, la connessione sarà chiusa.

Il metodo brusco invece, è dato dal flag RST. un po’ come il Reset del computer, questo pacchetto chiude immediatamente la connessione, ed è superfluo persino l’invio del solito ACK da parte dell’altro end-point della connessione. Questo,(molto) in breve, il funzionamento di una connessione TCP.

Veniamo ora ai guai del nostro beneamato trasmission protocol. Se un eventuale attaccante riesce a sostituirsi ad A durante la connessione, inviando un pacchetto di RST con i dati di A (ip address, port number e SN), questo chiuderà la connessione tra A e B. Ora, il SN è un valore di 32 bit, deciso casualmente durante la fase di SET-UP della connessione, e, variando velocemente, è molto difficile da scoprire e da duplicare, anche perchè TCP è congegnato per scartare i pacchetti doppi che gli giungono (doppio è il pacchetto con stesso SN). Si è quindi pensato, per molto tempo, che il problema fosse solo teorico, in quanto, in pratica, irrealizzabile. Tutto questo fino a quando Paul A. Watson non si è messo a studiare per bene le specifiche del protocollo e ha scoperto che i pacchetti di RST (e piu in generale gli altri pacchetti) non devono necessariamente avere il numero di SN esatto, ma devono ricadere in un certa “vicinanza” (la Window, o Finestra di trasmissione) rispetto al numero di serie. La window è fondamentale in quanto serve a permettere il controllo dell’errore e del flusso da parte di TCP, facendo fronte ad eventi di congestione e/o perdita di pacchetti. Purtroppo, questo aumentare delle probabilità che un certo pacchetto venga accettato e quindi processato dallo stack ricevente, rende attuabile l’attacco di cui abbiamo parlato prima.

Ora, la cosa gia cosi è drammatica, in quanto un attaccante può causare la disconnessione di una comunicazione in corso. Ma i guai non sono finiti. Chi tra voi sa cos’è un router, saprà anche che questi router usano scambiarsi messaggi di controllo, sfruttando un protocollo che si chiama BGP, e che si appoggia a connessioni TCP permanenti (o cmq di lunghissima durata), e quindi particolarmente esposte ad un attacco di questo tipo. Ora, chi tra noi conosce anche la struttura intima della rete di Internet, sa che ci sono dei *cardini* attorno ai quali transita una notevole quantità del traffico prodotto dalla rete, e sono le così dette backbone, o dorsali oceaniche. Queste sono reti in fibra ottica che collegano, ad esempio, Europa ed America, e che scaricano un’enorme parte del net-load tra i vari continenti. Mettiamo ora il caso che una di queste connessioni venga a mancare, perchè subisce un attacco di questo tipo. Il carico di traffico sulle altre backbone salirebbe enormemente, portandole al crash. A questo punto, si avrebbe una reazione a catena. Il traffico, poco a poco (nel giro di qualche minuto), porterebbe al crash la maggior parte dei router, paralizzando completamente la rete.

Ora, vogliamo evitare allarmismi inutili. Per proteggere le backbone, sono stati implementati, ormai da parecchio tempo, degli algoritmi di cifratura e firma dei pacchetti TCP tramite l’hash md5 che impedisce il banale ip spoofing tra quegli host che usano il protocollo BGP. Ma capiamo tutti che questo non è piu sufficiente, e la “nuova” riapertura di questa falla, puo essere davvero critica, in alcuni casi, e deve essere risolta (il fatto che non ci siano pericoli imminenti, non significa che si possa lasciare tutto come sta). L’advisory di NISCC, propone l’utilizzo di IPsec, per patchare questa falla, e invito tutti quelli che fossero interessati, a leggersi tutorial e FAQ su questo interessante protocollo.

Il multiplexer

Rieccoci qui. Dopo una settimana di pausa, riprende il nostro corso sul funzionamento dei computers. Abbiamo visto, nella prima puntata, la logica booleana e la sua implementazione nelle porte logiche. Poi, abbiamo visto come, utilizzando delle semplici porte logiche, abbiamo potuto creare un circuito in grado di eseguire una banale somma con riporto. Oggi, facciamo un altro passo avanti, e cominciamo a vedere i circuiti in grado di implementare funzioni logiche. In particolare, oggi vedremo un circuito in grado, a seconda di un certo bit in entrata, di decidere quale, tra le diverse entrate a disposizione, lasciar passare verso l’uscita: il Multiplexer.

Iniziamo ad osservare il diagramma che abbiamo in figura 1. Si tratta di un Multiplexer molto semplice, con solo 2 entrate, X0 e X1, e la solita uscita, X. Noterete poi, la presenza di un terzo bit in ingresso, A, negato in ingresso, e collegato a due porte AND, una per X0, una per X1.
Cerchiamo di capire il funzionamento di questo circuito.

Immaginiamo di impostare A a `0′, X0 a `0′ e X1 a `0′. A, negato dalla porta NOT a cui è collegato, diventerà `1′, per poi sdoppiare il suo segnale e fluire da una parte all’AND con la porta X0, dall’altra ad un secondo NOT, che lo farà tornare `0′, e poi all’AND con la porta X1.

Fino a qui, se avete seguito con un po di attenzione le precedenti puntate, non dovrebbero esserci problemi. Riassumiamo la situazione a questo punto: il primo dei due AND, quello tra A e X0, avrà in ingresso un `1′ (“not(A)”) e uno `0′ (“X0”). All’uscita della porta troveremo quindi uno `0′ (“1 AND 0 = 0”). Agli ingressi del secondo AND, avremo invece uno `0′ (“not(not(A))”) e un’altro `0′ (“X1”). All’uscita di questa porta, avremo quindi ancora `0′ (“0 AND 0 = 0”). I due AND, a questo punto, sono collegati ad uno XOR, che ritornerà in uscita `1′ se e solo se uno dei due input è `1′, che non è il nostro caso. L’uscita del multipexer sarà quindi `0′.

Ora che abbiamo visto come funzionano i collegamenti interni al mux (multiplexer), stendiamo una tabella che prenda in considerazione le diverse combinazioni di segnale:

+---+----+----++---+
| A | X0 | X1 || X |
+---+----+----++---+
| 0 |  0 |  0 || 0 |
+---+----+----++---+
| 0 |  0 |  1 || 1 |
+---+----+----++---+
| 0 |  1 |  0 || 0 |
+---+----+----++---+
| 0 |  1 |  1 || 1 |
+---+----+----++---+
| 1 |  0 |  0 || 0 |
+---+----+----++---+
| 1 |  0 |  1 || 0 |
+---+----+----++---+
| 1 |  1 |  0 || 1 |
+---+----+----++---+
| 1 |  1 |  1 || 1 |
+---+----+----++---+

Osserviamo ora molto attentamente questa tabella. Possiamo notare come nei casi in cui A vale `0′, vengono riportati in uscita i valori di X1, mentre quando vale `1′, verranno riportati i valori di X0. Chiameremo a questo punto A “bit di controllo”. A seconda di come imposteremo A, potremo scegliere quale delle due entrate avere in uscita.
Come abbiamo detto, quello che abbiamo preso in considerazione, per semplicità, è un multiplexer molto semplice. Non vi sarà però difficile intuire che nel momento in cui avessimo bisogno di piu entrate (3,4,10,20…), basterà aggiungere entrate e porte AND, il tutto collegato allo stesso XOR in uscita. Unica sostanziale differenza, è che per poter indirizzare correttamente tutti i bit d’entrata, dovremo ampliare il numero di bit di controllo. A diventerà quindi un segnale a piu bit. Un esempio veloce. Ipotiziamo di dover costruire un multiplexer che indirizzi 4 bit: X0, X1, X2 e X3. A dovrà essere un segnale a due bit: `00′ per X0, `01′ per X1, `10′ per X2, `11′ per X3. COn questa logica possiamo continuare a ingrandire il nostro multiplexer, aggiungendo un bit di controllo ogni 2 entrate che aggiungiamo.

Gli scopi di un Multiplexer sono innumerevoli, e ve ne renderete conto nelle prossime puntate. Per il momento, portiamo la nostra attenzione su un circuito che fa esattamente il contrario di un multiplexer: Il Demultiplexer. Questo circuito (mostrato in figura 2), ha la capacità di ricevere un valore in entrata (IN), e attraverso un bit di controllo analogo a quello del Multiplexer, decidere su quale canale inviarlo in uscita.

Ormai dovreste essere sufficientemente bravi da studiare da soli il Demultiplexer, e capirne il funzionamento. Provateci da soli, e la prossima volta vedremo, molto in breve, di spiegarne il funzionamento a chi non lo avesse capito da solo.

Per il momento è tutto, happy hacking 🙂