INTRODUZIONE A GNU/LINUX
E AL SOFTWARE LIBERO
Loris Tissino
Categorie di software
●
Software di sistema
• Sistema operativo (kernel)
• Altro software
–
–
–
–
●
Interprete dei comandi (shell)
Sistemi a finestre (GUI, graphical user interface)
Software di rete
Editor, compilatori, ecc.
Software applicativo
• I programmi che svolgono attività utili per l’utente finale
Sorgente ed eseguibile
•
Codice sorgente
• programma scritto in un "linguaggio di programmazione ad alto
livello"
– (es. C, C++, Pascal, Visual Basic).
•
• leggibile da un essere umano (che conosca il linguaggio
utilizzato)
• è la forma preferenziale per modificare il lavoro
Codice eseguibile
• ottenuto tramite il processo di compilazione
• è in "linguaggio macchina"
• le istruzioni vengono direttamente eseguite dal processore
Funzioni del sistema operativo
●
Nascondere la complessità e la varietà dell'hardware
• “macchina astratta”
• fornitura di system calls generiche, adattabili ai diversi dispositivi
●
Gestire le risorse ed i conflitti
• rispetto al tempo (turni nell'uso)
• rispetto allo spazio (es. memoria, disco)
Unix e Linux: un po' di storia
●
●
●
●
●
MULTICS
UNIX
MINIX
GNU/HURD
LINUX
MULTICS
●
Fine anni '60
• Laboratori Bell, MIT e General Electrics
• MULTICS
– MULTIplexed Information and Computing System
– progetto: centinaia di utenti su una macchina poco più potente di
un 386
UNIX
●
Inizio anni '70
• Laboratori Bell (Ken Thompson)
• Prima versione in assembler per un PDP7
●
1973
• Versione riscritta in linguaggio C (appositamente inventato)
●
Anni '70-'80
• Proliferazione di versioni diverse
– Berkley Unix; System V (AT&T); AIX; XENIX; Sun Solaris
• Reti TCP/IP
●
Fine anni '80
• Esigenza di standardizzazione (Posix, Portable Operating
System)
MINIX
●
1987
• Sistema operativo "didattico" pubblicato da Andrew Tanembaum
• Struttura a microkernel
LINUX
●
1991
• Pubblicato da uno studente finlandese, Linus Torvalds, per
studiare il funzionamento del suo nuovo PC con processore 386
• Struttura monolitica
●
1992
• gennaio: kernel 0.12 pubblicato con licenza GNU GPL
• marzo: rilascio del kernel 0.95
●
1994
• marzo: kernel 1.0
●
1995
• kernel 1.2; nuovo file system ext2
LINUX
●
1996
• giugno: kernel 2.0
• supporto per piattaforme diverse e macchine multiprocessore
●
1999
• gennaio: kernel 2.2
●
2001
• gennaio: kernel 2.4
• supporto USB, nuovi file system
Le libertà relative al software
•
•
•
•
libertà 0
• eseguire il programma per qualsiasi scopo
libertà 1
• modificare il programma per adattarlo alle proprie esigenze
• (accesso al codice sorgente)
libertà 2
• ridistribuire il programma a chiunque
• (libertà di copia)
libertà 3
• migliorare il programma e rilasciare le versioni modificate
• (a vantaggio degli utilizzatori successivi)
Alcuni termini che si usano
... e su cui è bene fare chiarezza
• Software "open source" (a sorgente aperto)
• Software "public domain" (non coperto da copyright)
• Software con "copyright" (soggetto a diritto d'autore)
• Software copylefted (con "permesso d'autore")
• Software con licenza GNU GPL
• Software parzialmente libero
• Freeware
• Shareware
• Software commerciale
• Software proprietario (non libero)
La licenza GPL
GNU General Public License
• Libertà d'uso del software
• Disponibilità del codice sorgente
• Libertà di copia
•
•
• Obbligo di mantenere la nota di copyright
Libertà di rilascio di versioni modificate
• Obbligo d'uso della stessa licenza per le versioni modificate
Assenza di garanzia
GNU/Linux
•
•
Distribuzione Linux
•
•
•
•
Kernel (GPL)
Utilities, compilatori, ecc. (GPL), dal progetto GNU
Altro software con diverse licenze
Processo di installazione / aggiornamento particolare
Alcune distribuzioni Linux:
•
•
•
•
•
•
•
Debian
RedHat
Mandrake
SuSE
TurboLinux
Caldera
...
Caratteristiche dei sistemi UN*X
●
Modularità e flessibilità
• piccole componenti che svolgono piccoli compiti nel modo
corretto
• grandi cose realizzate assemblando nel giusto modo i
“mattoncini”
●
●
“File” e processi alla base di tutto
Multiprogrammazione e multiutenza
“The Unix philosophy” (Eric Raymond)
1. Modularity: Write simple parts connected by clean
interfaces.
2. Clarity: Clarity is better than cleverness.
3. Composition: Design programs to be connected to
other programs.
4. Separation: Separate policy from mechanism; separate
interfaces from engines.
5. Simplicity: Design for simplicity; add complexity only
where you must.
6. Parsimony: Write a big program only when it is clear
by demonstration that nothing else will do.
7. Transparency: Design for visibility to make inspection
and debugging easier.
“The Unix philosophy” (Eric Raymond)
8. Robustness: Robustness is the child of transparency
and simplicity.
9. Representation: Fold knowledge into data so program
logic can be stupid and robust.
10. Least Surprise: In interface design, always do the
least surprising thing.
11. Silence: When a program has nothing surprising to
say, it should say nothing.
12. Repair: When you must fail, fail noisily and as soon as
possible.
13. Diversity: Distrust all claims for 'one true way'.
14. Extensibility: Design for the future, because it will be
here sooner than you think.
Interazione con Linux
●
Shell (testo)
• riga di comando
• grafica in formato testo
• diverse versioni:
–
–
–
–
●
Bourne
Korn
C-shell
Bourn Again Shell (bash)
Finestre e desktop (GUI)
Finestre e desktop
●
X-Window
• sistema client/server per l'esecuzione di applicazioni
●
Window manager
• sistema per standardizzare il funzionamento delle applicazioni
dal lato grafico
●
Desktop Environment
• sistema per standardizzare l'interfaccia delle applicazioni e
fornire strumenti di amministrazione coerenti del desktop
I due ambienti desktop "concorrenti"
●
●
GNOME (GNU Network Object Model Environment)
KDE (K Desktop Environment)