Cos’è UNIX | Cos’è LINUX | Cos’è GNU

Impara le differenze fra Unix e Linux, l’architettura del kernel Linux e la storia di GNU/Linux.

UNIX

Unix è un sistema operativo che vide gli albori attorno agli anni ’70 grazie a  Ken Thompson e Dennis Ritchie, sviluppato presso i laboratori Bell della AT&T.
Oltre al kernel comprende anche un insieme di programmi che lo rendono un sistema operativo completo.

I programmi che esso fornisce consentono di eseguire la maggior parte delle operazioni di cui l’utente necessita: editor testi, gestione dei file, compilatore (soprattutto per C), ecc…

È possibile eseguire tali programmi mediante un’interprete di comandi che fornisce un’interfaccia (testuale) fra l’utente e il sistema Unix, chiamato SHELL.
Per comprendere meglio il funzionamento della shell, è consigliata la lettura: Guida all’uso della Shell.

La filosofia di Unix ha promosso alcune regole per la gestione degli script:

  1. Ogni singolo programma deve realizzare una singola funzione.
    • es: ls mostra la lista dei file, ps elenca i processi attivi, ecc…
  2. Non impegnare l’output senza necessità, e far sì che l’output di un programma possa essere l’input per un altro.
  3. Invece di scrivere un nuovo programma, cerca di simili e impara ad usare gli strumenti già esistenti, o prova a modificarli.
  4. Quando crei un programma, definisci bene la struttura: inizia con un piccolo lavoro, e poi fallo crescere in modo incrementale.

GNU

Unix è un sistema operativo proprietario, pertanto l’azienda AT&T ne possiede i diritti.

gnu-headNel 1983, Stallman decise di creare un clone di Unix che fosse libero, ovvero che garantisse la massima libertà degli utenti nell’usarlo e modificarlo.
Tale sistema operativo prendeva il nome di GNU, acronimo ricorsivo che sta per GNU’s Not Unix.

GNU divenne il progetto focale della FSF: Free Software Foundation, organizzazione non a scopo di lucro che si occupa di eliminare le restrizioni sulla copia, sulla redistribuzione, sulla comprensione e sulla modifica dei programmi per computer.

Con GNU prendeva il via la creazione di una serie di programmi sotto forma di software libero: applicazioni, librerie, strumenti di sviluppo e persino giochi. Tra i pacchetti software di GNU oggigiorno indubbiamente i più famosi sono GCC (GNU Compiler Collection), emacs, GRUB e tanti, tanti altri.

Tuttavia GNU, all’epoca, per poter essere completo necessitava di un kernel; non esistevano ancora kernel Unix-like liberi da poter utilizzare e così iniziarono gli sviluppi del microkernel Hurd. Data la complessità e l’ambizione del progetto Hurd, però, lo sviluppo procedeva lentamente e con molte difficoltà. È stato necessario attendere l’avvento di linux per realizzare il sistema che oggi è noto come GNU/Linux.

Per i più curiosi sulla filosofia GNU: Manifesto GNU.

LINUX

Quando nel 1991 Linus Torvalds si stancò di dover usare un sistema Unix (minix, creato da Tanebaum a scopi educativi) che lo limitava molto nell’interazione con l’hardware, così decise di scriverne uno tutto suo.

Fu così che pensò, basandosi sull’esperienza con minix, di creare Linux, un Kernel che consentiva a più processi (thread) di mandare segnali sulla porta seriale.

Torvalds rilasciò il sorgente di linux sotto licenza GNU General Public License ed è così che col tempo nacquero i Sistemi Operativi GNU/Linux, ovvero che combinano il kernel Linux con i pacchetti software sviluppati da GNU, dando vita al sistema operativo libero.

Architettura GNU/Linux

Architettura GNU/Linux

(Fonte Immagine: https://www.embhack.com/introduction-to-the-linux-kernel/)

Architettura dei sistemi GNU/Linux

Un sistema operativo è composto da varie componenti, di cui il Kernel (Linux) ne rappresenta il cuore pulsante.

Alcune fra le principali componenti sono:

  • Bootloader:
    • E’ il processo che entra in esecuzione ogni qual volta accendiamo il dispositivo, e si preoccupa di effettuare tutte le azioni necessarie per avviare il sistema operativo.
    • Se sul computer avete installato due sistemi operativi (di solito Windows e Linux), è il bootloader che si preoccupa di farvi scegliere all’avvio quale dei due sistemi operativi eseguire.
  • Kernel:
    • E’ la parte più interna del sistema
    • Il compito del Kernel è quello di consentire ai processi in esecuzione di accedere in modo sicuro e controllato all’hardware.
    • Interagendo con l’hardware, rappresenta la parte a basso livello del sistema operativo.
    • Grazie agli algoritmi di Scheduling, consente ai vari processi che richiedono di accedere alle risorse (processore, memoria, ecc…), di accedervi uno alla volta mediante un ordinamento temporale delle richieste, dando la priorità a quei processi che sono privilegiati dalla tipologia di Politica di Scheduling.
    • Riepilogando: le applicazioni interagiscono con il kernel per poter funzionare. Infatti, consente loro di essere eseguite, garantendo loro l’accesso all’hardware, in primis al processore per essere eseguite.
    • Quando i programmi devono richiedere una risorsa, effettuano delle chiamate (System Call) al kernel, comunicando la richiesta di accesso.
  • Shell:
    • Detta anche Linea di Comando, è la parte più esterna del sistema.
    • La shell consente di interagire con il Kernel, essa è l’interfaccia utente del sistema.
  • Daemons
    • Sono una serie di processi in esecuzione in background, non sotto il controllo dell’utente, che vengono attivati quando si verificano determinati eventi.
    • Solitamente sono eseguiti a partire dall’avvio del sistema, per attivare il servizio di scheduling, gestione del suono, ecc… ovvero servizi sempre necessari
  • Server Grafico
    • Visualizza sul monitor la vostra interfaccia grafica: è lui che “disegna” il vostro desktop. Solitamente viene chiamato Server X.
  • Desktop Environment
    • In parole semplici è quella parte che gestisce il tema e rende accattivante la distro.
    • Sebbene utilizzare la linea di comando sia la cosa che affascina di più di Linux, esso è diventato molto popolare e più diffuso anche fra gli utenti meno esperti solamente quando è stato fornito di inferfaccia grafica (GUI: Graphic User Interface), che consente l’interazione uomo-macchina in modo visuale.
    • E’ la parte del sistema con cui l’utente interagisce. Implementa la metafora della cosiddetta Scrivania  (il desktop che abitualmente utilizziamo, in cui possiamo disporre gli oggetti), fornendo anche il tema grafico (colori, icone…) al vostro sistema operativo.
    • Si sono diffusi molti Desktop Environment: KDE, GNOME, Cinnamon, MATE, ecc… Per una guida approfondita sui Desktop Environment, vedere: Guida ai Desktop Environment.

Bibliografia per Approfondimenti