Una battaglia infinita
L’attuale modello economico e la selezione naturale impongono a tutti gli “investitori”, che possono essere animali nel caso della selezione naturale o società, aziende e persone fisiche nel caso dell’economia, una semplicissima regola: chi ha le caratteristiche migliori per sopravvivere si diffonde nell’ambiente, chi non le ha deve farsi da parte.
È logico che ad un certo punto ci aspetti di giungere all’equilibrio in quanto, alla fine, un soggetto che si dimostra particolarmente adatto a “guadagnare” rispetto agli altri riuscirà senza alcun dubbio a diffondersi maggiormente rispetto agli avversari.
Il mondo dell’informatica è un ottimo banco di prova per questo processo evolutivo ed è anche estremamente vantaggioso sfruttarlo come test empirico perché condensa le modifiche evolutive attuate dalla selezione naturale agli esseri viventi in milioni di anni in pochi decenni, una semplificazione che è difficile da raggiungere persino con l’economia.
Lo scontro che probabilmente più si presta alla valutazione delle caratteristiche di sopravvivenza è quello tra i sistemi operativi (OS in seguito), che mai come in questi anni hanno avuto un ruolo preponderante nella diffusione del computer come strumento per migliorare la nostra vita.
Dal mio punto di vista è indiscutibile il fatto che il risultato dell’evoluzione degli OS fino ad oggi abbia condotto alla divisione in tre macro aree che possono essere distinte come segue: Microsoft Windows, Mac OS, GNU/Linux.
Per una ragione o per l’altra questi OS hanno guadagnato più o meno aree di mercato a seconda delle proprie caratteristiche e soprattutto grazie alle scelte “imprenditoriali” dei dirigenti e dei ricercatori.
Qui voglio procedere all’analisi entro le mie personali competenze di ciascuno degli OS sopra elencati (basandomi principalmente con la mia esperienza su Microsoft Windows XP, Mac OS X e diverse distro GNU/Linux, principalmente quelle basate su Debian), evidenziando ciò che secondo me sono vantaggi e svantaggi di ciascuno e soffermandomi anche su eventuali sviluppi futuri. Chiedo fin da ora scusa per le eventuali bestemmie informatiche che possa proferire e, per agevolare la lettura, fornisco una definizione essenziale:
KERNEL = Nucleo del sistema operativo. Si tratta di un software avente il compito di fornire ai processi in esecuzione sull’elaboratore un accesso sicuro e controllato all’hardware.

Microsoft Windows
Mi dispiace dirlo ma parlare male di Windows è, ora come ora, esattamente come sparare alla croce rossa: un azione moralmente deplorevole ed egoisticamente facile. Questo non perché si tratti di per se di un pessimo sistema operativo ma perché i dirigenti che ne decidono lo sviluppo sono fossilizzati su strategie imprenditoriali dal mio punto di vista inadatte a rendere l’OS appetibile con le attuali caratteristiche tecniche dei computer.
Il motivo principale che mi spinge a trarre questa considerazione è l’architettura del suo kernel: un blocco formalmente diviso in 2 parti (User Mode e Kernel Mode) che tuttavia si comportano quasi come se fosse un organismo unico. È in fin dai conti un architettura monolitica di vecchio stampo (vedi DOS) in cui non vengono rispettate le moderne regole di indipendenza che consento il miglioramento progressivo dell’OS (sebbene formalmente sia un kernel ibrido).
Per i profani non è il caso di arrendersi alle parole tecniche che ho usato, si tratta di una cosa facilmente esemplificabile come segue.
Immaginate che Windows sia un enorme Golia, un gigante poderoso che sembra inattaccabile da ogni punto di vista. Qual’è o svantaggio principale di un gigante così grosso? Sicuramente il fatto che il malfunzionamento di un suo organo preclude la sopravvivenza di tutto il corpo. Basta un sassolino in un occhio per far capitolare il gigante a terra.
Uscendo dalla metafora, cosa succede quando per esempio si installa una nuova periferica in Windows, o quando occorre un errore ad una qualunque delle applicazioni? Nella maggior parte delle occasioni saremmo costretti a riavviare la macchina in quanto alcune delle componenti (specialmente Hardware Abstraction Layer e Configuration Manager) non possono aggiornarsi se non disattivando tutte le altre. In alcuni errori alle applicazioni poi siamo costretti a riavviare il computer come i cavernicoli premendo il tasto reset o togliendo la spina. Questo per lo stesso motivo di prima: le componenti sono cosi strettamente correlate tra loro da costringere tutto il sistema ad interrompersi nel caso accada l’irreparabile.
Cecità alle esigenze degli utenti? Programmatori incapaci alle dipendenze della società? Sono queste le cause di un difetto così grossolano dell’OS? No, sicuramente no, soprattutto vedendo i lavori che continuano a produrre in continuazione i programmatori Microsoft.
Dal mio punto di vista il problema risiede in un calcolo imprenditoriale sbagliato al 50% che consiste nel desiderio di mantenere la retrocompatibilità. Quante saranno le aziende che già hanno dei programmi che girano su Windows e che non intendono spendere più del necessario per aggiornare l’OS? Migliaia, forse centinaia di migliaia se non addirittura milioni. Gli alti papaveri Microsoft non intendono perdere clienti e per questo devono continuare a spingere i propri programmatori a costruire i kernel garantendo la compatibilità nativa con quelli precedenti. Nulla di più legittimo.
Tuttavia c’è un aspetto sconcertante: le divisioni di sviluppo Microsoft non sono tutti d’accordo con questa strategia!
In effetti inizialmente Windows Vista doveva avere un kernel completamente ridisegnato da zero. Un progetto meraviglioso in cui andava alla ribalta in sistema delle paravirtualizzazioni ovvero un Exokernel basato su .Net Framework che avrebbe consentito: incremento della sicurezza, aumento della compatibilità, riduzione della monoliticità e aumento dell’efficienza nella gestione delle risorse.
Purtroppo accadde che l’ala conservatrice dei programmatori ebbe il sopravvento (e molto probabilmente l’avrà anche con Windows 7) e si mantenne lo stesso kernel trito e ritrito con poche o nessuna modifica sostanziale e con tante, troppe caratteristiche obsolete come dll, registro di sistema, compatibilità nativa ecc…ecc…

Mac OS X
Purtroppo, dal mio punto di vista, Mac OS X è un OS poco conosciuto sempre a causa di decisioni imprenditoriali deleterie che non fanno ottenere i meriti di cui invece dovrebbe godere.
Considerazione che viene da un analisi attenta del kernel che, secondo l’opinione di chi scrive, è forse uno fra i più moderni che ci siano al momento in commercio.
Mac OS X gode di essere definito un OS UNIX based grazie alla derivazione da Mach (è più corretto dire che è basato su XNU, una fusione tra Mach e FreeBSD; indubbiamente però deriva da Mach), un kernel costruito a partire dal più tradizionalista UNIX ma con una feature in più: la IPC (Inter-Process Communication).
Essenzialmente le sue caratteristiche principali permettono le seguenti peculiarità:
- Indipendenza tra le componenti garantita da una forte modularizzazione degli strati del kernel (per tornare alla metafora di Golia di Microsoft, si potrebbe dire che Mach è assimilabile al contrario ad un esercito composto da tanti soldati; se ne muore uno non necessariamente la guerra viene persa)
- Riduzione del kernel ad un microkernel in cui la maggior parte dei servizi viene gestita al livello utente.
- Utilizzo migliore di thread e di task attraverso la IPC ovvero possibilità di gestire con estrema facilità ed efficienza anche ambienti paralleli (sia multicore sia a processori fisici multipli).
Conseguenza immediata di tali opzioni è ovviamente l’eliminazione dei problemi di riavvio del computer: se per installare i driver utilizzo delle librerie che giacciono al livello utente mi basta semplicemente caricarle in runtime, non è necessario riavviare tutto il computer.
Inoltre vi è di sicuro maggior stabilità; escludendo le rarissime (se non uniche) occasioni di kernel panic (errore irreversibile del kernel, così normale in Windows) l’OS ha il controllo completo delle applicazioni al livello utente grazie all’IPC e quindi queste possono essere terminate in qualunque momento.
Se poi si considera che Mach (e quindi Mac OS X) è un miglioramento immediato di UNIX vi è una feature non indifferente: la possibilità di utilizzare quasi il 100% delle applicazioni UNIX (comprese quelle GNU/Linux).
Il problema principale di Mac OS X qual’è dunque? Come Windows una politica aziendale poco previdente che impedisce il decollo di un così buon OS. Il motivo? Mac OS X può essere fatto “girare” solo in computer Apple.
Sebbene sotto un certo punto di vista condivida la scelta (se io so quali sono i computer sui quali il sistema verrà installato è logico che riduco il numero di problemi perché lo ottimizzo al massimo; tutto ciò si traduce infatti in una riduzione dei costi di assistenza e di investimento), dall’altro la compiango un po’.
Si tratta di un ottimo sistema operativo che potrebbe facilmente competere, se non surclassare, Microsoft, ed è un peccato che i dirigenti non decidano di sfondare nel mondo delle architetture IBM like.

GNU/Linux
Ed ecco il deus ex machina. Usciamo dal mondo del software proprietario ed entriamo nella meravigliosa terra del software libero e Open Source. Che cosa dire di GNU/Linux? Che forse è uno fra gli OS più robusti e solidi mai creati dai programmatori? Che si tratta del più flessibile OS che si possa immaginare? Queste e tante altre sono le proprietà di cui gode e che sicuramente merita.
GNU/Linux, nelle sue tante e numerose distribuzioni, consente di osservare la potenza dello scambio di informazioni in tempo reale: il suo kernel monolitico viene continuamente migliorato, potenziato, reso snello, grazie ai numerosi programmatori che intervenendo nel codice sorgente ne consentono la continua evoluzione.
Sebbene condivida la posizione di Tanenbaum circa la sostanziale prevalenza dei microkernel sui kernel monolitici, grazie alle continue modifiche e sopprattutto grazie ai Loadable Kernel Modules (che sotto un certo punto di vista hanno reso GNU/Linux più simile ad un microkernel che ad un kernel monolitico), GNU/Linux si è dimostrato essere l’OS più aperto alle modifiche, più scalabile ed efficiente che probabilmente sia esistito (finora).
Non solo. Essendo così aperto non escludo che presto o tardi si arriverà alla sua trasformazione in un Exokernel, cosa che mi auguro sinceramente accada.
Che dire dei difetti. Sicuramente non è tanto user friendly quanto i competitori (nonostante con le distribuzioni di Ubuntu si sia migliorato decisamente questo aspetto) e non gode della fama di essere semplicissimo. Tuttavia mi auguro che i progetti di KDE e Gnome arrivino a perfezionarsi sempre più in modo da consentire ad una gamma maggiormente ampia di utenti di ottenere un OS tanto buono come lo può essere una buona distribuzione GNU/Linux.

Il futuro
Da ultimo vorrei fare una previsione sul futuro degli OS a fini domestici e aziendali. I kernel devono far fronte sempre più ad una maggior richiesta di efficienza, di sicurezza, di scalabilità e di manutenibilità.
È quindi necessario un indirizzamento verso una programmazione modulare sempre più spinta che consenta al sistema di resistere alla maggior quantità di stress possibili provenienti dall’utente. L’unica architettura che dal mio punto di vista consenta di ottenere tale risultato è l’architettura ad Exokernel o a macchine virtuali in cui ogni singola applicazione sia sempre più isolata dalla macchina reale in maniera da consentire non solo indipendenza rispetto alle altre ma anche un maggior grado di efficienza.
L’aumento delle prestazioni dei computer consente questo tipo di architettura. Una volta, quando ogni singolo ciclo macchina era essenziale, non si poteva perdere un secondo ad eseguire tutte le chiamate di sistema necessarie a gestire un Exokernel ma al giorno d’oggi, con i processori multicore e l’aumento esponenziale della velocità dei componenti, questo problema non esiste più.