Sistemi operativi ed open-source

0
738

Care lettrici, cari lettori, bentrovati!

Oggi vorrei parlarvi di un argomento che mi sta molto a cuore e che ho trattato in parte nel podcast di cui sono stato ospite qualche settimana fa (trovate qui i links): i sistemi operativi e la filosofia open-source.

Suggerisco di andare a ripescarsi l’intervista, ascoltarla e poi leggere questo articolo. Così avremo bene a mente alcuni concetti che ci torneranno utili nel corso dell’articolo. Comiinciamo!

I sistemi operativi – un pizzico di storia

I primi calcolatori, di cui vi ho anche parlato nella serie riguardante la guerra elettronica, funzionavano processando una istruzione per volta. Questa era anche eseguita per un utente alla volta. Cosa fondamentale, l’esecuzione di un solo programma (composto da decine o centinaia di fogli di carta perforata) occupava in modo esclusivo l’elaboratore per ore. Se poi quel programma conteneva un errore, la procedura era infinitamente macchinosa. Bisognava interrompere l’esecuzione del programma, individuare l’errore, correggerlo, verificare che tutto fosse di nuovo pronto ed eseguire nuovamente il programma. Questo si otteneva ricaricando la pila di fogli perforati nel calcolatore.
Un vero incubo.

Con l’avvento delle nuove tecnologie (i transistori) e l’adozione di nuovi linguaggi di programmazione, le cose divennero via via più “semplici” ed efficienti. I calcolatori divennero sempre più potenti e capaci di eseguire operazioni più velocemente e per più utenti; furono così in grado di gestire istruzioni, programmi e funzioni specifiche in simultanea.

Nell’ottica di poter utilizzare un elaboratore in modo sempre più efficiente e condiviso, fecero capolino i sistemi operativi. Il loro compito era proprio quello di rendere efficiente l’utilizzo dell’elaboratore, sia dal punto di vista del calcolo, sia dal punto di vista dell’usabilità. Questa non era più esclusiva e dedicata ad un solo programma/utente. Il sistema poteva rendere un elaboratore capace di eseguire più compiti simultaneamente e per più utenti su di esso collegati.

In quest’ottica e con questa filosofia, i sistemi operativi sono nati e si sono evoluti fino a rendere i calcolatori sempre più potenti, più efficienti e più facili da utilizzare per l’utente finale.

Come funziona un sistema operativo?

Come ho accennato durante l’intervista, i sistemi operativi sono dei programmi composti da centinaia di migliaia o milioni di righe di codice. Essi consentono all’hardware che compone un calcolatore di comunicare con l’utente che gli impartisce comandi (ed istruzioni) e di effettuare operazioni di svariata natura. Tutte queste operazioni permettono all’elaboratore di assolvere ai compiti più disparati.

In generale, dunque, un sistema operativo lo possiamo intendere come un’entità estremamente abile nell’organizzare molteplici tipi di attività contemporaneamente. A ciascuna è assegnato un determinato quanto di tempo di esecuzione sul processore in base alla priorità. Il sistema ne organizza anche la rotazione, con diverse politiche di organizzazione. Dopo che un’attività è terminata (oppure ha esaurito il quanto di tempo assegnatole), il sistema passa alla prossima attività da eseguire.

Tutto questo avviene per ogni processo. Processo è, in gergo, ogni attività che viene lanciata dal sistema operativo verso il processore. Un processo si esegue e si ripete ciclicamente milioni, miliardi di volte, finché il nostro computer non viene spento. In questo caso per computer dobbiamo intendere non solo i classici notebooks ed i fissi, ma anche gli smartphones.

In realtà, il sistema operativo si avvale di altri due abilissimi aiutanti: lo scheduler ed il dispatcher. Il primo organizza l’esecuzione dei processi sul processore, il secondo passa il controllo del processore ai processi che devono partire. Spieghiamolo in soldoni. Lo scheduler sceglie quale processo può utilizzare il processore (in base a diversi fattori, uno tra tutti la priorità). D’altro canto, il dispatcher “abilita” quel determinato processo ad utilizzare il processore. Tutto questo avviene sempre rispettando il tempo che ogni processo ha a disposizione per eseguire.

La coordinazione è tutto

Tutto quanto abbiamo detto fino ad ora, come ho anche anticipato poco fa, deve avvenire nella massima coordinazione. Infatti tutti i processi hanno diritto ad essere eseguiti (tolte alcune eccezioni) per un tempo prestabilito; tutti, poi, devono poter eseguire, senza esclusioni (tranne per alcuni processi a priorità elevata). Tutto questo deve avvenire nel massimo rispetto dei tempi e della coordinazione. Il sistema operativo, a seconda dei contesti e di particolari scelte (che, per il loro carattere estremamente tecnico, non trattiamo) utilizza degli algoritmi di ordinamento dei processi e di rotazione. Questi cercano di fare in modo che ciascun processo possa eseguire senza essere interrotto (sempre salvo eccezioni).
Facciamo un’esempio per darvi un’idea. Esistono svariate politiche di ordinamento dei processi. Possono basarsi sulla priorità, sulla divisione di tempo (quello per il quale ogni processo usa il processore), sull’ordine di esecuzione (il primo che arriva esegue per primo), eccetera.

Una gerarchia precisa

Riassumiamo. Il sistema operativo, affinché tutti i processi possano eseguire, li mette in ordine, partendo da tutti quei processi che sono pronti per essere eseguiti. Qui dovrei aprire una parentesi molto tecnica, ma vi basti sapere che ogni processo può avere molteplici stati; può però trovarsi in un solo stato specifico in un determinato momento; alcuni di questi stati indicano se il processo sia pronto per essere eseguito (R, ready) oppure no (S, suspended, oppure T, terminated). In base a quanti di questi processi siano pronti ad eseguire, il sistema li ordina secondo quelle politiche di esecuzione di cui parlavamo prima.

Schema che rappresenta lo stato in cui può trovarsi un processo, immagine liberamente tratta da Wikipedia

Ovviamente, questa è una piccolissima parte dei compiti del sistema operativo, ma è la più importante. Grazie ad essa possiamo guardare film, scrivere, giocare…ci consente, insomma, di poter utilizzare normalmente un computer.
Se il sistema operativo non si occupasse dell’organizzazione efficiente ed ottimale dei processi che devono essere eseguiti, i computer, gli smartphone e qualsiasi altro dispositivo dotato di sistema operativo, come la centralina di un’automobile, farebbero cose a caso. Non funzionerebbero affatto in modo efficiente, rischiando di compromettere l’usabilità e la sicurezza dell’utilizzatore finale, vale a dire noi.

Una miriade di compiti

In realtà, i compiti del sistema operativo non si esauriscono alla sola organizzazione dei processi. Essi comprendono anche la gestione della memoria, dei dischi, dei dispositivi di input/output. Il sistema garantisce anche il corretto interfacciarsi di questi con l’hardware a disposizione della macchina. Fa anche in modo che le comunicazioni tra tutte le periferiche avvengano correttamente e senza violazioni. Inoltre, quando si verifica un errore, esso non compromette la stabilità di tutto il sistema.

Non da ultimo, deve occuparsi della corretta gestione dei permessi dell’utente sulla macchina, della gestione del cosiddetto filesystem e dell’esecuzione dei programmi che vengono lanciati. Deve, cioè, fare in modo che solo chi sia autorizzato a fare una determinata azione possa farla, segnalando operazioni non consentite. Allo stesso modo, si occupa di garantire che i processi utente possano eseguire determinate operazioni e non altre e che rimangano confinati nel loro spazio (user-space). Processi a priorità più elevata (in gergo: in kernel-mode) devono invece poter effettuare operazioni più complesse e, soprattutto, più privilegiate, nella loro area di memoria dedicata (cioè i kernel space).

Insomma, il sistema operativo deve garantire che tutto funzioni alla perfezione e deve farlo senza sbagliare un colpo (anche se, a volte, falliscono anche loro). Deve dedicare la massima attenzione a tutte le attività, suddividendole per ordini gerarchici e dando loro la possibilità di eseguire solo fin dove sono autorizzate a farlo. Quando qualche attività (o processo) tenta di fare qualcosa che va contro le sue autorizzazioni, l’attività (ed il relativo processo) vengono terminati con estremo pregiudizio.

Un esempio di BSOD, ovvero Blue Screen Of Death o schermo blu della morte, che indica un errore critico del sistema operativo Microsoft Windows, errore non troppo raro da riscontrare.
Immagine liberamente tratta da Wikipedia.

Open source – una filosofia di vita

Dopo aver fatto una panoramica sui sistemi operativi, che, nonostante la sua estrema sintesi, spero possa avervi insegnato qualcosa di nuovo, passiamo a parlare di un altro argomento molto interessante. Questo, contrariamente a quanto si potrebbe pensare, ha tanto in comune con lo sviluppo dei sistemi operativi.

Come ho avuto modo di spiegare nel podcast, il concetto di open source è molto filosofico e pone alla base del suo ragionamento la condivisione di conoscenza nella sua forma più pura.
Non vi è limite nel condividere il sapere, come non vi è limite nel poterlo diffondere. Per tale motivo, l’open source è un modo di vedere le cose ed intendere il mondo che ci circonda, che non ha eguali.

L’open source, per sua stessa natura, è pura condivisione, che è il principio fondamentale; ancor di più, l’open source non è lucro. Uno degli aspetti che più si allontana dal mondo dell’open source è proprio l’idea che da un progetto si possa in qualche modo ricavare un beneficio economico. Questa è una delle caratteristiche più pure e belle dell’open-source: chiunque vi contribuisca non percepisce denaro, sotto nessuna forma e per nessuna ragione.

La volontà di contribuire al bene di tutti

L’open source è un principio mosso dalla partecipazione volontaria ad un progetto, perché si crede che quel particolare progetto o quella particolare idea possano apportare, direttamente o meno, un miglioramento alla vita delle persone.
Negli anni, sono nati e si sono moltiplicati in modo esponenziale migliaia di progetti open source. I più grandi e conosciuti, di cui avete sicuramente sentito parlare, sono GNU\Linux, FreeBSD, Arduino, TOR, eccetera.

Vi potreste chiedere come mai chi decida di contribuire ad un progetto open source scelga in modo consapevole di dedicare tempo e risorse ad un’idea senza voler percepire alcun compenso. Ebbene, la risposta è molto semplice da dare, ma non da comprendere. Parliamo di mettere a disposizione del prossimo le proprie competenze e capacità per contribuire a qualcosa che va al di là del proprio personale senso di gratificazione, contribuendo in modo significativo al migliorare la vita di una intera comunità. Una comunità come quella di Internet, ad esempio.
Ovviamente, se da un lato è vero che i volontari e contributori attivi in un determinato progetto rifiutino un compenso, da un altro lato è altrettanto vero che vi sono molti donatori. Volontari anch’essi, scelgono di supportare e finanziare un progetto donando una somma a loro piacimento.

Così, con le giuste prospettive, vi sono progetti che possono partire da nuclei di due o tre persone e diventare vere e proprie startup. Queste vengono spesso finanziate da aziende o investitori privati volontari che credono nel progetto e decidono di supportarlo.

Cosa lega i sistemi operativi all’open source?

La risposta più semplice a questa domanda, al di là di ogni altra considerazione storica, si può formulare così. I sistemi operativi open source rappresentano la volontà di mettere a disposizione della collettività, gratuitamente, un software (sistemi operativi, ma non solo) funzionante e performante. Esso permette a chiunque lo desideri di utilizzarlo su (quasi) ogni tipo di hardware; il bello di tutto ciò è che è tutto vero. Esistono eserciti di sviluppatori, professionisti e non, che, seguendo rigidi codici di sviluppo, apportano ogni giorno migliaia di modifiche al codice sorgente di Linux, uno dei progetti open source più noti e maturi. Questo serve per testarlo, migliorarlo e rilasciarlo, rendendolo più sicuro e più utilizzabile da privati ed aziende.

Al contrario di quello che si potrebbe pensare sono tantissimi gli enti pubblici e le aziende che iniziano ad affidarsi sempre di più a sistemi open source, come GNU\Linux o FreeBSD. Allo stesso modo, moltissime sono state le aziende che, fin dalla loro nascita, si sono sempre affidate al mondo open source, andando a rompere quel “monopolio” mantenuto da decenni da sistemi proprietari, come Microsoft Winodws, per esempio. I sistemi proprietari, per dirla in breve, sono l’esatto contrario del mondo open source.

Conclusione

La filosofia open source rappresenta, ad oggi, uno dei pochi avamposti di quel sano altruismo che cerca di cambiare “nel suo piccolo” la visione del mondo. Essa, concretamente, cerca di apportare benefici diretti ed indiretti all’utilizzo dei computer. Questi sono per tutti coloro che ne fanno uso e derivano da strumenti completi, funzionanti e sicuri. Tutto questo è concesso senza nulla chiedere in cambio

Spero che questo articolo sia risultato interessante e che, nel suo piccolo, possa aver piantato in voi il seme della curiosità. Questa, mi auguro, un giorno germoglierà e potrà rendervi partecipi, magari più da vicino, del mondo open source.

Stay massicci, stay generici!