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)