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 lutente finale
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 Sorgente ed eseguibile
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 PDP 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 marzo: kernel kernel 1.2; nuovo file system ext2
LINUX 1996 giugno: kernel 2.0 supporto per piattaforme diverse e macchine multiprocessore 1999 gennaio: kernel 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)