KNOWLEDGE BASE

Knowledge Base
1Backup
Acronis
Antivirus
Email
Firewall
GFI Software
Mail
Monitoring
N-Able
Sicurezza
TSPlus
Diventa Autore per CoreTech | Scopri di più

Vai al Video

Linux – Introduzione e concetti generali

di Sergio Monteleone

Quando si dice Linux si intende qualcosa di più di un sistema operativo e non tanto per il livello qualitativo e la versatilità e potenza che offre rispetto a “concorrenti” come Microsoft Windows, quanto perché Linux non è un sistema operativo ma una famiglia...un’intera classe. Esistono, infatti, molti sistemi operativi che si fregiano di tale nome e che non a caso definiamo Linux-like.

Linux è un sistema operativo derivato dal potentissimo Unix, che deve i natali a un’idea di Linus Torvald e che con Unix condivide la struttura e l’impostazione del kernel. Tutti i Linux sono quindi sistemi operativi con un kernel strutturalmente simile e, siccome a differenza di Unix e di suoi “simili” come Solaris ecc., è open-source, le varie versioni esistenti sono sviluppate e personalizzate a partire dal kernel, proprio perché esso è di pubblico dominio e viene rilasciato sotto licenza GNU. Workstation

Banner

Le versioni di Linux sono chiamate distribuzioni proprio perché generate e distribuite a partire da un kernel comune, da Linux User Group o sviluppatori o, ancora, aziende; troviamo quindi una gran quantità di distribuzioni che si distinguono sia per prestazioni e funzionalità disponibili, sia per supporto e disponibilità di aggiornamenti costanti e frequenti.

Tra le varie distribuzioni, Slackware, Ubuntu, Red Hat, Debian (probabilmente la più prestante), Mint, Fedora ed altre ancora.

Linux: che cos’è?

Linux è un sistema operativo di libero utilizzo e distribuito e fruibile con licenza open source.

Un sistema operativo è un insieme di programmi che gestisce le risorse hardware e software di un sistema di elaborazione (quindi di un computer, sia esso Personal, Micro, Mini ecc.) fornendo servizi comuni ai programmi applicativi. La sua attività è illustrata nell’immagine seguente, dove distinguiamo i livelli utente (User), applicazione (Application), sistema operativo (Operating System) e fisico (Hardware).

 

L’'immagine mostra un’architettura a layer in cui i livelli più bassi sono rappresentati dall'hardware (dalle risorse fisiche del sistema) e poi abbiamo il sistema operativo, che è lo strato blu che fa da tramite tra le applicazioni e le risorse di calcolo (le risorse hardware) quindi sistema operativo è proprio tutto quell'insieme di software che nasce con lo scopo di essere a servizio delle applicazioni.

Facciamo un esempio utile a capirci: uno dei servizi comunemente offerti da un sistema operativo è la gestione del file system; l'architettura delle directory e il modo con cui le informazioni vengono memorizzate in un sistema informativo è un qualcosa di codificato all'interno di una parte del sistema operativo è impensabile credere che ogni volta che si deve sviluppare un'applicazione sia questa a dover implementare tutte le funzionalità necessarie a gestire la memorizzazione di un certo insieme di informazioni a partire dalla gestione dei cluster dell'hard disk, dei settori e quant'altro. Quindi queste problematiche vengono risolte a livello di sistema.

Linux è un sistema operativo particolare, perché libero e open source: questo significa che su Internet è disponibile a chiunque il codice sorgente del sistema operativo; andando sul sito www.kernel.org potete collegarvi al sito degli sviluppatori dove sono disponibili i sorgenti del kernel stesso.

Linux è un sistema operativo libero perché è offerto non da una un'azienda (perché non è un prodotto commerciale) ma da una fondazione che ne cura lo sviluppo e lo fornisce gratuitamente a chiunque lo voglia utilizzare per implementare le proprie soluzioni informative.

Unix: il padre di Linux

Come accennato, Linux deriva da Unix, che è un sistema operativo sviluppato originariamente dai Bell Labs. Possiamo definire cronologicamente lo sviluppo di Unix con queste tappe:

  • intorno al 1960 vengono compiuti i primi lavori sul mainframe GE-645 (Multics);
  • 1971: Linux viene annunciato internamente ai Bell Labs;
  • 1973: Linux viene annunciato al pubblico;
  • 1975: avviene il Rilascio di “Research Unix”;
  • 1977: viene rilasciata la prima versione di BSD;
  • 1982: avviene il rilascio di HP-UX;
  • 1983: rilascio di SunOS 1.0;
  • 1988: IEEE rilascia le specifiche del primo standard POSIX;
  • 1989: avviene il rilascio di NextSTEP 1.0.

Ma la vera rivoluzione avviene quando prende il via il progetto GNU, ossia nel 1983, quando viene implementata la prima versione libera di Unix.

Banner

Unix è un sistema operativo sviluppato per conto di General Electric prima e di TNT in seguito, in America negli anni ’60 del secolo scorso, quando l'informatica era relegata al mondo dei mainframe e ancora non esisteva il Personal Computer. I primi lavori su Unix iniziarono nel 1960 su un mainframe della General electrics GS645 sul quale prima girava un altro sistema operativo: multix (il nome io unix deriva proprio in contrapposizione con quel sistema); Unix si deve all’opera di tre sviluppatori, D. Ritchie, K. Thompson e B. Kernighan, di cui vedete le foto di seguito.

Prima di poter sviluppare il sistema operativo passarono 9 anni e solo nel 1973 Unix venne rilasciato pubblicamente nel mondo mainframe come prodotto commerciale e nel 1975 due anni fu rilasciata una versione con una licenza particolare che consentiva alle agli istituti di formazione e alle università di poterlo modificare.

Nel 1977 nasce un altro sistema operativo ispirato alla filosofia Unix, ossia il sistema BSD della Berkeley software Distribution.

Altro momento importante fu il rilascio, nel 1989, di NextSTEP 1.0, ad opera della Next Step, compagnia fondata da Steve Jobs, che divenne la base del sistema operativo MacOSx.

Unix non è soltanto un sistema operativo, ma una specifica e una filosofia: un insieme di idee estremamente rivoluzionarie per il tempo, che hanno ispirato un la progettazione di tutti i sistemi operativi moderni, anche quelli non direttamente riconducibili ai Unix, come ad esempio Windows NT.

Unix ha le seguenti caratteristiche:

  • portabile;
  • multi-utente;
  • multi-tasking;
  • file system gerarchico;
  • Inter Process Communication;
  • modularità: la unix philosophy. 

Portabilità

Analizziamo una ad una le caratteristiche di Unix, partendo dal concetto di portabilità.

Fino a quel momento il software veniva sviluppato il linguaggio macchina (quello che oggi chiamiamo Assembly) cioè in un linguaggio fortemente legato al particolare hardware sul quale il programma doveva girare; questo limitava fortemente la portabilità del codice, nel senso che far girare lo stesso programma su una macchina diversa comportava una riscrittura e la riscrittura poteva essere un'operazione molto complessa, proprio perché scrivendo in un linguaggio così di basso livello come quello costituito dalle istruzioni direttamente comprensibile dalla CPU è chiaro che passando da un'architettura un'altra da un hardware e un altro potevano esserci notevoli problemi: ad esempio cosa succede se è un’istruzione richiesta dal software originale non è disponibile nel seto del processore della macchina su cui bisogna portare il codice?

La necessità di risolvere il problema ispirò tre ricercatori dei Bell Labs, dove venne sviluppato prima di tutto un nuovo linguaggio di programmazione di alto livello derivato da un precedente progetto sviluppato in seno ai Bell Labs, da cui nacque il C, ossia un linguaggio di programmazione tutt'ora utilizzato.

Poi i tre ricercatori si dotarono di uno strumento di più alto livello con il quale poter sviluppare poi il sistema operativo Unix, che quindi fu il primo sistema operativo essere scritto in linguaggio C.

Ciò ne garantisce una certa portabilità, tanto che inizialmente il progetto venne scritto per un mainframe della General electrics e poi in seguito fu portato su altre macchine, sui PDP (per esempio sul pdp-7 e sul PDP 11).

Multi-utenza

Un altro principio importante e rivoluzionario di Unix fu la multi-utenza: più utenti possono, su una stessa macchina, far girare programmi diversi o comunque possono voler conservare ognuno i propri dati senza che gli altri possano in qualche modo modificarli o accedervi; un sistema operativo multiutente viene progettato proprio per supportare queste esigenze, ossia per riconoscere i differenti utenti ed assegnare a ciascuno un ambiente dove far girare i propri programmi e memorizzare i propri dati in totale autonomia.

Multi-tasking

Un'altra caratteristica importante, che oggi diamo per scontato ma che non era assolutamente scontata all'epoca, è il multi-tasking, ossia la capacità di far girare più programmi contemporaneamente; anche in ambito mainframe, negli anni ‘60 questo non era per nulla scontato, sia per le limitate risorse hardware, sia perché implementare politiche di multitasking vere e proprie scrivendo un sistema operativo esclusivamente linguaggio macchina è un'impresa non da poco.

Gli sviluppatori di Unix ci riuscirono.

File system gerarchico

Altro concetto rivoluzionario introdotto da Unix è un file system gerarchico: fino a quel momento la memorizzazione dei dati era appannaggio dell'applicazione del programma o, se vogliamo, dell’unico programma che il calcolatore seguiva e questo comportava una eterogeneità nel modo di gestire le informazioni che poteva essere sicuramente problematica.

Offrire alle applicazioni un'interfaccia comune per poter memorizzare le informazioni è lo stesso principio che oggi utilizziamo sui nostri calcolatori, quindi una struttura gerarchica fatta di cartelle (directory) e di file di vario tipo, si deve alla specifica di Unix.

Inter Process Communication e modularità

Altri due importantissimi aspetti riguardano la Inter Process Communication e la modularità: la prima è fondamentale perché Unix è un sistema operativo multiprogrammato multi-tasking, quindi è importante che i vari programmi girino contemporaneamente o più o meno  contemporaneamente. Ci sono varie possibilità per implementare il multi-tasking a livello fisico: se le unità di elaborazione sono tante è possibile effettivamente eseguire più programmi contemporaneamente, ma se abbiamo un’unica CPU, in realtà il multi-tasking viene simulato eseguendo le istruzioni dei vari programmi in modo sequenziale. Si tratta quindi di multi-tasking in Time Sharing, cioè a divisione di tempo.

Allora è importante che i vari programmi non siano un qualcosa di isolato, ma possano comunicare tra di loro: questo aspetto è importante perché rientra in quella che poi verrà definita proprio Unix Philosophy, ossia la filosofia di Unix, che consiste nello sviluppare sistemi informativi cercando di massimizzare la modularità e non fare dei programmi monolitici che sono in grado di risolvere un solo problema ma cercare di suddividere il problema è in tanti programmi diversi che possono quindi essere riutilizzati per realizzare, collaborando, servizi differenti.

La Inter Process Communication consente di implementare dei sistemi informativi in cui i processi siano effettivamente modulari; per comprenderla facciamo un esempio: sappiamo che per sviluppare un'applicazione web che abbia la necessità di memorizzare delle informazioni su un database è necessario avere un server web, un interprete di un certo linguaggio di scripting PHP o un ambiente di esecuzione di un'applicazione web come Tomcat, oltre a un database. Queste tre entità comunicano tra loro scambiandosi dati al fine di implementare un servizio comune: in questo caso, l'applicazione web.

Questi tre servizi sono di fatto dei processi che girano sul nostro server in multitasking, contemporaneamente, e comunicano tra di loro attraverso dei meccanismi di comunicazione interprocesso, che è poi là Inter Process Communication.

Essa può essere implementata ad esempio con le pipe, gli Unix socket ecc.

IL PROGETTO GNU E LA FSF

Un altro momento fondamentale della storia di Linux è il progetto Blue: nel 1983 Richard Stallman decide di intraprendere una “crociata” contro le implementazioni proprietarie e contro il software chiuso; quindi di fatto inizia una battaglia che ha delle implicazioni delle ramificazioni del mondo moderno notevoli, con l'obiettivo di rendere il software aperto e libero.

Allora, nel 1983 nasce inizia il progetto Blue con l'obiettivo di riscrivere un sistema operativo Unix-like completamente open source, completamente aperto e di fatto il progetto ottiene un notevole successo perché si scrisse un compilatore C da zero (il famoso GCC) e tutta una serie di librerie a supporto della compilazione linguaggio C.

Nel 1983, dunque, nasce GNU, implementazione aperta e libera di Unix, che consentirà agli sviluppatori di tutto il mondo di mettere mano al codice di Unix sviluppando kernel personalizzati e adattabili ad hardware più “semplici” di quelli per cui Unix nasceva.

GNU è un sistema operativo distribuito come software di libero utilizzo; di norma il software libero è rilasciato con una licenza di utilizzo che normalmente è la GNU General Public License (GNU GPL). La documentazione per il software libero deve essere documentazione libera, in modo che si possa distribuire e migliorare assieme al software che essa descrive.

La licenza spiega agli utenti come possono utilizzare un prodotto e, nel caso specifico, un software ai fini didattici, sperimentali, commerciali, affinché possa essere incorporato e integrato in qualcosa di più complesso.

Lo sviluppo di GNU ha reso possibile utilizzare un computer senza fare affidamento su software proprietario.

Quando si parla di Linux, essendo, esso, nato da GNU, è opportuno chiamarlo GNU/Linux.

GNU ("GNU's Not Unix") è un sistema operativo Unix-like ideato nel 1984 da Richard Stallman e promosso dalla Free Software Foundation (fondata dallo stesso Stallman nel 1985) anche detta FSF, allo scopo di ottenere un sistema operativo completo utilizzando esclusivamente software libero.

Allo stesso Richard Stallman si deve la clausola Copyleft; la GPL, che è una delle licenze più utilizzate nella storia del free software, in realtà include una clausola Copyleft che costringe sostanzialmente chi adotta un lavoro concesso in licenza GPL ad adottare lo stesso (o compatibile) tipo di licenza nelle opere derivate. Per quanto il proposito di Stallman fosse buono, tale vincolo ha spinto la comunità di sviluppatori a cercare licenze meno vincolanti e sono apparse e sono state consolidate licenze più permissive come la licenza Apache Software o BSD. Da tempo, licenze permissive (che non includono clausole copyleft) hanno guadagnato una significativa attrattiva nella comunità del software.

A parte questa considerazione, torniamo a GNU, i cui componenti sono:

  • compilatore C (GCC);
  • la GNU C library (glibc);
  • coreutils;
  • binutils;
  • la shell Bash;
  • Kernel? GNU Hurd… / Linux.

Dato che GNU Hurd, il kernel ufficiale del progetto, non è considerato pronto per la distribuzione, GNU viene in genere utilizzato congiuntamente ad altri kernel tra cui Linux, Linux-libre, XNU o quello utilizzato da FreeBSD.

La parola GNU si pronuncia /gnu:/ (gh-nù) e non /ɲu:/ per non confonderlo con l'omonima specie animale o con l'aggettivo inglese new.

Minix

Lo sviluppo e il debug di un sistema operativo multiprogrammato e che funzionasse come Unix fu arduo e si arrivò presto a un punto di stallo; il progetto Linux troverà nuova vita quando un informatico finlandese scriverà un kernel Linux basandosi sul compilatore e sulle utility già sviluppate in seno al progetto.

Ma ciò accadde dopo la nascita di Minix, altro momento storico della storia di Linux: era il 1987, quando A. Tanenbaum rilasciò MINIX (Mini Unix, cosiddetto perché a differenza di Unix nasceva per funzionare su PC IBM e compatibili e quindi per architettura i286 e i386) nella sua prima release 1.0. Minix era ed è un sistema operativo didattico, a supporto del corso di sistemi tenuto dallo stesso Tanenbaum. Scritto originariamente solo per PC IBM compatibili, oggi è disponibile per una gran varietà di architetture hardware.

A differenza dell’Unix del progetto Blue, Minix non è un sistema operativo sviluppato con lo scopo di girare effettivamente su mainframe o di offrire servizi particolari, ma venne scritto e sviluppato da un docente universitario come sistema operativo didattico come un caso d'uso concreto qualcosa da mostrare a supporto del proprio corso di sistemi operativi.

Nel 2015 Intel ha iniziato a utilizzare MINIX 3 per la IME (Intel Management Engine) delle sue CPU x86, oggetto di qualche polemica perché in termini di sicurezza si sono scoperte delle vulnerabilità sulla e-mail dovute a “ingenuità” nel nello sviluppo; ma non si possono fare colpe allo sviluppatore perché Minix non è mai stato concepito per essere un prodotto commerciale, adottato in quel componente della CPU che purtroppo un componente di bassissimo livello Perché di fatto è un piccolo sistemino a latere che governa le operazioni della CPU e può accedere a praticamente ogni risorsa di calcolo della macchina senza che la vera CPU e il loro sistema operativo ne sappia nulla.

Il kernel Linux

Passaggio epocale nella storia di Linux è la creazione del suo kernel, avvenuta nel 1991 ad opera di Linus Torvalds rilascia un kernel per PC 386 inedito, ed alcune utility GNU (GCC e Bash) ricompilate per questa nuova piattaforma.

La vulnerabilità di Minix è uno dei motivi per cui nasce Linux: infatti l'autore della prima versione del kernel di Linux, Linus Torvalds, è un informatico finlandese che all'epoca (1991) era uno studente di informatica che usava Minix in seno ai suoi studi universitari e un po’ per studio è un po’ per mettersi alla prova, iniziò a sviluppare un kernel differente da Minix, ispirato a Unix e compatibile con il progetto GNU.

Torvalds annunciò di aver creato Linux su una BBS, invitando chiunque a fornire suggerimenti, fornendo il codice sorgente e iniziando a effettuare il porting del codice stesso su varie macchine.

Adattò il compilatore e la shell (interfaccia utente) è per questo nuovo ambiente creando così un sistema operativo minimale ma completo.

Quindi, di fatto Linus Torvalds offre il modulo mancante al progetto GNU e che presto si rivela il progetto di successo rispetto al kernel del progetto GNU e per alcune scelte progettuali Linux è un kernel molto più semplice.

Linux è sistema operativo Unix-like ed è un progetto completamente open source, rilasciato con licenza GPL; essendo la combinazione di GNU e del lavoro di Torvalds, Linux è meglio noto come GNU/Linux.

I sistemi operativi Unix-like sono dei progetti che si ispirano alle linee guida dei primi Unix e sono di fatto delle riscritture, ossia dei software compatibili che si comportano allo stesso modo di Unix ma non sono Unix e quindi non sono basati su quel sul codice sorgente del sistema operativo.

Utilizzo di Linux

Oggi siamo veramente circondati da Linux: magari non lo sappiamo neanche perché molti sistemi embedded sono basati su Linux e quindi diversi dispositivi Internet of Things, la stragrande maggioranza di dispositivi di rete anche di uso domestico come router Access Point, IP Cam e quant'altro, sistemi di infotainment (ad esempio quelli a bordo degli aerei, ossia gli schermi attraverso cui è possibile vedere dei film) spesso sono implementati con dei sistemi embedded che fanno girare una personale versione di Linux.

Ma Linux governa anche sistemi per la domotica, le nostre Smart-TV e ovviamente dispositivi mobile basati su Android che tutti conosciamo e che utilizza Linux come kernel e alcune applicazioni del progetto GNU per funzionare. Ma ci sono poi anche altri progetti come FirefoxOS

e Nokia Maemo.

Linux è utilizzato in ambito desktop anche se non con una grande diffusione, ma sappiamo che esistono diverse distribuzioni per Personal Computer, Server e anche mainframe. Per quanto riguarda l'ambito di high performance computing, praticamente la maggioranza ha quasi totalità dei supercomputer oggi presenti sul pianeta fanno girare una qualche versione di Linux.

Distribuzioni Linux

Una piccola nota su come viene distribuito il software disponibile per questa piattaforma: siccome Linux è un progetto aperto che chiunque può personalizzare e ridistribuire, in ambiente Linux si usa parlare di “distribuzioni” cioè di collezioni di software che permettono di installare il sistema operativo basato su Linux corredato da una serie di applicazioni compilate per quell’ambiente, che permettono di svolgere un test specifico.

Quindi, proprio per la natura del progetto che è aperta e che invita chiunque a personalizzare, modificare, esistono tantissime distribuzioni e ad oggi se ne contano più di 800.

Banner

Ci sono distribuzioni che si differenziano perché la loro utenza di riferimento e un’utenza  commerciale che magari ha bisogno di supporto anche a pagamento e ci sono distribuzioni che sono disponibili solo per alcune piattaforme o per alcune architetture o distribuzione che sono certificate per girare su una certa architettura e quindi in quel caso sceglieremo una distribuzione che va bene per la nostra piattaforma.

Poi le distribuzioni si differenziano per le funzionalità: oltre a distribuzioni generali che vanno bene per implementare qualunque tipo di servizio, ci sono distribuzioni altamente specializzate: per esempio ci sono distribuzioni che consentono di implementare un firewall di sistema e fanno solo quello, firewall di rete o distribuzioni che consentono di riutilizzare un vecchio PC come NAS, per esempio, quindi sono altamente specializzate. Altre, invece, possono essere utilizzate per scopi più generici, perché dispongono di una collezione di software più ampia.

Altro aspetto da considerare nella scelta della distribuzione Linux da adottare sono le politiche di gestione del progetto: se c'è dietro una community di appassionati, piuttosto, che è un'azienda che ha interesse a promuovere un prodotto con delle scadenze precise e delle linee guida per il supporto.

Quando parliamo di Linux non parliamo di un sistema operativo ma di una famiglia di sistemi operativi, per cui poi la scelta del sistema da utilizzare, in particolare passa attraverso l'individuazione della distribuzione più adatta ai nostri scopi.

Possiamo così riassumere il market share di Linux:

  • desktop: ~8,5%;
  • web server: da 60 a 90%;
  • Mobile: > 80%
  • Supercomputer: 100% dei top 500.

Oggi i dati sui web server sono discordanti perché ci sono talmente tanti siti web, che è veramente difficile mantenere delle statistiche aggiornate.

A livello di Personal Computer desktop la diffusione è bassa perché per politiche commerciali piuttosto aggressive, parte dei PC che si possono acquistare esce con un sistema operativo, quindi molti utenti non sanno neanche che ne esistono altri... che esiste Linux.

Inoltre Linux viene ancora percepito come un sistema operativo più da addetto da addetti ai lavori.

Sicurezza di Linux

Però è diffusa l’opinione che sia un sistema operativo sicuro. In realtà, come affermava G. Spafford “L’unico sistema realmente sicuro è un sistema spento”  perché data la complessità del software e dell'hardware odierni è sempre possibile, quantomeno probabile, che si possano individuare azioni che l'utente può effettuare o che i programmi possono effettuare autonomamente, capaci di portare direttamente o indirettamente a compromettere la sicurezza del sistema; e la storia ci insegna che sia in ambito di Personal Computer che di grandi mainframe, a volte si tratta di problemi di sicurezza legati a delle ingenuità da parte degli sviluppatori ed altre si tratta veramente di problemi di sicurezza che si evidenziano dopo aver effettuato delle analisi e degli studi molto approfonditi sulla faccenda.

Un esempio è il recente caso delle vulnerabilità di diverse architetture, in primo luogo delle x86  Intel, ma poi si è visto che anche altre CPU sono affette da problemi analoghi che sono stati battezzati Spectre e Meltdown.

Parliamo di CPU perché uno degli aspetti da considerare è che la sicurezza di un sistema informatico non è soltanto data dal sistema operativo, ma da tutte le sue componenti, quindi il sistema operativo può essere il più sicuro del mondo ma se l'hardware di per sè ha delle vulnerabilità, queste potranno essere sfruttate. L'esempio lampante è proprio quello di spectre e meltdown: si tratta di due vulnerabilità di sicurezza individuate inizialmente sull’architettura x86, ma poi si è visto che delle varianti di questi sistemi di attacco si possono implementare anche per altre architetture (anche sulla diffusissima ARM). Tali attacchi sono modi di ottenere delle informazioni che non dovrebbero essere accessibili e si tratta di modalità di interazione con la CPU che invece permettono a un malintenzionato di ottenere indirettamente queste informazioni.

Le vulnerabilità riguardano una particolare modalità di esecuzione dei programmi all'interno della CPU che oggi è di uso comune perché è un espediente che consente di massimizzare le prestazioni dei nostri sistemi informatici: si tratta della esecuzione fuori ordine e in particolare dell'esecuzione speculativa: questi due termini significano in pratica che i programmi che facciamo girare sulle nostre macchine non vengono eseguiti in modo sequenziale, cioè istruzione per istruzione come sono stati scritti, perché le CPU moderne sono dotate di unità molto complesse che eseguono le istruzioni non appena le unità in grado di eseguirle sono disponibili, invece che seguendo il flusso logico del programma. L'unità di esecuzione speculativa fa proprio questo: dato un programma in ingresso, decide in modo probabilistico se eseguire un'istruzione piuttosto che un'altra e poi ricompone i risultati alla fine.

Quindi per qualsiasi sistema operativo e neppure per Linux possiamo dire che sia sicuro in senso assoluto, perché dipende dall'hardware sottostante.

Esistono virus per Linux?

Altri due esempi noti negli ultimi tempi sono gli attacchi ShellShock ed HeartBleed: si tratta di vulnerabilità che hanno riguardato invece degli applicativi: nel primo caso la shell e nell'altro il layer TLS, che vengono comunemente utilizzati anche in ambiente Linux ma che non riguardano il sistema operativo Linux di per sè.

La sicurezza del sistema operativo c'entra fino a un certo punto perché ancora una volta è tutto l'ambiente che deve essere sicuro. Quindi se le nostre applicazioni se i programmi che facciamo girare non sono sicuri possono diventare vettore di attacchi.

Ma perché, allora, si parla di Linux? Perché viene percepito come un sistema operativo sicuro? La risposta è nel principio del Security through obscurity, cioè la sicurezza insita nel fatto che non si conoscono i dettagli di un sistema operativo, quindi pensare che è un sistema operativo proprietario sia più sicuro perché nessuno ha a disposizione i codici sorgenti e quindi l'analisi del comportamento dello stesso risulta più complessa, è in realtà un argomento a favore della sicurezza. Infatti si è visto che è un sistema operativo open source invece è in genere più sicuro perché molte più persone possono revisionare il codice sorgente è accorgersi se ci sono degli eventuali problemi di sicurezza e soprattutto possono intervenire in caso di vulnerabilità dichiarate: per esempio in ambiente Linux le prime patch o i primi workaround per rendere sicure le macchine affette da spectre e meltdown sono state rilasciate in ambiente Linux.

Poi esistono dei progetti nati apposta per rendere il sistema operativo sicuro e uno di questi è il progetto SELinux, che è un modulo contenente una serie di estensioni nate per il sistema operativo che governano il modo con cui esso offre servizi alle applicazioni e agli utenti; in particolare si tratta di un modulo che funziona per regole e dà al sistema operativo la possibilità di offrire un determinato servizio a un'applicazione o a un utente a meno che l'amministratore di sistema non abbia esplicitamente indicato delle regole che lo consentano.

Cio è ampiamente diffuso in ambito Linux perché effettivamente permette di avere maggiore controllo sulle attività del sistema e sui servizi offerti agli utenti e alle applicazioni.

Compatibilità di Linux

Linux non solo è un sistema operativo estremamente diffuso perché può essere facilmente plasmato e adattato a vari hardware (da uno smartphone a un mainframe), ma è anche un sistema che a una certa interoperabilità con altri ambienti. Intanto ricordiamo che un sistema che si compila e ciò significa che si integra bene in ambienti dove sono presenti altri Unix.

Questo vale non soltanto per l’interoperabilità tra macchine, ma soprattutto per l’interoperabilità tra persone: un sistemista abituato a gestire un sistema Unix non avrà grosse difficoltà a gestire un sistema Linux e inoltre esistono diversi progetti nati proprio per garantire la maggiore interoperabilità tra sistemi Linux. Ad esempio Samba è un progetto molto noto che permette a un server Linux di integrarsi in una rete Windows; addirittura è possibile utilizzare un server Linux con Samba per implementare un Domain controller Windows, quindi poter gestire una rete Windows senza avere Windows Server, ma utilizzando Linux al suo posto.

Poi esistono dei layer di compatibilità che permettono ad esempio in ambiente PC di far girare applicazioni nate per windows su Linux: è questo il progetto Wine e da qualche tempo c'è la possibilità di fare anche il contrario, grazie al WSL, che un layer di compatibilità sviluppato da Microsoft, grazie al quale è possibile far girare binari eseguibili per Linux in ambiente Windows.

Banner

Questi due progetti sono molto interessanti perché non si tratta di virtualizzazione (niente macchina virtuale...) ma di emulazione di sistema; si tratta di un layer che permette di prendere un file binario eseguibile per una certa piattaforma così com'è e farlo girare in un altro ambiente. Ovviamente questi eseguibili devono essere compilati per quella particolare architettura, cioè non si può pensare di prendere un eseguibile per Windows e farlo girare su una macchina Power PC. Però Wine e WSL permettono di nascondere all'applicazione il fatto che non si trova nel suo ambiente nativo, ma opera in un ambiente completamente diverso e questo effettivamente permette di avere maggiore interoperabilità, cioè consente di integrare un client Linux, per esempio all'interno di una realtà in cui non si utilizza un'applicazione che è scritta per un altro sistema operativo.