\articolo{Il sistema operativo Linux}{Carlo Daffara}
\index{Daffara!articolo di}

\paragrafo{Introduzione}

Linux\index{Linux} \`e un clone del sistema operativo
Unix\index{Unix} interamente riscritto per semplificarne la struttura
interna da un giovanissimo studente di Helsinki,
{\em Linus Torvalds\index{Torvalds, Linus}} (da cui il nome). \`E un
sistema operativo multitasking e multiutente, facilmente portabile sulle
pi\`u diverse architetture richiedendo soltanto la disponibilit\`a di una
unit\`a di gestione della memoria in grado di manipolare pagine (PMMU).
Oltre alla versione per PC Intel (sicuramente la pi\`u matura e stabile tra
tutte) sono comparsi di recente i port per Digital Alpha, Motorola 68000 e
PowerPC, Sun SPARC, i processori della MIPS e gli ARM. Attualmente Linux
\`e in grado di gestire il multiprocessing simmetrico su Intel e SPARC
(esiste persino una versione per i supercomputer Fujitsu AP1000+ basati su
SPARC) ed \`e in grado di gestire un limitato grado di clustering usando i
sistemi MPI e PVM.

\paragrafo{Struttura del kernel}
Linux si discosta in molti modi dallo standard dei sistemi Unix (sia
commerciali che freeware, come FreeBSD\index{FreeBSD}) in particolare per
quello che riguarda la struttura del kernel.

Normalmente uno Unix si riconosce dalla struttura del nucleo, che pu\`o
essere ``microkernel'' o ``monolitico''. Il sistema microkernel riduce al
minimo il numero di servizi che il kernel \`e in grado di offrire, e
sposta in processi esterni (server) gli altri servizi (il networking, la
gestione delle periferiche ecc.) Un particolare degno di nota: una volta
caricato un microkernel con tutte le funzioni richieste da una workstation
Unix, si ottiene di solito un sistema operativo pi\`u voluminoso di un
sistema monolitico, a dispetto del prefisso ``micro''.

In questo modo si aumenta di molto il grado di modularit\`a e sicurezza
del sistema, ma nel contempo si peggiorano di molto le prestazioni e la
complessit\`a, visto che ogni richiesta di accesso a un servizio deve
passare tramite interfacce pi\`u complesse e in generale non cos\`{\i}
immmediate come se tutti i servizi fossero interni al kernel.

I kernel monolitici invece sono un ``blocco unico'', e quindi tendono a
essere pi\`u efficienti, ma ci\`o significa anche che un bug all'interno
di uno dei componenti pu\`o bloccare l'intero kernel, e inoltre significa
che per aggiungere funzioni al kernel \`e necessario ricompilare l'intero
sistema.

Linux cerca di trovare un compromesso tra queste due realt\`a ottenendo un
sistema modulare, in cui i componenti interni del kernel possono essere
caricati e scaricati in qualunque momento (e quindi non solamente al boot)
sotto il controllo di un particolare processo, detto ``kernel daemon'' che
si occupa di gestire le richieste verso il kernel e caricare in modo
completamente automatico i frammenti di codice necessario a esaudirle. In
questo modo si pu\`o conciliare l'esigenza di velocit\`a (kernel
monolitico) con quella di semplicit\`a di gestione e amministrazione
(microkernel).

\paragrafo{Il supporto Java}

Il linguaggio (e la macchina virtuale con lo stesso nome) sviluppato dalla
Sun ha immediatamente riscosso un grande interesse nella comunit\`a di
programmatori Linux; nel giro di pochi mesi si \`e creato un gruppo
(chiamato ``jolt'' dal nome di una delle bibite con maggiore
contenuto di caffeina in vendita negli USA) che nel corso di pochi mesi ha
creato una macchina virtuale Java\index{Java} dotata di compilatore
{\em Just-In-Time} integrato e un compilatore Java (basato sul motore di
compilazione del GNU C++). \`E in corso di realizzazione una Class Library
compatibile con quella della Sun ma priva dei vincoli di ridistribuzione.

Successivamente \`e stato integrato direttamente nel kernel il supporto
diretto per i binari Java --- si tratta in realt\`a di una semplice
estensione del sistema loader/linker nativo di Linux, a cui viene aggiunta
la capacit\`a di riconoscere il formato Java e la capacit\`a di invocare
la Java virtual machine passandogli direttamente l'applet caricato. In
questo modo usare un applet Java diventa semplicissimo, in quanto basta
invocarlo come qualunque altro file binario. A questo si aggiunger\`a con
il completamento del sistema Jolt\index{Jolt} un completo ambiente di
sviluppo ed esecuzione slegato dalle problematiche di licensing della Sun.

\paragrafo{Il modello di realizzazione ``distribuito''}
Forse pi\`u interessante delle caratteristiche puramente tecniche di Linux
\`e il modello di collaborazione ``distribuito'' che ha decretato il
successo di Linux. A differenza di altri cloni di Unix (FreeBSD, NetBSD ad
esempio), chiunque pu\`o collaborare per estendere il sistema operativo
nella direzione che ritiene pi\`u opportuna, aggiungendo funzionalit\`a di
base (le pi\`u recenti sono il plug \& play e le estensioni Real Time)
oppure driver per le periferiche e le schede non ancora supportate,
programmi di gestione, applicativi o semplicemente documentazione.

L'intera gestione di Linux \`e divisa in ``progetti'', gestiti solitamente
da organizzazioni o gruppi di persone diverse. Ad esempio il kernel in
s\'e (il Linux vero e proprio) viene gestito da Linus Torvalds e alcuni
altri collaboratori che coprono le diverse aree di lavoro (system,
networking, $\ldots$), le utility di sistema sono gestite da una
organizzazione esterna, la Free Software Foundation
\index{Free Software Foundation} (che ha realizzato tra le altre cose
l'editor EMACS e il compilatore C/C++) mentre per l'interfaccia grafica \`e
responsabile il gruppo Xfree\index{Xfree}.

Il fatto che ognuno dei gruppi abbia acconsentito a rendere pubblicamente
ridistribuibili i sorgenti dei vari pacchetti ha consentito in tempi molto
brevi la creazione di vere e proprie ``suite'' di programmi
preconfigurati, che nel mondo Linux vengono chiamate ``distribuzioni''. Ne
esistono sia di commerciali che di gratuite. Esse differiscono sia per il
grado di sofisticazione che per l'orientamento --- per esempio per uso
personale --- o per creare server internet.

Da poco sono nate anche distribuzioni commerciali a valore aggiunto, in
cui ai programmi gratuiti disponibili in rete vengono aggiunti dei
programmi commerciali come Wordperfect, Mathematica, Maple V,
MatLab, la suite Applix (un set di programmi molto simile a Microsoft
Office) e quella della Cliq. Il poter disporre liberamente dei sorgenti e
poter contribuire alla loro stesura o correzione liberamente ha consentito
un notevole progresso sia in termini di bug-fix che di feature, visto che
il numero di beta tester potenziale \`e enorme.

\paragrafo{I problemi}

A fronte di un grande successo nel tradizionale circolo degli ``esperti'',
Linux non si \`e ancora imposto come sistema operativo general-purpose.
Questo per diversi motivi:

\begin{itemize}
\item{\`e meno pubblicizzato;}
\item{\`e pi\`u difficile da installare rispetto ai sistemi concorrenti;}
\item{richiede pi\`u risorse (specialmente in termini di RAM);}
\item{\`e diverso da DOS e Windows;}
\item{vi \`e meno documentazione, spesso solo in inglese.}
\end{itemize}

Diversi gruppi di lavoro (sia di volontari che commerciali) si sono
attivati per far fronte a questi problemi. In particolare
Caldera\index{Caldera} Inc. ha creato una distribuzione Linux completamente
automatizzata, e molto semplice da installare (a fronte di un costo di 99
dollari). Per risolvere il problema della documentazione molti user group
nazionali hanno cominciato a tradurre i manuali che vengono distribuiti con
Linux, e sono gi\`a comparse le versioni italiane (a cura del gruppo Pluto
dell'universit\`a di Padova) e tedesca, mentre sono in corso di
preparazione le versioni in spagnolo e francese. Inoltre molti dei pi\`u
importanti editori hanno cominciato a pubblicare libri sul Linux (O'Reilly
and Associates, McGraw-Hill e altre) e diverse riviste sono dedicate
esclusivamente a Linux oppure dedicano ad esso una sezione.

\paragrafo{Utilizzi di Linux}

Linux viene attualmente impiegato in campi molto diversi, soprattutto come
sostituto pi\`u economico o pi\`u efficiente di un server o workstation
Unix. Molti fornitori Internet utilizzano esclusivamente macchine Linux,
visto anche il gran numero di pacchetti dedicati a semplificare le
procedure di gestione e manutenzione di un nodo.

Linux rappresenta un'ottima alternativa agli X Terminal, ossia a quei
terminali grafici dedicati che utilizzano il protocollo X11\index{X11} (il
sistema grafico di Unix) per gestire l'utilizzo remoto di un server.
Qualunque macchina in grado di far girare Linux svolge ottimamente sia il
ruolo di X Terminal che di X server, senza alcun costo aggiuntivo (a
differenza delle soluzioni proposte da Microsoft e Citrix per WindowsNT).

Un altro uso molto diffuso \`e quello di computational server, ossia di
macchina dedicata allo svolgimento di calcoli o compiti particolarmente
onerosi. Ovviamente questo pu\`o essere fatto se il software di calcolo
gira sotto Linux oppure se \`e disponibile il sorgente del software
stesso, cosa in generale vera specialmente per i grossi programmi di
simulazione e calcolo scientifico. Il poter disporre di compilatori
gratuiti e di buona qualit\`a consente inoltre di eseguire il porting
degli applicativi in tempi molto ridotti e senza affrontare spese
ulteriori. Nel caso in cui i compilatori nativi non siano sufficienti,
diversi costruttori hanno negli ultimi sei mesi proposto diversi nuovi
sistemi di sviluppo professionali, portati direttamente dall'ambiente
delle workstation.

La spiccata apertura verso il networking ne fa degli ottimi server
applicativi per Windows for Workgroup, Windows 95 e NT. Esiste un'ottima
implementazione freeware del protocollo SMB\index{SMB} (denominata
Samba\index{Samba}, di cui esiste un port anche per AmigaOS) usato da questi
sistemi operativi, che unita alle altre implementazioni
(netatalk\index{NetATalk} per i sistemi Apple, mars\_nwe per Novell
Netware) consente la creazione di server multipiattaforma che semplificano
di molto il processo di integrazione tra reti eterogenee.

L'uso di Linux in quanto ``macchina da ufficio'' \`e invece molto pi\`u
recente e in un certo senso non cos\`{\i} ben sviluppato. Le suite (stile
Office) sono comparse solo da poco e ad eccezione della suite Applix (da
molti anni sul mercato) le altre vanno considerate pi\`u che altro come
beta test di prodotti che saranno pronti all'inizio del 1997.

Alla maggiore complessit\`a di installazione (che solitamente viene
eseguita da un tecnico specializzato) si affianca per\`o una maggiore
capacit\`a di controllo e di gestione, sia per cose marginali
(l'interfaccia utente pu\`o essere cambiata a piacere, da stile Motif a
stile Windows 95 a NeXT) sia per quello che riguarda la personalizzazione
dell'ambiente di lavoro. Ogni aspetto di Linux pu\`o essere modificato e
configurato, e questo pu\`o essere fatto in modo centralizzato riducendo
di molto i costi di gestione di molte macchine collegate.

\paragrafo{Conclusioni}

\`E ovvio come Linux non cerchi di sostituire altri sistemi operativi,
quanto soprattutto di occupare con un sistema operativo stabile e potente
quelle nicchie particolari e attualmente non ben servite del mercato.
Nell'ambiente home invece Linux \`e da tempo diventato il sistema
preferito di appassionati di informatica e ``smanettoni'', curiosamente
riducendo l'interesse delle ditte per gli aspetti commerciali dello
stesso. Nonostante la scarsa pubblicit\`a, diverse ricerche hanno
dimostrato la qualit\`a di Linux come sostituto di sistemi Unix
tradizionali (ad esempio in Byte, Ottobre '96, dove Linux \`e stato
giudicato a pari merito di Solaris\footnote{{\it Solaris} è il sistema
operativo Unix System V Release 4.0 di Sun.} e HP-UX, due sistemi Unix maturi e molto
utilizzati in ambiente corporate).

Le prossime evoluzioni di Linux si concentreranno in particolare nel
fornire un ambiente di gestione e installazione pi\`u semplice (RPM, il
progetto Teak), aggiungere funzionalit\`a al kernel (in particolare per
quello che riguarda il multithreading e le estensioni real time) e
espandere la base degli applicativi, attualmente dominata in particolare
dagli applicativi tecnico-scientifici, dai sistemi di sviluppo e dal
software per la realizzazione di server.

Su Internet esistono molti siti dedicati a Linux. Eccone alcuni:
\begin{flushleft}
\small
\path|http://www.linux.org|\\
\path|http://www.dei.unipd.it/it/linux/pluto.html|\\
\path|http://http://www-users.informatik.rwth-aachen.de/~hn/linux68k.html|\\
\end{flushleft}

\autore{Carlo Daffara\\
Conecta Telematica\\
e-mail: \c{cdaffara@mail.conecta.it}}{}

\citazione{\selectlanguage{english}
{\rm Ninety-Ninety Rule:}   ``The first 90\% of the code accounts
   for the first 90\% of the development time.  The remaining 10\% of
   the code accounts for the other 90\% of the development time.''}
   {%Attributed to 
   Tom Cargill %of Bell Labs, and popularized by Jon
   %Bentley's September 1985 ``Bumper-Sticker Computer Science''
   %column in ``Communications of the ACM''.  It was there called
   %the ``Rule of Credibility'', a name which seems not to have stuck.
}
