Corso di Informatica Open Source Linux Storia, filosofia e concetti di base Pag.1 di 65 Testo Guida per il corso “Linux” che si è tenuto tra Marzo e Aprile 2008 presso: Istituto Prof.le di Stato per l'Industria e l'Artigianato “Giancarlo Vallauri” Via B. Peruzzi 10 Carpi (MO) in collaborazione con Centro Formazione Professionale CDR EDSEG Città dei Ragazzi Relatore del corso Guandalini Mirko Il presente manuale è stato scritto da LABORATORI AIDAN Via. C.Colombo, 5 Sozzigalli di Soliera (MO) Tel. 059.563.227 Fax. 059.853.091 Email: [email protected] Web: http://www.aidan.it Pag.2 di 65 Indice Sezione 0: Vedere un computer Dimostrazione pratica in sede ● Visione dell'interno di un Computer. ● Dimostrazione di Linux e Windows in funzione. ● Dimostrazione della presenza di Linux su oggetti di uso comune. Sezione 1: Basi ● ● ● Codice sorgente, codice binario, compilatori. Cos'è il BIOS. Cos'è un Sistema Operativo. Sezione 2: Sistemi Closed Source ● ● ● ● Cosa vuol dire Closed Source Come avviene lo sviluppo Closed Source. Come è nata Microsoft e come mai ha il monopolio del mercato. Vantaggi/svantaggi tecnici, economici e sociali del modello Closed Source. Sezione 3: Introduzione all'Open Source ● ● ● ● ● ● ● ● ● L'importanza di avere libertà di scelta. Cos'è uno standard. Standard veri e standard falsi. Cos'è l'Open Source, come è nato e come funziona la licenza GPL. Cos'è Linux, come è nato e come viene sviluppato. Vantaggi/svantaggi tecnici, economici e sociali del modello Open Source. Campi applicativi di Linux. Altri sistemi Open Source. Perché Linux e l'Open Source sono un pericolo per Microsoft. Sezione 4: Come funziona Windows. Come funziona Linux. ● ● ● ● ● ● ● ● ● ● ● ● ● ● Cos'è e come funziona un Kernel. Cos'è un Driver. Driver su Windows, vantaggi e svantaggi. Driver su Linux, vantaggi e svantaggi. Integrazione: come funzionano e cosa sono le librerie. In cosa Linux è migliore di Windows. In cosa Windows è migliore di Linux. Com'è possibile sopperire alla mancanza di certi software esclusivamente per Windows. Hacker e Craker Cosa sono i “Malware”, cosa fanno e perché. Come si difende Windows dai “Malware”. Perché Linux non è soggetto a “Malware”. A quali attacchi è soggetto Linux? Curiosità su Linux. costruiti Sezione 5: Licenze a riconoscimenti. ● Licenza del corso e riconoscimenti vari. Pag.3 di 65 Basi Codice Sorgente, codice binario, compilatori: I microprocessori (chiamati anche CPU), sono il cervello di un computer. Le CPU sono in grando di comprendere ed elaborare solo codice binario, ossia sequenze di Bit. Un bit può avere valore 0 o 1 ed i numeri sono rappresentati secondo la logica booleana (Algebra di Boole: prende il nome da George Boole, matematico inglese 1815-1864). Una sequenza di 8 bit viene chiamata Byte. Ovviamente, per un essere umano, programmare un computer immettendo dentro di esso sequenze binarie è un'impresa a dir poco ardua, sebbene non impossibile (almeno per programmi minuscoli). I primi computer, nati negli anni 70, venivano programmati manualmente impostando 1 Byte tramite una sequenza di 8 interruttori, confermandolo e caricandolo poi in memorira tramite la pressione di un pulsate. Nell'immagine qui sotto si vede il frontalino di un'altair 8800 del 1973 Tuttavia la crescente complessità degli elaboratori e le esigenze dell'industria richiedevano programmazioni sempre più complesse e ben presto vi fu la necessità di creare veri e propri linguaggi di programmazione che fossero facilmente comprensibili dagli esseri umani e che quindi accelerassero il processo di scrittura dei programmi. Ovviamente gli elaboratori continuavano (e continuano tutt'ora) a comprendere solo sequenze binarie. Vennero creati i “Compilatori”. Un compilatore è uno speciale programma per computer capace di accettare in ingresso un programma scritto in un linguaggio “umano” e tradurlo nella forma binaria. Come avviene allora la costruzione di un programma? 1. L'essere umano scrive il programma utilizzando un linguaggio di alto livello, il programma presentato in questa forma viene definito “sorgente” 2. L'essere umano fa elaborare il “sorgente” dal “compilatore” 3. Il compilatore genera un file binario che non è altro che la traduzione del sorgente in sequenze di bit comprensibili direttamente dalla CPU. Otteniamo così il programma in forma binaria (eseguibile), però non è detto che questo programma sia perfetto! Potremmo aver sbagliato qualcosa in fase di programmazione, oppure dopo un po' potremmo renderci conto che ci sono cose migliorabili o che si potrebbero aggiungere. Per effettuare questi miglioramenti sarà necessario intervenire sul sorgente per poi compilarlo nuovamente in quanto, per assunto, il binario risulta incomprensibile. E' ovvio che se smarriamo il sorgente ci sarà impossibile modificare il programma, dovremo riscriverlo da zero. Allo stesso modo ci è impossibile modificare un programma altrui senza possederne il sorgente. Pag.4 di 65 Cos'è il BIOS: Il BIOS è un piccolo frammento software contenuto all'interno di una memoria non volatile (ROM, EPROM, Etc) direttamente inserita nell'hardware del computer. Il compito del BIOS è quello di inizializzare le componenti hardware al momento dell'accensione e successivamente avviare il Sistema Operativo (in gergo fare il bootstrap) da una unità a disco (floppy, cdrom, harddisk). Senza un BIOS il computer non si accenderebbe nemmeno, sarebbe solo un ammasso di circuiti che consuma corrente elettrica senza fare nulla. Cos'è un Sistema Operativo: In informatica il sistema operativo (abbreviato spesso nel suo acronimo SO, o all'inglese OS, operating system) è il programma responsabile del controllo e della gestione dei componenti hardware che costituiscono un computer e dei programmi che su di esso girano. Il sistema operativo mette anche a disposizione dei programmi una interfaccia software per accedere alle risorse hardware (dischi, memoria, I/O in generale) del sistema, ed un vasto insieme di librerie e funzioni alle quali le stesse applicazioni possono accedere. Il compito principale del sistema operativo è quello di permettere all'uomo di interagire direttamente con la macchina. Il sistema operativo quindi è la base su cui girano tutti i programmi e la qualità del sistema operativo è direttamente responsabile delle prestazioni del computer e delle applicazioni che girano su di esso. Cenno storico: Prima dell'avvento del PC, sulla maggior parte dei computer a 8 bit, non vi erano né BIOS né SO, ma solo una ROM da cui avviava direttamente un piccolissimo ambiente operativo che a malapena si può definire sistema operativo. Un esempio: il Commodore 64 All'epoca solo su enormi, costosissimi e potentissimi (per allora) computer, destinati a enti, governi, militari, etc, girava un noto sistema operativo estremamente potente. Questo sistema operativo si chiamava UNIX Nell'immagine sotto un sistema VAX, consumava diversi Kilowatt, sistema a 32bit che solo nei modelli più recenti arrivava ad avere alcuni Mb di memoria ram. Occupava lo spazio di una stanza e per quanto possa sembrare buffo veniva definito “super mini-computer” per le sue “ridotte dimensioni”. Pag.5 di 65 Sistemi Closed Source Cosa vuol dire Closed Source: Si definisce Closed Source un programma “a sorgente chiuso”, ossia un programma di cui si posseggono i binari ma NON i sorgenti, che restano chiusi, di proprietà esclusiva del programmatore che ha creato il programma o dell'azienda per cui lavora. Come avviene lo sviluppo Closed Source: Semplicemente avviene “in privato”: il programma viene scritto da uno o più sviluppatori, solo un circolo chiuso di persone hanno accesso al codice sorgente. Come è nata Microsoft e come mai ha il monopolio del mercato: Microsoft nasce negli anni '70 come minuscola ed insignificante software house composta da sole 3 persone tra cui Bill Gates. Uno dei primi lavori di Microsoft fu la scrittura di un compilatore che permise la programmazione dell'altair 8800 usando il linguaggio Fortran. Ma la vera fortuna di Microsoft non fu farina del proprio sacco, nei primi anni '80, IBM (un gigante dalla potenza commerciale enorme, ieri come oggi) cercava qualcuno che scrivesse un Sistema Operativo per un nuovo modello di computer: l'IBM XT che portava una tra le prime cpu a 16bit ad essere commercializzate, l'8086, il capostipite dei moderni PC (che conservano con esso compatibilità). Nella foto sotto un IBM XT, CPU 8086 4,7Mhz, poteva utilizzare al massimo 1Mb di memoria RAM, anche se spesso si vedevano XT con 512Kb o meno di ram, in quanto i costi dei chip di ram erano proibitivi e comunque i programmi di allora difficilmente ne avrebbero tratto beneficio. Microsoft si presentò alla IBM dichiarando di possedere un sistema operativo adatto a questo primordiale PC, il DOS... In realtà Microsoft non aveva nulla in mano, solo la notizia avuta per passaparola che un piccolo programmatore squattrinato (Tim Paterson) ne aveva scritto uno. Stipulato l'accordo commerciale con IBM, Bill Gates ed i suoi amici si recarono a casa di Tim Paterson offrendo a lui 50.000$ per acquistare il suo 86-DOS (adattamento per 8086 dell'analogo sistema CP/M creato da Gary Kildall per computer a 8bit). L'IBM XT fu un successo (e tutti i suoi successori). Questo fece la fortuna di Microsoft. Mentre nessuno ricorda il povero Tim Peterson, ormai morto, pugnalato da un motociclista a cui stava antipatica la maglietta che indossava. Proseguendo con la storia di Microsoft: nel 1985 venne commercializzata la prima versione di Windows, sistema grafico a finestre, che altro non era che la copia del sistema installato su di un prototipo Apple Machitosh che Bill Gates riuscì ad avere in visione dallo stesso Steve Jobs, ingannandolo. C'è da dire che il sistema Macintosh era la copia di un sistema sviluppato da Xerox ma comprato dalla Apple. Quindi Windows era la copia di una copia. Pag.6 di 65 Vediamo sotto una schermata del desktop Xerox mai commercializzato Qui una schermata di MacOS 1 Pag.7 di 65 Qui invece una schermata di Windows 1.01 A parte la presenza dei colori in Windows 1.0 (all'epoca ben pochi PC possedevano schede grafiche o monitor in grado di visualizzare i colori) appare evidente all'occhio che il desktop Xerox era il più evoluto, per poi passare a quello Apple fino a quello Windows che era decisamente rudimentale. Pag.8 di 65 Nonostante tutto, l'alleanza con IBM, e la grande diffusione dei PC, sospinta soprattutto dal loro basso costo, affermò Microsoft come azienda leader del mercato dei sistemi operativi. Purtroppo la sua posizione dominante ha indotto la stessa a trascurare parecchio la qualità dei propri prodotti... Rispondete a queta domanda: Voi vi sforzereste di migliorare un vostro prodotto, quando riuscite a venderlo comunque, al prezzo che vi pare, perché questo prodotto è l'unica scelta presente sul mercato, o perché avete la forza di imporlo? Ovviamente no, o almeno no se siete privi di scrupoli e di etica. E il denaro è un solvente eccezionale per l'etica e lo scrupolo di una persona e/o di una società. Oltre a questo, un'altra pratica commerciale comune in Microsoft è quella di spazzare via la concorrenza, non con la qualità dei suoi prodotti ma con la forza del denaro... (Premessa: in america una ditta non può superare una certa mole di affari senza entrare in borsa, e in molti altri paesi è così). Fai qualcosa meglio di me? Ok, ti compro a ti cancello dalla faccia della terra, non ti fai vendere? Aspettiamo che tu cresca, quando entri in borsa compro il 51% delle tue azioni e dopo sei costretto a fare come dico io: smetti di vendere il tuo programma che mi fa concorrenza, non smetti? Vendo tutte le tue azioni e ti riduco in mutande quindi chiudi i battenti per banca rotta. Oppure visto che il mercato dei SO è mio, faccio un programma analogo al tuo e lo metto integrato dentro allo stesso Windows così la gente non sentirà più il bisogno di comprare il tuo, avendo il mio gratis. Alcuni esempi WordStar: era uno dei programmi di video scrittura più in voga negli anni 80, decisamente superiore e concorrenziale nei confronti di MS Word. La ditta che lo commercializzava fu soffocata e acquisita da Microsoft, che continuò in seguito a vendere MS Word, facendo sparire ogni traccia di WordStar. Netscape, uno dei primissimi browser web: Nei primi anni '90 definita dallo stesso Bill Gates “una moda passeggera”. In seguito internet diventò sempre più grande e l'immagine di Netscape importante. Netscape ovviamente andava eliminato (comperato) e viveva di questi introiti. internet fu il fenomeno sempre più la Netscape Microsoft allora decise di investire alcuni milioni di dollari per sviluppare Internet Explorer al solo scopo di regalarlo assieme a Windows, eclissando di conseguenza Netscape, che fallì alcuni anni dopo per banca rotta in quanto nessuno comprava più il loro software quando Internet Explorer (per quanto qualitativamente peggiore) era gratis e già installato assieme a Windows. Le primissime versioni di Windows 95 (Win 95a) NON avevano Internet Explorer, mentre la seconda versione di Windows 95 (Win95 osr2) era equipaggiata di Internet Explorer di serie e così fu per tutte le successive versioni di Windows. Però netscape fece un brutto dispetto a Microsoft: poco prima di andare a fondo rilasciò pubblicamente i codici sorgenti del suo Browser così che la comunità Open Source (allora giovanissima) potesse prenderne le redini e continuarne lo sviluppo. Da queste “ceneri” nacque Mozzilla e succesivamente Firefox, Browser Open Source che sta dando filo da torcere a Microsoft e che ha già mangiato oltre il 25% dell'utenza mondiale di Internet Explorer. Pag.9 di 65 Vantaggi/svantaggi tecnici, economici e sociali del modello Closed Source: Vantaggi: Tecnicamente parlando: non ci sono particolari vantaggi, tu crei un programma, fai in modo che faccia il suo lavoro e che non ci siano vistosi bug e basta. Commercialmente parlando: devi investire tanto tempo nello sviluppo, se sei un'azienda devi stipendiare tutti i programmatori per ottenere qualcosa di abbastanza buono da essere venduto ad un prezzo che possa coprire le spese e permetterti di guadagnare. Oltre a questo devi rispettare dei tempi di consegna per i tuoi prodotti. Socialmente parlando: non c'è niente di che, tu vendi il tuo prodotto e basta. Svantaggi: Tecnicamente parlando: una cerchia ristretta di cervelli che lavorano su di un progetto potrebbe avere una visione limitata dello stesso, dei suoi difetti e lacune funzionali/architetturali. Soprattutto se associamo questa situazione con una limitata comunicazioni con il pubblico acquirente. Il fatto di dover rispettare determinati tempi per finire un progetto crea pressione sugli sviluppatori (scrivere software è molto difficile, e ancora più difficile è preventivare/rispettare determinati tempi). Questa situazione spinge gli sviluppatori ad adottare compromessi tecnici che se da una parte accelerano il completamento del prodotto dall'altra ne peggiorano la qualità. Gli sviluppatori vengono spinti a curare di più l'aspetto esteriore e funzionale di un'applicazione piuttosto che concentrarsi sulla sua struttura operativa interna, perché l'aspetto esteriore è quello che l'utente (acquirente) medio percepisce più facilmente. Questo modo di programmare, alla lunga, provoca un decadimento generale della qualità di un programma, rendendo anche più difficile il suo mantenimento; cioè aggiornare e modificare un programma scritto male o con un'architettura pessima è notevolmente più difficile che farlo su un programma ben scritto. Oltre a questo, chi scrive software closed è obbligato a reinventare ogni volta la ruota, non importa se altre 1000 persone hanno fatto software simili al tuo, non avendo il codice sorgente dovrai fare tutto partendo da 0. Un esempio? Acrobat Reader ufficiale (visualizzatore di file PDF), scritto dalla Adobe, (Closed Source) installato è un “malloppone” di quasi un centinaio di megabytes di binari. KPDF, visualizzatore di file PDF Open Source installa poco più di 1 megabytes di binari e per certi aspetti offre funzionalità più appetibili del reader ufficiale. Commercialmente parlando: devi pregare che il tasso di pirateria, ossia persone che fanno copie abusive del tuo programma, non sia troppo alto. Devi investire tempo e denaro in sistemi di protezione da copia e nella difesa del tuo diritto d'autore e di repressione delle copie pirata. Socialmente parlando: questo modo di sviluppare software soffoca molto la comunicazione con gli utenti. Tu fai una bella scatola colorata venduta nei supermercati, la gente arriva nei supermercati e compra. Fine della storia. Inoltre se tu un giorno fallissi o decidessi di abbandonare lo sviluppo di un determinato programma lasceresti un sacco di persone, che lo usavano, alla deriva. Immaginate quale danno fu arrecato alle tantissime aziende, enti, e pubbliche amministrazioni quando la ditta produttrice di WordStar chiuse i battenti. Quanti documenti divennero illeggibili dopo pochi anni perché non esisteva più un programma capace di aprirli. Pag.10 di 65 Introduzione all'Open Source L'importanza di avere libertà di scelta: La libertà di scelta è qualcosa di molto importante. Voi oggi siete abituati ad andare al supermercato dove avete la libertà di scegliere tra centinaia di marche diverse di cereali, di conserve, pasta, di saponi e prodotti per la casa. Avete la possibilità di scegliere tra centinaia di marche e modelli di auto, moto, scooter, biciclette, telefoni cellulari, TV, HiFi, etc. In base ai vostri gusti personali e al vostro potere di acquisto. Questo perché su tutti questi prodotti c'è un mercato ricco di alternative, di aziende in libera concorrenza tra di loro. Allora perché ci viene negata la libertà di scelta sul sistema operativo o sulle suite office da utilizzare sul nostro computer? Andate in un mercatone qualsiasi e cercate di comprare un notebook o computer che NON abbia preinstallato Microsoft Windows. Ancora peggio: provate a rifiutare il pagamento del costo dello stesso Windows sul totale del costo del computer, perché non lo volete. Magari a casa avete una confezione retail di Windows che vorreste usare, oppure desiderate installare Linux, perché pagare? Vi scontrerete contro un muro di gomma, non ci sarà verso, se volete il notebook vi toccherà pagare anche Windows (e non è vero che è regalato col computer come qualcuno dice o crede). Eppure quando comprate un'auto pagate solo l'auto, nessuno vi impone di fare benzina dall'AGIP piuttosto che alla Q8. Quando comprate un'impianto HiFi avete la libertà di sintonizzarlo sulla stazione radio che vi pare. Soprattutto in un mercato libero, un'azienda che commercializza prodotti scadenti sarebbe costretta a migliorare oppure fallirebbe, perché la gente comprerebbe i prodotti migliori della concorrenza. Questo non capita a Microsoft. perché essa è riuscita a stabilire una posizione di “monopolio” attuando per anni politiche atte a spezzare le gambe di chiunque si mettesse in mezzo al suo cammino, aiutata dalla potenza del denaro guadagnato da quelli che sono stati i suoi iniziali successi commerciali. Il protrarsi di questa situazione ha portato Microsoft ad acquisire sempre maggiore ricchezza e potere. Da diversi anni ha il potere di imporre a chiunque voglia acquistare un computer di comprare assieme ad esso una copia di Windows, questo indifferentemente se l'acquirente lo vuole o no. Vi sembra giusto che un'azienda si arricchisca attraverso i soldi di utenti che NON desiderano usare i suoi prodotti? Ma quello che è peggio è che ormai la mancanza di alternative poste sotto gli occhi delle persone ha instaurato una situazione culturale tale per cui la maggioranza delle stesse considera il PC e Windows come 2 cose inseparabili. Tanti non sanno che esistono altri Sistemi Operativi alternativi magari anche migliori di Windows. Ad esempio ogni tanto capita in negozio qualche cliente che viene a fare domande e quando gli si chiede: Ma lei che computer ha? Ci si aspetterebbe una risposta tipo “Acer modello ...”, “HP modello...” invece a volte si ottiene la triste risposta: “Un computer Windows XP o Windows 98 o Windows quello che è...”. Questo non fa altro che rafforzare la capacità di Microsoft di mantenere il monopolio sul mercato. Pag.11 di 65 Cos'è uno standard: Uno standard, in ambito informatico, ma anche nelle telecomunicazioni, nei sistemi di misura, nell'ingegneria in genere, rappresenta una base di riferimento, un paradigma codificato per la produzione di tecnologie fra loro compatibili, che siano computer, reti di computer o componenti elettronici. Diversi enti a livello internazionale come l'ISO (International Organization for Standardization) e l'IEEE (Institute of Electrical and Electronics Engineers) propongono, concordano e ratificano gli standard nei diversi ambiti. Prima di essere considerato tale dalla comunità internazionale, ed essere preso a buon diritto come modello di riferimento, uno standard passa attraverso una serie di fasi di analisi e accreditamento: ● ● ● ● L'analisi delle esigenze dell'utenza da parte delle università e dei settori che si occupano di ricerca e sviluppo per le varie aziende produttrici, dà luogo alla ricerca di soluzioni per i problemi e le necessità eventualmente riscontrate. Quando possibile, delle specifiche tecniche vengono emesse sotto forma di descrizioni documentate estremamente dettagliate. Il testing e l'utilizzo di tali specifiche da parte della comunità internazionale dei produttori e dei laboratori di ricerca evidenzia le soluzioni migliori. A questo gli enti internazionali possono cominciare a scegliere cosa scartare e cosa mantenere dei vari contributi, producendo l'insieme delle specifiche finali. Le specifiche finali vengono accreditate come standard internazionale da un ente scientifico. Il risultato è un documento che descrive il modello cui le ditte di settore dovranno attenersi, pena l'incompatibilità dei loro prodotti tecnologici. Standard veri e standard falsi: Nel mondo, ogni giorno nascono molteplici formati di file. I software di elaborazione dati spesso utilizzano un proprio formato per gestire i file. Se questi software riceveranno una larga diffusione, allora potranno vantare anche un'elevata "compatibilità". Molte persone saranno in grado di leggere, modificare e scambiare dati fra loro usando uno specifico software. Un formato, tipico di un determinato software, se usato da una stragrande maggioranza delle persone, viene considerato erroneamente uno standard. In uno scenario come quello descritto sopra, voi non potrete scambiare informazioni con le minoranze che non usano il vostro stesso software. Un file, o più specificatamente un formato è compatibile con ogni sistema informatico, quando i dettagli di funzionamento sono pubblici, ma soprattutto accettati, ad esempio, da un consorzio di standardizzazione come la ISO. Basta un pò di tempo e di impegno per realizzare un nuovo formato implementarlo in un software, ma creare uno standard è ben altra cosa. ed Ogni giorno però gli standard, ma soprattutto coloro che ci lavorano, si trovano a combattere contro una larga schiera di persone ignoranti che continuano ad usare quei formati proprietari che si trovano di default nei loro sistemi informatici casalinghi. Anche da parte di alcuni colossi del settore, come la Microsoft, è possibile aspettarsi un mancanza di coerenza rispetto determinati standard. Spesso a causa di superficialità e/o di profondi interessi economici i formati proprietari vengono preferiti agli standard. Uno degli aspetti più pericolosi rappresentato dalla società statunitense Microsoft è la forte attrazione a raggiungere e conservare una posizione dominante di mercato, imponendo monopoli spesso difficili da percepire. Pag.12 di 65 Facciamo un esempio: recentemente mi è capitato di dover scaricare il dettaglio delle chiamate effettuate con il mio telefono mobile Wind. I dati erano stati memorizzati in un un foglio di calcolo in formato xls e per poterlo visualizzare e modificare avevo bisogno di un software proprietario. Anche questa volta non era stato usato uno standard ed io mi sentivo discriminato. Ho contattato quindi l'assistenza della Wind ed ho atteso. Il giorno dopo mi ha chiamato un'operatrice. Le ho chiesto come pensava che io dovessi aprire quel documento e lei si è stupita del fatto che non usavo il software proprietario Excel, prodotto da Microsoft ed integrato nella suite MS Office, che tra l'altro, mi ha precisato, essere presente spesso in tutti i computer venduti nei mega store italiani. Tralasciando questo notevole punto che conferma l'aspetto monopolistico della Microsoft in ambito informatico, le ho detto di non aver acquistato una licenza d'uso per il suddetto software e di voler accedere ai miei dati usando una modalità standard, o per meglio dire, un formato standard, cioè compatibile con ogni software e hardware che io preferisco, e non che mi sia imposto da loro, favorendo in questo modo la distribuzione di qualche particolare software proprietario. Tutta questa mia spaventosa richiesta, in realtà si riassume con il formato ods (OpenDocument Speadsheet). In generale il formato OpenDocument nasce per fornire una alternativa "aperta" ai formati proprietari, tra cui i DOC, XLS e PPT usati da Microsoft Office. Utilizzando formati standard si permette agli utenti di accedere a determinati dati/documenti da qualsiasi sistema operativo e con qualsiasi software predisposto alla lettura di quel determinato tipo di dati. Se non esistesse un software specifico per una determinata piattaforma si avrebbe in mano tutta la documentazione necessaria ad implementarne uno. Anche a distanza di anni, ipotizzando che un determinato programma sia caduto in disuso, si avrebbe ancora la documentazione necessaria per leggere i vecchi dati. Se il formato dei documenti di WordStar fosse stato standard i governi e le grosse compagnie avrebbero avuto modo di implementare qualcosa in grado di permettergli di continuare a leggere i vecchi documenti, che non sarebbero andati persi per sempre, creando un danno economico molto più ampio di quello necessario a pagare un gruppetto di programmatori che implementassero questo lettore. OpenOffice è una suite office gratuita e Open Source che produce file in formato OpenDocument. OpenOffice è disponibile per tutti i sistemi operativi (Windows, Linux, Mac, etc). E non solo per Windows! Pag.13 di 65 Cos'è l'Open Source, come è nato e come funziona la licenza GPL: La condivisione del codice fino agli anni Settanta: A partire dagli anni Cinquanta, e soprattutto negli anni Sessanta, è stato possibile riusare lo stesso codice e distribuirlo anche se in modo oggi ritenuto piuttosto artigianale, ovvero con nastri e schede perforate. Questo fenomeno diventò evidente soprattutto quando si affermò il vantaggio di riusare una stessa porzione di codice, il che presupponeva di avere macchine uguali e problemi simili. Fino a tutti gli anni Settanta, anche se in misura decrescente, la componente principale e costosa di un computer era l'hardware, il quale era comunque inutile in assenza di software. Da ciò la scelta dei produttori di hardware di vendere il loro prodotto accompagnato da più software possibile e di facilitarne la diffusione, fenomeno che rendeva più utili le loro macchine e dunque più concorrenziali. Il software, tra l'altro, non poteva avvantaggiare la concorrenza in quanto funzionava solo su un preciso tipo di computer e non su altri, neanche dello stesso produttore. L'introduzione dei sistemi operativi rese i programmi sempre più portabili, in quanto lo stesso sistema operativo veniva offerto dal produttore per diversi modelli di hardware. La presenza di sistemi operativi funzionanti per macchine di differenti produttori hardware ampliava ulteriormente le possibilità di usare lo stesso codice in modo relativamente indipendente dall'hardware usato. Uno di questi sistemi operativi era UNIX, nato nel 1969 come progetto all'interno di un'impresa delle telecomunicazioni, la AT&T. Una famosa causa antitrust contro la AT&T le vietò di entrare nel settore dell'informatica. Questo fece sì che UNIX venisse distribuito ad un prezzo simbolico a buona parte delle istituzioni universitarie, le quali si ritrovarono ad avere una piattaforma comune, ma senza alcun supporto da parte del produttore. Si creò spontaneamente una rete di collaborazioni attorno al codice di questo sistema operativo, coordinata dall'Università di Berkeley, da dove sarebbe poi uscita la versione BSD di UNIX, che diventa da un lato un centro di sviluppo ed innovazione, dall'altro è la base di partenza per numerosi fork. La nascita del software proprietario: Considerato che la condivisione del codice è nata insieme all'informatica, piuttosto che di origini dell'Open Source potrebbe essere più appropriato parlare invece di origine del software proprietario, ed esaminare il contesto storico in cui questa origine ha avuto luogo. L'utilità principale delle licenze restrittive consiste nella possibilità di rivendere un programma più volte, se necessario con alcune modifiche purché non rilevanti. Questo presuppone che esistano clienti diversi con esigenze simili, oltre che l'esistenza di più computer sul quale poter far eseguire il programma. Queste condizioni cominciano a determinarsi negli anni sessanta, grazie al fatto che esistevano un maggior numero di utilizzatori con esigenze standardizzabili come lo erano quelle delle organizzazioni economiche nell'area della contabilità, la logistica o delle statistiche. L'introduzione dei sistemi operativi rese inoltre possibile l'utilizzo dello stesso programma anche su hardware differente aumentando così le possibilità di riutilizzo dello stesso codice e dunque l'utilità nell'impedire la duplicazione non autorizzata dei programmi. La suddivisione della AT&T in 26 società, permise alla AT&T di usare logiche prettamente commerciali nella distribuzione del suo sistema operativo UNIX, innalzando notevolmente i costi delle licenze e impedendo che potesse essere modificato. Pag.14 di 65 Il 1982 fu anche l'anno della divisione delle diverse versioni commerciali di UNIX, portate avanti dai singoli produttori di hardware. Questi ultimi, effettuando delle piccole modifiche alla propria versione del sistema operativo, impedirono ai propri utenti l'utilizzo di altri sistemi, facendo in modo che i programmi scritti per la propria versione di UNIX non funzionassero su versioni concorrenti. Anche Microsoft creò un suo sistema UNIX, che in pochi ricorderanno, morto poco tempo dopo a favore di Windows: Microsoft XENIX Gli anni Ottanta: Stallman, la Free Software Foundation e l'innovazione dei PC: Al MIT la sostituzione dei computer fece sì che i programmatori (fra i quali Richard Stallman che sarebbe diventato il portabandiera del free software) non potessero accedere al sorgente del nuovo driver di una stampante Xerox per implementarvi una funzionalità gradita in passato: la segnalazione automatica che vi erano problemi con la carta inceppata. Contemporaneamente, società private cominciarono ad assumere diversi programmatori del MIT e si diffuse la pratica di non rendere disponibili i sorgenti dei programmi firmando accordi di non divulgazione (in inglese: NDA, ovvero Non Disclosure Agreement). In questo contesto Stallman si rifiutò di lavorare per una società privata e fondò nel 1985 la Free Software Foundation (FSF), un'organizzazione senza fini di lucro per lo sviluppo e la distribuzione di software libero. In particolare lo sviluppo di un sistema operativo completo, compatibile con UNIX, ma distribuito con una licenza permissiva, con tutti gli strumenti necessari altrettanto liberi. Si tratta del progetto GNU. GNU è un acronimo ricorsivo che significa “GNU Non è Unix”. L'obiettivo principale di GNU era “essere software libero”. Anche se GNU non avesse avuto alcun vantaggio tecnico su UNIX, sarebbe comunque stato un vantaggio sociale, permettendo agli utenti di cooperare, e un vantaggio etico rispettando la loro libertà. Tale progetto, finanziato dalla FSF, venne pertanto prodotto da programmatori appositamente stipendiati. I principali contributi l'editor di testo Emacs. vennero da Stallman Furono sviluppate anche altre componenti di furono distribuiti per circa 150$ che oltre a garantivano un servizio di supporto al cliente. le modifiche eventualmente effettuate su tali agli sviluppatori. stesso: il compilatore gcc e sistema UNIX. Questi programmi coprire i costi di riproduzione L'unica condizione era che tutte programmi venissero notificate Nacque così la GNU General Public License (GPL), il preambolo del cui manifesto comincia con: ● Le licenze per la maggioranza dei programmi hanno lo scopo di togliere all'utente la libertà di condividerlo e di modificarlo. Al contrario, la GPL è intesa a garantire la libertà di condividere e modificare il free software, al fine di assicurare che i programmi siano "liberi" per tutti i loro utenti. Pag.15 di 65 Gli anni Novanta: Internet, Linux e la Open Source Definition: Benché Internet avesse visto la luce già negli anni '70 è soltanto agli inizi degli anni '90, con la diffusione del protocollo HTTP e la nascita dei primi browser, che Internet cominciò ad essere diffusa, prima in ambito accademico e poi in modo sempre più capillare anche tra semplici privati. All'inizio degli anni Novanta, il progetto GNU non aveva ancora raggiunto il suo obiettivo principale, mancando di completare il kernel del suo sistema operativo (HURD): vi erano tutti i programmi necessari a far funzionare “un sistema operativo” ma non la parte più importante, ossia il kernel, il sistema operativo vero e proprio! Per sopperire a tale mancanza William e Lynne Jolitz riuscirono ad effettuare il porting di UNIX BSD su piattaforma Intel 386 nel 1991. Purtoppo negli anni successivi tale porting si trovò ad affrontare problemi di natura legale che ne ritardarono temporaneamente lo sviluppo. Nello stesso anno (1991), l'insoddisfazione riguardante alcuni applicativi di Minix (sistema operativo unix-like destinato alla didattica, scritto da Andrew Tanenbaum, professore ordinario di Sistemi di Rete all'università di Amsterdam), il desiderio di approfondire le proprie conoscenze sul processore Intel 386 a 32bit (a quell'epoca molto economico e popolare) e l'entusiasmo per le caratteristiche tecniche di UNIX stimolarono Linus Torvalds, studente al secondo anno di informatica presso l'Università di Helsinki, a sviluppare un proprio sistema operativo, imitando le funzionalità di UNIX, su un PC appunto con processore Intel 80386. Nacque così il primo kernel linux. Nella foto Linus Torvalds creatore di Linux. Pag.16 di 65 Torvalds distribuì il proprio lavoro tramite Internet e ricevette immediatamente un ampio riscontro positivo da parte di altri programmatori, i quali apportarono nuove funzionalità e contribuirono a correggere gli errori riscontrati. Nacque così il kernel Linux, il quale fu distribuito fin da subito con la licenza GPL creata anni prima da Stallman. L'unione tra il kernel Linux e il software GNU sviluppato dalla FSF permise finalmente la nascita di un sistema operativo completo ed indipendente. Per questo motivo le persone più puntigliose amano definirlo GNU/Linux e non solo Linux. Linux all'inizio era un semplice emulatore di terminale scritto in C e assembly, senza doversi appoggiare ad un sistema operativo. L'emulatore di terminale avviava e gestiva due thread, uno per mandare segnali alla porta seriale e uno per riceverli; quando poi Linus ebbe bisogno di leggere e scrivere file su disco, questo emulatore fu esteso in modo che potesse gestire un filesystem. Lentamente questo programma si trasformò in un intero kernel in grado di gestire un sistema operativo e Linus iniziò a documentarsi sulle specifiche POSIX, chiedendo assistenza sul newsgroup comp.os.minix. La prima versione del kernel Linux, la 0.01, fu pubblicata su Internet il 17 Settembre 1991 e la seconda nell'ottobre dello stesso anno. Internet dal canto suo, rese possibile la comunicazione tra persone molto distanti in tempi rapidi e a basso costo. Inoltre rese possibile la distribuzione di software direttamente dalla rete, riducendo ulteriormente i costi di duplicazione e le difficoltà a reperire il software stesso. La diffusione dei CD-Rom come supporto privilegiato di raccolte di software, rese possibile il fenomeno delle cosiddette distribuzioni. Linux può essere considerato come il primo vero progetto "Open Source" che faceva affidamento essenzialmente sulla collaborazione via internet per progredire; fino ad allora, anche i progetti di software GNU come Emacs erano stati sviluppati in maniera centralizzata seguendo una linea guida prestabilita da un ristretto numero di persone, in base ai principi ”standard” di ingegneria del software. Agli inizi degli anni Novanta, l'idea delle licenze liberali era rappresentata soprattutto da Richard Stallman e dala sua FSF, ovvero le licenze liberali per eccellenza erano la GPL e la LGPL che però venivano ritenute "contagiose", in quanto a partire da un codice licenziato con la GPL qualsiasi ulteriore modifica doveva avere la stessa licenza. Le idee stesse di Stallman venivano viste con sospetto dall'ambiente commerciale statunitense, il che non facilitava la diffusione del software libero. Per favorire dunque l'idea delle licenze liberali nel mondo degli affari, Bruce Perens, Eric S. Raymond, Ockman e altri cominciarono nel 1997 a pensare di creare una sorta di lobby a favore di una ridefinizione ideologica del software libero, evidenziando cioè i vantaggi pratici per le aziende e coniarono il termine "Open Source". Ciò anche al fine di evitare l'equivoco dovuto al doppio significato di free nella lingua inglese, visto che spesso veniva interpretato come "gratuito" invece che come "libero". La scelta a favore dell'Open Source da parte di alcune importanti imprese del settore come la Netscape, l'IBM, la Sun Microsystems, l'HP e tante altre negli anni successivi, facilitarono inoltre l'accettazione del movimento Open Source presso l'industria del software, facendo uscire l'idea della "condivisione del codice" dalla cerchia ristretta nella quale era rimasta relegata fino ad allora. Venne cioè accettata l'idea produzione software efficace. che l'Open Source fosse una metodologia di Pag.17 di 65 Riassumendo Il software Open Source viene distribuito assieme al proprio codice sorgente e chiunque desideri farlo può studiarlo, modificarlo e migliorarlo a proprio piacimento. La licenza GPL con cui viene distribuito impone che qualunque modifica venga apportata al codice sorgente sia resa pubblica così che tutti possano goderne. Sebbene la maggior parte dei software Open Source oggi in circolazioni siano gratuiti la licenza GPL non impone a nessuno di lavorare gratis. Uno sviluppatore può chiedere un compenso per lavorare su parti di codice Open Source, ma non può nascondere i sorgenti agli occhi di chiunque voglia visionare/modificare il lavoro che ha svolto. Vantaggi/svantaggi tecnici, economici e sociali del modello Open Source: Vantaggi: Tecnicamente parlando: Potendo attingere da un vastissimo bacino di codice sorgente scritto da altri non c'è bisogno di reinventare 1000 volte la ruota, quando qualcosa è già stato fatto si può riusarlo, eventualmente aggiungendo solo le cose che mancano. In questo modo uno sviluppatore può concentrarsi sulla pura innovazione, creando solo cose nuove. Rendendo pubblici i sorgenti si ha la possibilità di ottenere suggerimenti, aiuti, contributi sotto forma di codice e correzione di errori da chiunque si interessi alla visione e all'uso di questo codice sorgente. Il mezzo utilizzato per la comunicazione tra gli sviluppatori che si interessano ad un certo progetto software è pubblico, quindi anche persone incapaci di programmare possono dare un contributo utile segnalando difetti (bug), esponendo la loro idea su come vorrebbero modificare qualcosa o richiedendo nuove funzioni, testando un certo programma in determinate condizioni e riferendo gli esiti. Ma anche scrivendo semplicemente traduzioni linguistiche dell'interfaccia del programma o della sua documentazione o disegnando (se capaci) parti grafiche come loghi, icone, etc. In questo modo si va a creare attorno a un progetto una forza lavoro notevole o meglio, se il progetto cattura l'attenzione della comunità si potrebbero avere decine, centinaia o migliaia di menti che scrivono codice, effettuano test e bugfix volontariamente. Commercialmente parlando: Partiamo dal presupposto che oggi il mercato dell'informatica è predominato da giganti dal passato il cui potere economico è di una vastità impressionante. Nessuna azienda o programmatore, per quanto brillante, oggi riuscirebbe mai ad emergere o a farsi notare in un mercato del genere dove i soliti nomi noti appaiono sui giornali e sulla TV tutti i giorni. Se mai una piccola ditta cominciasse a produrre qualcosa di innovativo, singolare e competitivo, immediatamente catturerebbe l'attenzione di questi giganti, che con ogni probabilità avranno tutto l'interesse ad acquisire questa piccola ditta per possedere la sua innovazione prima di altri. O a schiacciarla direttamente perché scomoda. Quindi oggi è sostanzialmente impossibile riuscire ad avviare un'attività che vive solo sugli introiti prodotti dalla vendita di software Closed. Considerando che tolti i giganti restano solo le formiche: Si può vivere e guadagnare benissimo con l'Open Source, basando i propri introiti non sulla vendita di una scatola con dentro un CD ma sul valore aggiunto del proprio lavoro. Un'azienda che nasce e sposa l'Open Source vivrà vendendo la propria mano d'opera e la propria esperienza e competenza nel settore informatico, fornendo ai propri clienti soluzioni software confezionate su misura e mano d'opera specializzata per effettuare l'installazione e l'assistenza software, comprendendo anche eventuali personalizzazioni su programmi. E' così che sono nate e vivono diverse aziende che producono soluzioni basate su Linux, le così dette “distribuzioni” che non sono altro che sistemi operativi basati su Linux (totalmente standard e compatibili con altri Linux) aggiunti di piccole personalizzazioni grafiche, tools di amministrazione e configurazione Pag.18 di 65 che spesso sono unici e specifici per ogni diversa distribuzione. Tra queste ditte ce ne sono anche di molto grandi e ricche (a dimostrazione che l'Open Source può essere un business valido) tra cui menziono: ● ● ● ● ● RedHat (produttrice di RedHat Enterprise Linux) Novell (produttrice di openSuSE, SuSE Linux Enterprise Desktop e Server) Mandriva (produttrice di Mandriva Linux) Canonical (produttrice di Ubuntu Linux) Tante altre... Ma non solo grosse società che producono distribuzioni Linux possono vivere bene. Anche piccole ditte, artigiani e liberi professionisti possono trarre vantaggio da questo mondo. Tutte le distribuzioni Linux sono liberamente scaricabili da internet, ovviamente chi le scarica gratuitamente (al contrario di chi fa un contratto di assistenza pagando) non ottiene nessun supporto tecnico da parte del produttore e deve quindi arrangiarsi, ma se è in grado di arrangiarsi, viene da se che, avrà in mano uno strumento potentissimo e soprattutto libero e gratuito. Anche chi sviluppa software può godere della comunità che sta dietro a Linux: immaginiamo voi abbiate una piccola ditta che sviluppa un software gestionale Open Source, il vostro guadagno non verrà dalla vendita del software (nemmeno se fosse closed) ma bensì dalla vendita dell'assistenza presso i vostri clienti, e la vendita della vostra mano d'opera per modificare o adattare lo stesso programma alle specifiche esigenze del cliente. Non avrete nessun danno se qualcuno a 100 chilometri o dall'altra parte del mondo ha preso il vostro programma e sta facendo con esso il vostro stesso lavoro, tanto il vostro campo d'azione non arriva così lontano. Al contrario, trarrete un vantaggio da ciò, perché se le altre persone che hanno adottato il vostro software apporteranno modifiche e miglioramenti interessanti al codice sorgente voi ne verrete in possesso gratuitamente per la natura stessa della licenza GPL. Ma ingrandiamo lo scenario, facciamo finta che voi siate una ditta molto più grande, con una copertura internazionale come RedHat o Novell, in ogni modo il fatto che i vostri “concorrenti” possano mettere mano al vostro codice sorgente non vi disturberà in quanto prima di tutto loro vedono il vostro codice come voi potete vedere il loro, in secondo luogo i clienti sono fidelizzati a voi, ai vostri servizi e alla vostra capacità tecnica. Al cliente non importa niente se il software che gli vendete è liberamente scaricabile da internet, il cliente da solo non è in grado e non ha le risorse umane o tecniche per fare a meno di voi. Un'industria automobilistica vuole pensare a produrre auto e non a gestire la propria rete e i propri server, per questo assume delle aziende specializzate. Inoltre non è nemmeno una cosa semplicissima migrare un'intera rete da una distribuzione ad un'altra. Una ditta ha bisogno di stabilità e quando le cose vanno è insensato e costoso cambiarle. Socialmente parlando: Molti dei vantaggi sociali dell'Open Source li ho già elencati come vantaggi tecnici e commerciali, si può aggiungere che l'Open Source è una grande cosa perché è la pura condivisione del sapere. Chiunque lo desideri può studiare ed imparare il funzionamento di qualsiasi software, contribuendo al suo progresso. L'Open Source è immortale: ad oggi si stima che siano oltre 30 milioni le persone che contribuiscono alla sua crescita (nemmeno Microsoft con il suo immenso patrimonio potrebbe mai stipendiare così tante persone), singoli individui, piccoli gruppi e gruppi più grandi finanziati o indipendenti, università, aziende piccole, medie e grandi, ricercatori, etc contribuiscono ogni giorno al suo progresso. Nessuno, nemmeno Microsoft può mettere fine a questo movimento perché è troppo grande e non è centralizzato, non c'è nessuno da “assorbire” o fare fallire, se anche Microsoft fermasse una singola azienda o un gruppo di sviluppatori che produce un software molto apprezzato dagli utenti Pag.19 di 65 (quindi scomodo), tutto il codice prodotto rimarrebbe a disposizione della comunità e ci sarebbe subito qualcuno in un'altra parte del pianeta che ne prenderebbe le redini proseguendo il lavoro abbandonato da altri. Inoltre sono anni che giganti come IBM, Novell, SUN, e tanti altri, si interessano al fenomeno, finanziando ricerca e sviluppo di altissimo livello su Linux, in quanto è molto più conveniente che svilupparsi da soli il proprio sistema operativo. Tenete conto che TUTTI i più grandi super-computer attualmente in funzione usano Linux, super-computer al servizio della scienza medica, della ricerca tecnologica, astronomica, chimica, fisica. Ma anche i super-computer utilizzati per creare i film di animazione che vanno tanto al cinema di questi tempi. Campi applicativi di Linux: Aderendo perfettamente agli standard POSIX (standard che definiscono come deve essere strutturato un sistema UNIX) ed essendo liberamente modificabile da chiunque, il sistema Linux ha maturato una enorme versatilità. Praticamente può essere modificato ed adattato per funzionare su qualsiasi dispositivo che abbia una qualsiasi specie di CPU a 32bit all'interno. Si può trovare Linux non solo su normali PC da casa e da ufficio, ma anche su Server, o super-computer. Su telefoni cellulari, console da gioco (GP2x, Playstation 2 e 3), piccoli apparati di rete come router, riproduttori multimediali da salotto, lettori DVD/Divx, decoder satellitari. E' stato usato sullo shuttle, in satelliti artificiali per telecomunicazioni e anche in sonde spedite nelle profondità dello spazio. E' stato usato su speciali equipaggiamenti medici robotizzati capaci di effettuare operazioni chirurgiche delicatissime. E' anche usato nell'automazione dell'industria pesante. Altri sistemi Open Source: Open/Net/Free/BSD: Sono implementazioni di UNIX esattamente come Linux, con esso condividono la quasi totalità delle librerie e dei software GNU, ma hanno un kernel totalmente differente, BSD appunto. La comunità che c'è dietro è molto più piccola di quella Linux in quanto la licenza con la quale viene distribuito questo kernel è considerata da molti assurda ed inaccettabile. La licenza si chiama come il sistema “BSD”. La licenza BSD è troppo liberale, più liberale della GPL, consente a chiunque di prendere il codice sorgente, modificarlo in privato, di cambiare nome al programma e di venderlo come prodotto Closed Source, senza rendere nulla alla comunità, senza obbligo nemmeno di riconoscere la paternità del prodotto ai veri sviluppatori. Cioè io potrei essere la Apple e potrei prendere BSD, farne il porting per il mio hardware, approfittare della mano d'opera gratuita della comunità che sviluppa e migliora il codice. Quando il grosso del lavoro è stato fatto dalla comunità e quello che ne sta uscendo mi soddisfa potrei chiudere completamente il codice continuando a sviluppare in privato, chiamarlo Mac OSX e venderlo come mio nuovo rivoluzionario sistema operativo, Closed Source. Senza rendere una sola riga di codice alla comunità e senza dire ai miei clienti che il sistema non è frutto del mio sacco se non per la parte grafica, ma che è frutto del lavoro di una comunità Open Source. Questo è vero, Mac OSX ha alla base BSD, ma Apple loda se stessa per aver creato qualcosa che non è suo. Con la licenza GPL un abuso simile non sarebbe possibile, per questo molti sostenitori dell'Open Source non approvano la licenza BSD. Pag.20 di 65 Perché Linux e l'Open Source sono un pericolo per Microsoft: Microsoft ha sempre basato il suo business sulla vendita di licenze software, facendosi pagare profumatamente per ogni copia del suo Windows, di Office e di tutti gli altri suoi prodotti. Non ha mai erogato servizi. Gli utenti comprano la scatola, pagano, e si arrangiano. Chi volesse assistenza deve pagare a Microsoft contratti aggiuntivi, inoltre l'assistenza non prevede assolutamente che qualche particolare dei software venga modificato su specifiche necessità dell'utente. Attorno a questo business sono nate tantissime aziende che offrono supporto su prodotti Microsoft; immaginiamo semplicemente i tecnici che si fanno pagare per riformattare e reinstallare il vostro PC quando Windows si riempe di virus e non va più. Solo che questi non sono soldi che vanno a Microsoft, ma alle ditte private che fanno assistenza. Per Microsoft sarebbe impossibile passare al modello open. Inoltre gli è impossibile sopprimere Linux, come si è detto in precedenza, non c'è nessuno in particolare da far fallire, da comprare o da corrompere. L'Open Source è l'unica cosa che riesca ad intaccare il suo monopolio. Per queste ragioni Microsoft teme molto questo nemico impalpabile, e cerca di attaccarlo, di minacciare i suoi utenti e la comunità ogni volta che ne ha occasione. In passato Steve Ballmer (braccio destro di Bill Gates) arrivò a dichiarare che Linux era un cancro che infettava qualsiasi cosa toccasse, riferendosi alla natura della licenza GPL come “Virale”. Dicendo anche che preferiva BSD (ovviamente perché BSD permette di copiare codice a sbaffo, per esempio lo stack tcp/ip fino a Windows 2000 era pessimo, poi su XP venne copiato quello di BSD con un netto miglioramento). Il problema di questi continui attacchi verbali contro Linux è che si ritorcevano contro Microsoft stessa, quegli utenti (grandi aziende, enti e governi) che erano indecisi se passare a Linux o restare con Windows, di fronte a tanta arroganza decidevano il più delle volte per Linux. Allora Microsoft cominciò ad effettuare attacchi trasversali, senza esporsi direttamente. Uno dei più eclatanti fu quello del caso SCO: SCO era una società che in un passato remoto commercializzava un sistema UNIX (SCO UNIX) e da anni distribuiva una sua distribuzione Linux (SCO openlinux). SCO un bel giorno se ne uscì dicendo al mondo intero che gli sviluppatori Linux avevano copiato spudoratamente buona parte del codice di SCO UNIX, codice che era di sua proprietà e di cui deteneva il copyright. Minacciando l'intera comunità di ritorsioni legali e avviando una causa legale contro IBM che riteneva una delle maggiori responsabili del riversamento in Linux della sua proprietà. Anche IBM in passato possedeva una sua versione di UNIX (AIX). Anni prima di questa vicenda IBM aprì alla comunità Linux diverse tecnologie contenute in AIX. Lo scopo di IBM era quello di abbandonare lo sviluppo interno di AIX per passare a Linux, per farlo però bisognava prima che su Linux fossero presenti determinate tecnologie necessarie per far funzionare i suoi mainframe. SCO disse che il codice di AIX regalato alla comunità era copiato da SCO UNIX. La causa legale durò 4 anni e portò SCO a spendere il suo intero capitale in avvocati. Si scoprì che dietro tutto questo c'era un'anonimo finanziatore che erogava soldi per permettere a SCO di non andare a fondo, continuando ad alzare polveroni ovunque, minacciando chiunque, accusando Linux e la sua comunità di cose completamente infondate. SCO poi si rifiutava continuamente di fornire prove a sostegno delle sue accuse contribuendo a mantenere un'aria di incertezza tra gli utenti che in una certa percentuale evitavano Linux per paura di ritorsioni future. Si scoprì che con buona probabilità i finanziamenti provenissero da Microsoft. Pag.21 di 65 Questo modo incertezza e informazioni da creare un di fare viene chiamato FUD: Fear, Uncertainty and Doubt "paura, dubbio" si intende una strategia di marketing basata sul diffondere negative, vaghe o inaccurate sul prodotto di un concorrente, tali clima che scoraggi l'acquirente/consumatore. Inutile dire che le accuse di SCO erano totalmente infondate, portando SCO a coprirsi di ridicolo perché dopo anni che gli si chiedeva di mostrare quali fossero queste parti di codice copiato dal suo SCO UNIX arrivò a mostrare poche centinaia di righe che erano formate solo da commenti o insignificanti parti di codice storico, che erano riportate su tantissimi libri universitari come esempi di programmazione POSIX a partire dagli anni 70. Quindi di dominio pubblico. SCO attualmente è sotto regime di bancarotta pilotata. Pag.22 di 65 Come funziona Windows Come funziona Linux Cos'è e come funziona un Kernel: Introduzione L'accesso diretto all'hardware può essere anche molto complesso, quindi i kernel usualmente implementano uno o più tipi di astrazione dell'hardware. Queste astrazioni servono a "nascondere" la complessità e a fornire un'interfaccia pulita ed uniforme all'hardware sottostante, in modo da semplificare il lavoro degli sviluppatori. I kernel si possono classificare, in base al grado di astrazione dell'hardware, in quattro categorie: ● ● ● Kernel monolitici, che implementano direttamente una completa astrazione dell'hardware sottostante. Microkernel, che forniscono un insieme ristretto e semplice di astrazione dell'hardware e usano software (chiamati device driver o server) per fornire maggiori funzionalità. Kernel ibridi (o microkernel modificati), che si differenziano dai microkernel puri per l'implementazione di alcune funzioni aggiuntive al fine di incrementare le prestazioni. Kernel Monolitici L'approccio monolitico definisce un'interfaccia virtuale di alto livello sull'hardware, con un set di primitive o chiamate di sistema per implementare servizi di sistema operativo come gestione dei processi, multitasking e gestione della memoria, in diversi moduli che girano in modalità supervisore. Anche se ogni modulo che serve queste operazioni è separato dal resto, l'integrazione del codice è molto stretta, siccome tutti i moduli operano nello stesso spazio, un bug in uno di essi può bloccare l'intero sistema. Tuttavia, quando l'implementazione è completa e sicura, la stretta integrazione interna dei componenti rende un buon kernel monolitico estremamente efficiente. Il più grosso svantaggio dei kernel monolitici è l'possibilità di aggiungere un nuovo dispositivo hardware senza aggiungere il relativo modulo al kernel, operazione che richiede la ricompilazione del kernel. In alternativa è possibile compilare un kernel con tutti i moduli di supporto all'hardware, ingigantendo però le sue dimensioni. Tuttavia i kernel monolitici più moderni come il Kernel Linux e FreeBSD possono caricare dei moduli in fase di esecuzione, a patto che questi fossero previsti in fase di compilazione, permettendo così l'estensione del kernel quando richiesto, mantenendo al contempo le dimensioni del codice nello spazio del kernel al minimo indispensabile. Esempi di kernel monolitici: ● I tradizionali kernel UNIX, quali ad esempio i kernel BSD. ● Il kernel Linux ● Kernel di ricerca come Agnix Pag.23 di 65 Microkernel L'approccio microkernel consiste nel definire delle macchine virtuali molto semplici sopra l'hardware, con un set di primitive o chiamate di sistema per implementare servizi minimali del sistema operativo quali gestione dei thread, spazi di indirizzamento o comunicazione interprocesso. L'obiettivo principale è la separazione delle implementazioni dei servizi di base dalle strutture operative del sistema. Per esempio, il processo di blocco (locking) dell'Input/Output può essere implementato come modulo server a livello utente. Questi moduli a livello utente, usati per fornire servizi di alto livello al sistema, sono modulari e semplificano la struttura e la progettazione del kernel. Un servizio server che smette di funzionare non provoca il blocco dell'intero sistema, e può essere riavviato indipendentemente dal resto. Esempi di microkernel e Sistemi operativi basati su microkernel: ● AIX ● Amoeba ● BeOS ● Chorus microkernel ● EROS ● K42 ● LSE/OS (a nanokernel) ● KeyKOS (a nanokernel) ● The L4 microkernel family ● Mach, utilizzato in Hurd e NON in Mac OS X, che contrariamente a quando si crede usa XNU, che è un kernel ibrido modulare nato dall'unione di Mach e del kernel FreeBSD ● MERT ● Minix ● MorphOS ● QNX ● RadiOS ● Spring operating system ● VSTa Pag.24 di 65 Kernel ibridi (microkernel modificati) I kernel ibridi sono essenzialmente dei microkernel che hanno del codice "non essenziale" al livello di spazio del kernel in modo che questo codice possa girare più rapidamente che se fosse implementato ad alto livello. Questo fu un compromesso adottato da molti sviluppatori di sistemi operativi per sopperire in parte alle minori prestazioni dei microkernel rispetto ai kernel monolitici. Molti sistemi operativi moderni rientrano in questa categoria: Microsoft Windows è l'esempio più noto. Anche XNU, il kernel di Mac OSX, è di fatto un microkernel modificato, per via dell'inclusione di codice BSD in un kernel basato su Mach. DragonFly BSD è stato il primo sistema BSD non basato su Mach ad adottare l'architettura a kernel ibrido. Alcune persone confondono il termine "kernel ibrido" con i kernel monolitici che possono caricare dei moduli dopo il boot. Questo non è corretto, poiché "ibrido" implica che il kernel in questione condivida concetti architetturali e meccanismi tipici sia dei kernel monolitici che dei microkernel, specialmente il passaggio di messaggi e la migrazione di porzioni di codice "non essenziale" a più alto livello, mantenendo a livello kernel solo il codice necessario per ragioni di prestazioni. Esempi di kernel ibridi: ● Microsoft Windows NT/2000/XP/Vista ma NON 95/98/ME che si basavano su MSDOS. ● XNU kernel del Mac OS X ● DragonFly BSD ● Quark, il kernel di MorphOS Pag.25 di 65 Riassumendo: ● I kernel monolitici (non più usati da tempo) si portano dietro tutti i driver esistenti, per questo hanno il difetto di occupare molto spazio in memoria e non è possibile aggiungere un driver senza ricompilare il kernel. Sono estremamente performanti. ● I kernel monolitici/modulari (come quello Linux) sono kernel monolitici cui i driver sono composti da moduli esterni che possono essere caricati solo al bisogno risolvendo il problema della dimensione occupata in memoria. Però i moduli devono essere compilati espressamente per il kernel in uso. Teoricamente il blocco di un modulo di un kernel monolitico porta al blocco dell'intero sistema. Anche questi kernel sono estremamente performanti. ● I microkernel sono kernel con funzioni ridotte ai minimi termini, tutte le funzioni avanzate vi girano sopra come fossero normali processi. I moduli che girano sopra i microkernel possono tranquillamente essere scritti da terzi e non necessariamente devono essere scritti per una versione specifica. Teoricamente un'altro loro vantaggio risiede nel fatto che il blocco di uno di questi processi non porta necessariamente al blocco del sistema. Sono quindi più versatili, potendo caricare driver e servizi scritti da chiunque. Hanno il problema di essere piuttosto lenti rispetto i kernel monolitici. ● I kernel ibridi sono microkernel che inglobano al loro interno porzioni di codice e di servizi di alto livello, come i kernel monolitici. Sono un compromesso tra la versatilità dei microkernel e le prestazioni dei kernel monolitici. Non raggiungono comunque le prestazioni dei monolitici. C'è da aggiungere una cosa: Torvalds dice che il codice di un kernel monolitico, pensato e controllato tutto insieme dallo stesso gruppo di persone è molto più ottimizzato e soprattutto coerente e può vantare un grande vantaggio di stabilità rispetto all'approccio opposto, obbligatorio nei microkernel, dove vengono caricati parti di codice proveniente da più parti. Alla fine la teoria dei microkernel e dei kernel ibridi è che il blocco di un modulo non porta al blocco del kernel, ma se il blocco di un modulo mi impedisce di accedere al disco fisso, o alla scheda video non ha importanza se il kernel funziona ancora in quanto il computer resta bloccato comunque, obbligandomi al reset. Pag.26 di 65 Cos'è un driver: Un driver è un pezzo di codice binario che viene caricato ed usato dal kernel per accedere ad una periferica hardware. Come una scheda sonora, una scheda video, una porta di comunicazione, un modem, etc. All'interno del driver si trovano tutte le istruzioni necessarie al sistema per dialogare con questo pezzo hardware e per poter permettere alle applicazioni di accedervi. In assenza di un driver è impossibile utilizzare una determinata periferica. Driver su Windows, vantaggi e svantaggi: Come abbiamo visto sopra Windows adotta un microkernel ibrido. Il kernel Windows nativamente non supporta nessun tipo di periferica, i driver sono file esterni caricati all'occorrenza, diversi driver per periferiche standard come tastiere, porte parallele e seriali, mouse, controller floppy/cdrom/harddisk sono già inclusi dentro a Windows e solitamente sono sufficienti a permettere la prima installazione del sistema. Chi ha un minimo di conoscenza dei sistemi Windows saprà sicuramente che quando si compra un nuovo hardware (una stampante, una video camera, etc) si trova nella confezione il CD con il “driver” per farlo funzionare. Questo driver ovviamente è Closed Source e viene fornito da chi produce l'hardware. Questo modo di fare e distribuire i driver ha vantaggi e svantaggi. Vantaggi: Si ha buona garanzia della compatibilità della periferica con il proprio sistema, almeno al momento odierno, con la versione di Windows attuale. Svantaggi: Tutti gli stessi svantaggi del modello di sviluppo closed. Quindi se un driver è scritto male porterà il sistema ad una diminuzione di prestazioni o ad una potenziale instabilità. Capita a volte che i driver forniti nel CD siano pieni di problemi, dovuti al fatto che la casa produttrice aveva fretta di immettere l'oggetto sul mercato e l'utente dovrà poi aspettare il rilascio degli aggiornamenti da scaricare via internet. In certi casi (sporadici) ci sono periferiche addirittura che NON vanno, sebbene sulla confezione sia riportata come specifica la compatibilità con una certa versione di Windows. Microsoft nel “tentativo di far credere” di voler risolvere il problema di qualità dei driver prodotti da terze parti ha introdotto in Windows un sistema di certificati. Sostanzialmente Windows al momento dell'installazione di un driver verifica che all'interno di esso sia presente una firma digitale crittografica, se c'è prosegue normalmente all'installazione, se non c'è fa apparire una finestra di “Allert” dicendo “pericolo questo driver non è firmato, se continui potresti destabilizzare il sistema”. Per evitare che Windows mostri questo spaventoso messaggio il produttore hardware deve comprare da Microsoft la chiave con cui firmare il driver. Si capisce benissimo che questa garanzia non garantisce nulla! è solo un modo studiato da Microsoft per arricchirsi ulteriormente e far credere agli utenti comuni che si sia data da fare. In realtà il produttore una volta comprata la chiave può usarla per firmare anche un driver scritto da uno scimpazè. L'uso di driver closed ha anche un'altro effetto negativo: Quando una periferica è considerata commercialmente vecchia non vi è garanzia che il produttore continui a fornire nuovi driver per le nuove versioni di Windows, costringendo gli utenti che cambiano sistema operativo a buttare via le vecchie periferiche, anche se perfettamente funzionanti. Pag.27 di 65 Driver su Linux, vantaggi e svantaggi: Come abbiamo visto sopra Linux adotta un kernel monolitico modulare, quindi tutti i driver supportati sono già presenti e disponibili da subito. Le case produttrici di hardware solitamente NON forniscono driver per Linux, anche perché, come capiremo proseguendo la lettura, non potrebbero mai funzionare. I driver sotto Linux sono sviluppati come Open Source dalla stessa comunità di Linux partendo dalle specifiche funzionali dei diversi hardware. Specifiche fornite a volte dai produttori stessi a volte ottenute dai gruppi di sviluppo tramite ingegneria inversa. Vantaggi: I driver vengono sviluppati con il metodo Open Source e godono di tutti i suoi vantaggi, tra cui ribadisco la migliore ottimizzazione del codice e un testing molto più accurato. Tutti i driver esistenti solitamente sono inseriti di default durante l'installazione del sistema, questo significa che non ci sarà mai bisogno di installare driver di nessun genere. Al momento della connessione di una nuova periferica, qualsiasi essa sia, Linux riconoscerà immediatamente il driver più adatto ad essa, caricandolo e rendendo la periferica operativa immediatamente o dopo una piccola procedura di configurazione, senza caricare nulla da internet o da CD/Floppy. Un driver, una volta scritto non viene abbandonato, questo vuol dire che con il passare degli anni Linux continuerà a supportare anche le vecchie periferiche, questo non comporta lavoro extra per gli sviluppatori, infatti avendo i sorgenti a disposizione il più delle volte basta ricompilare il driver per la nuova versioni del sistema. Svantaggi: Se non è ancora stato sviluppato un driver per una certa periferica è impossibile usarla, la periferica non funziona, punto e basta. Talvolta capita che certi produttori hardware (una piccola parte) siano riluttanti a fornire specifiche o altre informazioni necessarie alla scrittura di un driver perché temono di svelare così alcuni segreti sul funzionamento delle loro schede o dei loro chip. Per i produttori è quasi impossibile fornire driver closed per Linux perché per la natura del suo kernel (monolitico modulare) il driver dovrebbe essere fornito espressamente compilato per ogni sua singola variante in circolazione. Le distribuzioni Linux sono tantissime e il kernel si evolve versione in versione molto rapidamente, quindi un ipotetico modulo driver per il kernel versione 2.6.22.17-0.1 di opensuse 10.3, fornito dal produttore, funzionerebbe solo espressamente su QUELLA versione del kernel di opensuse. Non funzionerebbe su altre distribuzioni e dopo 2 mesi nemmeno sulla stessa opensuse perché nel frattempo potrebbero essere usciti aggiornamenti del kernel. Quest'ultimo punto però non deve spaventare troppo gli utenti, Linux supporta la maggior parte degli hardware oggi in circolazione, solo una piccola percentuale di periferiche risulta essere problematica (cito ad esempio i modem integrati a 56k, o i modem sulla porta USB). Esistono siti che forniscono informazioni riguardanti la compatibilità di certi hardware con Linux. Molto spesso è possibile sostituire hardware non supportati con altri compatibili, di analoghe prestazioni e con spese minime. Nota aggiuntiva: Certi produttori hardware, come nvidia, sono riusciti a trovare un modo efficace di distribuire driver “closed universali” per Linux. Questo metodo consiste nel fornire un driver binario closed accompagnato da un modulo “colla” Open Source. Il modulo “colla” è quello che si interfaccia con il kernel e che può essere compilato e ricompilato e piacimento anche dagli stessi utenti in modo da renderlo compatibile con la loro versione del kernel. Questo modulo “colla” poi non farà altro che caricare a sua volta il driver binario closed creando un'interfaccia di comunicazione. Purtroppo questo metodo non è molto comodo per gli utenti, ad accezione di quelli che usano distribuzioni più pratiche che forniscono il driver già pronto. Questo modo di far andare un driver sotto Linux però è considerato sporco da molte persone della comunità che non accettano il compromesso e che spingono per avere driver completamente liberi. Pag.28 di 65 Integrazione, come funzionano e cosa sono le librerie: In Informatica, una libreria software è un insieme di funzioni di uso comune, predisposta per essere usata dai programmi. Lo scopo delle librerie software è quello di fornire una vasta collezione di funzioni di base pronte per l'uso, evitando al programmatore di dover scrivere ogni volta le stesse funzioni. Facciamo alcuni esempi sull'uso delle librerie: tutti i programmi, anche diversi fra loro, hanno funzioni in comune. Pensiamo ad esempio ad un editor di testo e ad un programma per elaborazione grafica: entrambi hanno menù, la possibilità di eseguire azioni come aprire o salvare un file. Analizzando l'estetica noteremo che il modo in cui sono disegnati i bottoni per accedere alle funzioni, le barrettine di scorrimento, il bordo della finestra, etc, sono uguali. Questo perché dentro i programmi non vi è scritto ogni volta come disegnare i menù, come disegnare i bottoni, come leggere o salvare un file, etc. I programmi semplicemente accedono ad una libreria comune in cui sono contenute le funzioni necessarie a disegnare l'interfaccia grafica del programma stesso a video, od ad accedere ai file. Ovviamente di librerie ne esistono tantissime per una vastità di compiti diversi. Le librerie estensione: ● sotto Windows hanno un solo formato e sono file sempre con .dll Mentre Linux adotta una tipizzazione delle librerie con lo scopo di suddividerle in base alle diverse architetture (ottimizzate per scopi differenti) e possono avere estensione: ● ● ● ● .o .so .a .la Talvolta poi dopo l'estensione è possibile vedere appeso un numero di versione, questo ha lo scopo di rendere possibile la coesistenza di più versioni della stessa libreria sul sistema. Ad esempio: libaudio.so.2.4 Su Windows le dll non hanno nulla del genere, il numero di versione esatto è memorizzato all'interno del file stesso. Così viene chiamata mfc42.dll qualsiasi libreria di quel ceppo. Si chiama mfc42.dll la versione 4.21.71 e qualsiasi altra genericamente 4.2xxx. Come vedremo proseguendo la lettura, questo aspetto crea non pochi problemi al buon funzionamento di Windows. Pag.29 di 65 In cosa Linux è migliore di Windows: La gestione del software: Su Windows non esiste uno standard su come installare disinstallare un programma, non esistono librerie comuni per farlo. Su Windows ogni programma ha un suo “installer” proprietario, un programma che viene avviato e che si preoccupa di copiare i file nei punti giusti del disco di sistema nel caso dell'installazione, o di rimuoverli nel caso della disinstallazione. Il problema risiede nel fatto che ogni software-house può creare un'installer per conto suo e se questo non fosse perfetto potrebbe “sporcare il sistema” in qualche modo. La cosa più comune che capita su Windows avviene alla disinstallazione: spesso vengono lasciati residui in giro, file e directory che non vengono rimossi, rimanendo ad occupare spazio disco e talvolta continuando ad essere caricati in memoria dal sistema, sprecando risorse inutilmente e diminuendo le prestazioni del computer. Ad esempio il famoso (ed esoso di risorse) Norton Antivirus disinstallazione lascia comunemente alcune directory dentro a: ● ● dopo la c:\programmi\ c:\programmi\file comuni\ Piene di eseguibili e librerie che continuano ad essere caricati inutilmente da Windows anche dopo la procedura di disinstallazione e così via per molti dei programmi Windows. Potenzialmente gli sviluppatori potrebbero anche fare le cose fatte bene, ma Windows non li aiuta e spesso il particolare della disinstallazione viene trascurato; a loro interessa vendere il programma e che questo si installi correttamente, in modo che gli utenti lo comprino generando guadagni per l'azienda... se lo disinstallano: “chi se ne frega” Sotto a Linux invece si è adottato un metodo completamente differente; vengono usati software chiamati “Package Manager”. Un Package Manager è un programma integrato all'interno del sistema, dedicato ad eseguire l'installazione e la disinstallazione di programmi e librerie. Su Linux quindi non si hanno programmi di installazione differenti per ogni applicazione. I programmi vengono distribuiti come pacchetti; file con estensione “.rpm” oppure “.deb” All'interno di un pacchetto rpm vi sono archiviati tutti i file del programma e molte altre informazioni riguardo le posizioni dove andranno copiati questi file, commenti e descrizioni del programma stesso utili all'utente per capire cosa vi sia dentro e quali librerie servono per usare il determinato programma. Quest'ultima funzione prende il nome di dipendenza, ossia il programma X necessita della libreria Y, nel caso la libreria Y non fosse presente nel sistema il package manager proporrebbe la sua installazione in maniera automatica. Le informazioni contenute all'interno di un pacchetto rpm vengono generate durante la creazione dell'rpm stesso, e non vi è modo di mettere dentro al pacchetto rpm un file senza che venga catalogato. Al momento dell'installazione il package manager memorizza tutte le informazioni di tutti i pacchetti installati all'interno di un database. Al momento della disinstallazione tramite lo stesso database sarà possibile conoscere TUTTI i file che un certo pacchetto ha fornito, permettendo una disinstallazione senza residui, al contrario di Windows. Rispetto a Windows poi si ha anche un controllo capillare di eventuali conflitti tra pacchetti. Su Windows è possibile che 2 programmi diversi installino la stessa libreria dll. Windows non fa controlli sulle versioni delle librerie che vengono installate ne tanto meno esiste una netta differenziazione tra una versione e l'altra (come abbiamo visto sopra). Pag.30 di 65 Quindi il programma A potrebbe installarmi mfc42.dll versione 4.21.71 e il programma B (installato successivamente) sovrascrivere la prima con mfc42.dll versione 4.21.58 causando, potenzialmente, un malfunzionamento del programma A. E' questo il motivo per cui spesso su Windows capita che installando e disinstallando spesso programmi, anche solo per prova, si finisce per causare errori, rallentamenti e malfunzionamenti del sistema che portano inevitabilmente alla necessità di cancellarlo e reinstallarlo ex novo, in quanto districare tutti i rimescolamenti effettuati dai programmi avvenuti nei mesi sarebbe impossibile. Su Linux questo non accade, avviene una netta divisione tra pacchetti che forniscono librerie e pacchetti che forniscono programmi, in ogni modo il Package Manager, tramite il suo database interno, riesce a capire che un pacchetto A sovrascriverebbe un file che appartiene al pacchetto B. Questa situazione si chiama conflitto, viene quindi segnalata l'incompatibilità tra 2 o più pacchetti, delle informazioni sul tipo di conflitto sono visualizzate e talvolta sono proposte anche eventuali soluzioni. Ma in ogni caso deve essere l'utente a decidere sul da farsi, forse intellettualmente obbliga l'utente a “pensare” ma evita in maniera estremamente efficace i disastri che capitano soventemente su Windows. Inoltre la nomenclatura dei file delle librerie adottata su Linux permette la coesistenza di versioni diverse della stessa libreria, se 2 programmi avessero bisogno per l'appunto di 2 versioni diverse di una stessa libreria. Su Linux non sarebbe impossibile osservare situazioni simili a questa: ● ● libaudio.so.2.4 libaudio.so.2.4.2 Esattamente la versione 2.4 e la versione 2.4.2 di libaudio.so Nota finale: oltre al formato “rpm” usato dalla maggioranza delle distribuzioni esiste anche il formato “deb” usato sopratutto da debian e ubuntu. I formati rpm e deb hanno un funzionamento concettuale di base che è il medesimo. Organizzazione della struttura delle directory che contengono programmi e librerie: Su Windows si osservano poche directory nella radice del disco C:, le 2 principali sono “Programmi” e “Windows”. All'interno di queste 2 sostanzialmente regna l'anarchia totale, sotto-directory sono create a discrezione dei programmi che vengono installati. File, librerie ed eseguibili sono installati ovunque senza nessuna logica apparente se non la personale logica del programmatore che ha creato il programma “A” che sarà diversa dalla logica utilizzata dal programmatore del programma “B”. Sostanzialmente è un caos totale. A parte la struttura generata dai programmi di terzi, anche quella di base dello stesso sistema operativo appare disorganizzata e ricca di elementi equivoci, facciamo alcuni esempi: ● ● ● ● ● ● ● ● Program Files Program Files\Common Files Programmi\File Comuni Programmi\Common Files Documents and Settings\nome\Impostazioni locali\Dati applicazioni Documents and Settings\nome\Dati applicazioni Documents and Settings\nome\Impostazioni locali\Dati applicazioni\Identities Documents and Settings\nome\Dati applicazioni\Identities Pag.31 di 65 Su Linux, nella radice del disco di sistema, sono presenti molte più directory, ognuna delle quali però è espressamente adibita a contenere file di una ben precisa natura. Tra una distribuzione e l'altra possono esistere alcune differenze, ma la cosa importante è che su ogni sistema esistono delle definizioni dell'ambiente che permettono in maniera discretamente automatizzata di definire, quando si compila un programma generando eventualmente un pacchetto rpm di binari, di mettere tutti i file al posto giusto. La struttura base delle directory è dettata dagli stessi standard POSIX a cui Linux come tutti i sistemi UNIX aderiscono. Altre strutture di directory aggiuntevi negli anni per necessità pratiche sono definite dallo standard LSB (Linux Standard Base). Tutte le distribuzioni Linux aderiscono a POSIX e la maggior parte di esse aderisce allo standard LSB. Andando ad analizzare la struttura directory di Linux potremo osservare: ● / è la directory radice (root, equivalente a c:) Directory riguardanti l'avvio del sistema ● ● ● ● /bin contiene i programmi usati per il boot del sistema /sbin contiene i programmi usati per il boot del sistema, ma che può eseguire solo l'utente (root) /etc file di configurazione di sistema /dev contiene i devices, cioè collegamenti ai vari dispositivi: tastiera, modem, dischi,ecc. Directory riguardanti il kernel di linux ● ● ● ● ● /boot Kernel e i file di configurazione del boot manager. /initrd l'initial ram disk, usata nella procedura di boot (non tutte le distribuzioni mostrano questa directory però) /proc processi del kernel (filesistem virtuale) /lib librerie di sistema (modalità singolo utente) /lib/modules moduli del kernel Directory di sistema ● ● ● /mnt o /media directory dove di solito sono montati i dispositivi di archiviazione (si può scegliere anche un'altra directory ma lo standard prevede questa (cdrom, dvd, HD, penne USB) /usr comandi, librerie, pagine di manuale, giochi e altri files per utilizzo normale (modalità multiutente) replica la struttura di: "/" ○ /usr/bin tutti i programmi si trovano quà ○ /usr/sbin programmi eseguibili solo da root ○ /usr/include file "header" usati durante la compilazione ○ /usr/lib librerie utili ai programmi ○ /usr/local installazioni locali ○ /usr/man,info,doc pagine di manuale ○ /usr/games giochi ○ /usr/src sorgenti per la compilazione ○ /usr/share risorse condivise ○ /usr/X11R6 file del server X /opt applicazioni aggiuntive (opzionali, su molte distribuzioni vi si trova installato KDE e/o buona parte di Gnome, nonché molti programmi statici ossia che non usano solitamente altre parti del sistema per funzionare, come OpenOffice) Directory utente (qui potete inserire i vostri file, prevedono directory specifiche per i vari tipi di file) ● ● ● alcune distribuzioni /root la "home" dell'utente root (amministratore) /home directory degli utenti (es. /home/vostronome) /tmp i file temporanei usati dalle applicazioni Pag.32 di 65 Registro di sistema contro file di configurazione: Windows dalla versione 3.0 in avanti adotta un registro di sistema per archiviare le configurazioni di qualsiasi cosa, dai driver alle impostazioni dei programmi (in Windows 3.0 era un file di testo semplice, da Windows 3.1 in avanti fu creato un registro binario). Questo significa che Windows e qualsiasi altro driver/programma installato andrà a salvare le informazioni in questo monoblocco, dove le informazioni sono disperse all'interno di migliaia di chiavi spesso incomprensibili per un essere umano. Potete accedere al registro di sistema di Windows eseguendo “regedit” (mostrare agli alunni il registro di sistema e la sua poca comprensibilità) Il grande problema legato all'uso del registro di sistema, come per la gestione del software, è che le applicazioni nel tempo tendono a sporcarlo sempre di più. Cambiando valori del registro si sistema si può cambiare anche il comportamento di alcune componenti di Windows, il registro di sistema quindi è terreno fertile anche per malware e virus che possono inserirvi facilmente valori e chiavi per ottenere diversi scopi tra cui anche forzare Windows al download di un virus qualora questo sia stato rimosso. Capita a volte che alcune chiavi di registro si danneggino, magari a causa di un crash o di errori di varia natura. Un programma potrebbe smettere di funzionare perché le sue chiavi sono corrotte e la sua disinstallazione e successiva reinstallazione potrebbero non sovrascrivere le chiavi di registro relative. In questi casi diventa necessario intervenire sul registro per cercare di eliminare a mano tutte le chiavi usate da quel programma... ma se vi trovaste di fronte a qualche migliaio di chiavi come questa: {asdf2sd8v5sdv1s8d7vs076sd8b947y32sv748sdf7v} certamente dovreste rinunciare. Capita poi, in casi più gravi o dopo infezioni virali, che vengano danneggiate chiavi di sistema che causano pesanti malfunzionamenti, anche dopo la disinfezione. Tutti questi casi obbligano alla riformattazione in quanto correggere qualcosa di così intricato è impossibile. Linux adotta un sistema molto più furbo ed intelligente. Dei semplici file di testo contenenti le configurazioni dei programmi, creando ovviamente un file separato per ogni programma. Ogni file riporta il nome del programma che lo ha generato o nel caso dei file contenenti configurazioni di sistema il nome del servizio o dello scopo del file stesso, rendendo la ricerca e la modifica manuale molto semplice. I file di configurazione di sistema in Linux si trovano dentro a /etc Mentre i file di configurazione dei programmi usati dagli utenti vengono creati all'interno dell'home directory dell'utente stesso. Questi file sono quindi personali, ogni utente avrà i suoi, rendendo possibile una netta divisione tra settaggi di più utenti che usano lo stesso computer. Su Windows invece è possibile che i “taroccamenti” di un'utente vadano a influire negativamente anche sugli altri. I file di configurazione personali sono “nascosti”, sotto Linux si considera nascosto un file o una directory cui il nome inizia con un punto. Normalmente i file-manager grafici di Linux non rendono visibili questi file, almeno che non si attivi la loro visualizzazione. Nel caso avvenga il danneggiamento di un file di configurazione e un'applicazione smetta di funzionare diventa semplicissimo attivare la visualizzazione dei file nascosti e cancellare il file o la directory nascosta che riporta lo stesso nome del programma che non va più. Quando riaprirete il programma esso non troverà più nessun settaggio e creerà un nuovo file. Pag.33 di 65 Dovrete poi riconfigurare tutto il programma come se fosse la prima volta che lo usate, di certo meno drastico che reinstallare l'intero sistema operativo. Nota: I file di configurazione si usano da sempre è Microsoft che negli anni '80 ha voluto inventare il registro di sistema, condannando tutti i suoi utenti ai problemi che ne derivano. Filesystem: In informatica, un filesystem è un meccanismo con il quale i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un hard disk o un CD-ROM. Più formalmente un filesystem è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei dati. Esistono tanti tipi di filesystem, tutti con i loro pregi e i loro difetti. Sotto Windows ne esistono solo 2: ● ● FAT NTFS La FAT o meglio FAT32 (esiste anche la FAT16, ma non è più molto utilizzata in quanto la dimensione massima di una partizione formattabile con FAT16 è di soli 2Gb) è un file-system direttamente derivato da MSDOS. La FAT ha una struttura estremamente semplice. La troppa semplicità rende FAT un filesystem estremamente fragile e passibile di errori, nonché anche limitato nelle sue caratteristiche. FAT non può memorizzare attributi estesi e permessi sui file, non può memorizzare file più grandi di 2Gb. Non vi è modo di sapere se ci sono errori nel filesystem senza analizzarlo integralmente (scandisk) ed è pesantemente afflitto dal problema della frammentazione. Per frammentazione si intende che i file vengono memorizzati in maniera discontinua, rallentando l'accesso agli stessi in quanto il disco, meccanicamente, deve saltare avanti e indietro per leggere tutti i vari pezzettini, sparsi in giro, rendendo necessario di tanto in tanto eseguire programmi di deframmentazione (defrag), per rimettere ordine e recuperare le prestazioni perse. I sistemi Windows 9x possono usare solo questo filesystem. NTFS è il filesystem nato con Windows NT, copiato quasi integralmente nella struttura e nel concetto da HPFS, il filesystem di OS/2 (un vecchio sistema operativo di IBM ormai caduto in disuso). NTFS rispetto a FAT ha la tabella di allocazione dei file (sostanzialmente l'indice) posta al centro del disco mentre su FAT è all'inizio. Questo velocizza un po', ma non troppo, l'accesso alla stessa tabella. NTFS ha anche la possibilità di salvare permessi sui file. Come FAT per scoprire la presenza di errori è necessario analizzare tutto il filesystem. NTFS frammenta anche se un pò meno di FAT. Linux invece ha a sua disposizione parecchi filesystem differenti, alcuni nativi altri ereditati dai sistemi UNIX commerciali abbandonati dalle case madri a favore di Linux. ● ● ● ● ● ● ● ● ● Ext2 (nativo ma obsoleto) Ext3 (nativo) Ext4 (nativo ancora sperimentale) ReiserFS (nativo) JFS (ereditato da IBM AIX) XFS (ereditato da SGI IRIX) Altri poco usati o usati in ambiti particolari come filesystem che risiedono su ROM in sistemi embedded come CramFS. Linux può leggere e scrivere anche su NTFS e FAT di Windows Linux può leggere e talvolta anche scrivere sui filesystem di computer apple: HFS e HFS+ Pag.34 di 65 Tutti i filesystem nativi di Linux, e quelli ereditati, posseggono una struttura molto complessa, capace di gestire efficacemente dischi e file enormi (fino ed oltre 128.000.000 di gigabites). Posseggono una tecnologia chiamata Journallig che non rende necessario analizzare tutto il disco in cerca di errori dopo un crash o dopo uno spegnimento improvviso. In un filesystem Journalled vi è un'area dedicata, chiamata Journal, nella quale si scrivono tutte le modifiche che si vanno ad affettuare sul filesystem prima che queste avvengano. Se apro un file e comincio a scriverci dentro, poi salta la corrente su FAT e su NTFS il file rimarrà aperto con i dati parzialmente scritti. Questo è un errore, sarà necessario eseguire scandisk per correggerlo. Perdendo ovviamente tempo per l'analisi e perdendo i dati che erano contenuti nel file. Su di un filesystem Journalled l'azione di aprire il file prima viene scritta nel Journal poi nel filesystem. Se salta la corrente all'avvio successivo la prima cosa presa in esame dal sistema sarà il Journal, dentro il quale troverà informazioni riguardo l'ultima azione non terminata. Se era stato aperto un file e la scrittura dei dati non era stata completata si saprà quale file era, e dove si trova l'errore correggendolo immediatamente in pochi istanti, senza necessità di perdere tempo ad analizzare tutto e in certi casi sarà anche possibile completare la scrittura del file senza perdere dati. Se lo spegnimento fosse avvenuto prima della scrittura vera, quando ancora il sistema stava accedendo al Journal vi sarà la sicurezza che non vi sono errori. Il journal verrà azzerato e il sistema ripartirà senza problemi. I filesystem Linux inoltre hanno tabelle di allocazione multiple per velocizzare l'accesso ai dati e per fare in modo che il danneggiamento di una a più tabelle non renda inaccessibili i dati (ridondanza). Hanno tassi di frammentazione molto bassi o quasi assenti, non serve “defrag”. Non esistono utility atte a deframmentare i filesystem di Linux. Tra i vari filesystem elencati ovviamente esistono differenze tecniche possono far preferire uno all'altro in base alle varie situazioni. che Degni di nota particolare sono Ext3: un filesystem estremamente ridondante, è possibile recuperare dati abbastanza facilmente anche da dischi parzialmente riformattati o sovrascritti, è leggero da utilizzare da parte della CPU. Non vanta una grande velocità (ma rimane più veloce di NTFS) e non è adatto se usato su grandi partizioni con tantissimi file e directory. Ha un tasso di frammentazione pressoché nullo. XFS: è il filesystem di SGI IRIX (Silicon Graphics), uno dei filesystem in assoluto più performanti mai concepiti. Permette un bilanciamento di banda tra tutti i vari processi paralleli che vi accedono. Ha un'elevatissima velocità sia in lettura che in scrittura anche su filesystem enormi e con un numero molto elevato di file a directory. Ha un uso di CPU molto basso. Non possiede la stessa ridondanza di ext3 e ha un tasso di frammentazione un pochino maggiore ma comunque insignificante. Le caratteristiche di questo filesystem derivano dall'uso cui era destinato IRIX, ossia elaborazione video di livello cinematografico. Pag.35 di 65 Gestione della memoria e dei task: su questo argomento ci sarebbe da parlare per mesi e mesi. L'argomento è troppo complicato per essere presentato in questo corso. Sappiate comunque che la gestione della memoria e dei task di Linux è molto ma molto migliore di quella di Windows. Una piccola parentesi può essere aperta sulla gestione della memoria virtuale: La memoria virtuale, o swap to disk, è una tecnica che permette ad un sistema operativo di usare il disco fisso come estensione della memoria RAM, ossia se si eseguono programmi molto pesanti e la RAM divenisse insufficiente il sistema riuscirà ad utilizzare una porzione di disco come estensione della stessa. Un disco fisso però è migliaia di volte più lento della RAM e l'uso massivo dello swap rallenta molto il computer. Per questo motivo è saggio cercare di utilizzare una tecnica di swap quanto più veloce possibile. Linux utilizza una partizione dedicata allo swap, questa partizione non ha nessuna formattazione particolare, vi accede sopra in maniera diretta, grezza. Tecnicamente questo tipo di accesso si definisce RAW. L'accesso RAW ad una partizione è il metodo più veloce in assoluto di leggere e scrive dati su un disco. Windows invece utilizza un grosso file all'interno del disco C: su Windows XP lo potete osservare nella radice principale del disco con il nome pagefile.sys Accedere ad un file obbliga prima ad accedere ad una struttura complessa che è quella del filesystem. Inoltre in determinate condizioni è possibile che il pagefile.sys si “frammenti” sul disco rendendo ancora più lento l'accesso su di esso. Ancora: Windows e' capace di spostare in swap solo i dati delle applicazioni ma non le applicazioni stesse, anche se inattive. Mentre Linux e' capace di migrare sullo swap un'intero processo. Ad esempio se stiamo lavorando con molte applicazioni aperte e arriviamo ad appesantire in maniera critica il sistema Windows riuscirà a spostare sullo swap solo i dati di queste applicazioni, se non fosse sufficiente segnalerà errore di memoria insufficiente e si sarà costretti a chiudere qualcosa. Invece Linux sposterà sullo swap anche interi processi inattivi pur di liberare memoria da sfruttare nell'immediato per poi risvegliarli solo quando sarà necessario. Pag.36 di 65 Ottimizzazione generale di librerie e programmi: Abbiamo già visto nel capitolo “Come avviene lo sviluppo Closed Source” tanti svantaggi dovuti al modello di sviluppo. Oltre a questo su Windows vi è anche un'architettura piuttosto scadente. Come voi tutti sapete su una versione di Windows nuova è sempre stato possibile utilizzare programmi binari pensati per versioni precedenti dello stesso sistema. La scelta di mantenere la compatibilità (binaria) con il passato è la causa principale dell'inefficienza complessiva del sistema. Nulla è perfetto, anche i programmi e le librerie scritte dalla stessa Microsoft. Quindi se oggi esce una certa versione di Windows, sarà quella! Con i suoi pregi e difetti. Le varie software house mondiali scriveranno programmi per Windows tenendo in considerazione la struttura di questo sistema, compresi i suoi difetti... Può capitare, che un programmatore scriva un programma, che questo programma utilizzi una libreria del sistema che però presenta un difetto o BUG che causa, magari solo in determinate condizioni, un comportamento anomalo della stessa libreria. Il programmatore deve quindi considerare nel suo programma l'anomalia della libreria, cercando di raggirarla in qualche modo, in gergo fare un workaround. Con la versione successiva di Windows questa libreria, anche se considerata obsoleta, non può essere rimossa perché causerebbe incompatibilità con i vecchi programmi che la usavano. Contemporaneamente i BUG delle librerie non possono essere corretti il più delle volte, perché si perderebbe compatibilità con tutti quei programmi che le usano effettuando workaround. BUG che venendo a mancare causerebbero errori nell'applicazione che cerca di fare workaround su di un BUG non più presente. Per questo motivo Windows è un sistema che non si aggiorna a tutti gli effetti ma con le successive versioni non fa altro che aggiungere roba in più rispetto la versione precedente, riuscendo a fatica e solo dopo molti anni ad eliminare le parti più obsolescenti. E' cultura diffusa tra gli sviluppatori software continuare a usare le vecchie librerie perché si fa prima che a studiarsi il funzionamento delle nuove, molti fanno il ragionamento: tanto mica le tolgono! Purtroppo questa manifestazione di pigrizia di chi sviluppa software allunga di molto il tempo di vita delle parti obsolete. Un sistema così sviluppato tende a diventare sempre più pesante e intricato ad ogni sua nuova versione. Su Windows XP si possono ancora osservare residui di Windows 3.1. La directory c:\windows\system su XP è appunto un retaggio di Windows 3.1, anche nel registro di sistema si possono osservare chiari riferimenti a questa vecchissima versione di Windows. Pag.37 di 65 Ecco una prova di quanto detto E questo screen-shot è solo la più evidente tra le tante. Su Linux invece avviene il contrario, quando si trova un BUG lo si corregge, quando una libreria è obsoleta la si elimina o per lo meno inizialmente non la si installa più di default. Essendo tutto Open Source non è troppo difficile ovviare poi ai problemi derivati da questi continui cambiamenti. Se un programmatore riscontra un difetto su una libreria, anche non sua, la correggerà rendendo pubblica la modifica che sarà poi adottata da tutti, o quanto meno segnalerà il problema a chi ha scritto la libreria perché porga rimedio. Oppure se una libreria viene modificata e un programma smette di funzionare, sempre grazie alla disponibilità del codice sorgente sarà relativamente facile adattare il programma alla nuova libreria. Non c'è da confondere questo processo di miglioramento continuo di Linux con le patch distribuite da Microsoft come aggiornamenti. Tramite WindowsUpdate è possibile aggiornare Windows in modo da correggerne i difetti di funzionamento. Il problema è che gli aggiornamenti di Windows solo in certi casi cambiano qualcosa di difettoso con qualcosa di effettivamente corretto, in tanti altri casi sono inserite delle “exception”. Pag.38 di 65 Come si è detto sopra spesso non si può correggere un BUG senza causare una perdita di compatibilità con quei programmi che effettuano workaround, se il BUG di una libreria diventa fastidioso o pericoloso, magari perché causa crash del sistema o permette la propagazione di Virus si aggiungerà dentro a Windows un piccolo programmino che sorveglia la libreria bacata, lasciando che le applicazioni facciamo quello che vogliono ed intervenendo solo qualora si vadano a creare determinate condizioni pericolose. Esempio stupido: è come se avessimo una banca, dentro a questa banca vi è una cassaforte con un buco su di una parete che permette di infilare un braccio e di prendere i soldi al suo interno. Per diverso tempo nessuno ai piani alti si accorge di questa cosa, nel frattempo diversi dipendenti della banca prendono l'abitudine di tirare fuori i soldi usando questo buco, perché si fa prima che non ad aprire tutto il complesso meccanismo della porta. Poi succede che anche persone malintenzionate scoprano questo buco e lo sfruttino per rubare soldi. A questo punto la banca “Windows”, visto che è difficilissimo cambiare le abitudini dei suoi dipendenti e visto che non può licenziarli, dovrà adottare una guardia giurata che stia a sorvegliare il buco, lasciando che i dipendenti infilino il braccio prendendo soldi ma fermando chiunque abbia comportamenti sospetti, come mettersi li con un sacco e prendere tutti i soldi. Ci sono dipendenti buoni e dipendenti cattivi: Sotto Linux sicuramente i dipendenti buoni avrebbero informato i piani alti del buco (sicuri del fatto di essere ascoltati) o addirittura gli stessi dipendenti buoni e più capaci, con desiderio di migliorare e spirito di collaborazione, si sarebbero occupati di chiudere il buco. Una volta che il buco è chiuso poi tutti i dipendenti che per qualche ragione erano abituati ad infilare il braccio si adattano per forza di cose. I dipendenti cattivi probabilmente avrebbero voluto arrecare danno, ma il modo collaborativo adottato da Linux fa si che una falla, una volta scoperta venga chiusa in tempi piuttosto brevi, spesso tanto brevi da non dare modo ai cattivi di agire. Anche sotto Windows ci sono dipendenti buoni e dipendenti cattivi, peccato che purtroppo spessissimo i piani alti non ascoltano chi appartiene ai ceti inferiori, inoltre non vi è modo per le persone di riparare un difetto in maniera indipendente (mancano i sorgenti). Finché un BUG non diventa causa di gravi problemi o danni viene ignorato. Anzi talvolta Microsoft ha denunciato persone che si sono azzardate a rendere pubblici BUG di Windows, accusandoli di ledere l'immagine di Windows e di mettere a rischio tutti gli utenti che lo usano. Security by obscurity: Se nessuno sa di un difetto è come se questo non vi fosse. Secondo loro... Peccato che non si può essere sicuri che nessuno conosca un certo difetto finché la mole di vandalismi e il danno arrecato da qualche individuo non lo rende evidente. Nel 2004 un BUG di MS-SQL permise la propagazione di un worm (una particolare tipologia di virus) che in meno di 24 ore mise KO tutta la rete informatica delle poste italiane mandando in crisi tutto il settore per 1 settimana. Microsoft intervenne tempestivamente con una patch e fu anche lodata per la sua celerità. Purtroppo però era a conoscenza di quel BUG già da tempo ma non lo considerava una priorità; fino ad allora nessun cattivo se ne era mai accorto sfruttandolo in qualche modo. Il danno subito dalle poste italiane si poteva evitare! Pag.39 di 65 La portabilità: Linux vanta una portabilità eccezionale, è stato adattato senza particolari problemi per girare su hardware di ogni genere e natura. Microsoft ha solo la piattaforma Windows CE usata su molti palmari e GPS. CE non vanta certo di essere leggero o stabilissimo. Inoltre dal punto di vista di chi sviluppa le applicazioni è molto più difficile e macchinoso programmare per Windows CE piuttosto che per Linux embedded. Basti pensare che l'ambiente Linux e Linux embedded sono praticamente uguali, mentre per programmare su CE è necessario usare emulatori hardware/software poi le librerie e l'architettura del sistema sono molto diverse da quella di Windows per PC. In cosa Windows è migliore di Linux: ... Supporto di certi hardware particolari. Ci sono programmi per Windows che non vengono portati anche su Linux oppure non esistono corrispettivi Open Source: in particolar modo software dedicati o personalizzati, come gestionali. Software di controllo di certe apparecchiature o macchinari. Video Games. Ma per scelta/colpa dei produttori di hardware o software. Linux di per sé non avrebbe nessun problema a farli funzionare. Pag.40 di 65 Com'è possibile, da Linux, sopperire alla mancanza esclusivamente creati per Windows: in vari modi... di certi software 1. Mantenere Windows su di una partizione per avviarlo quando necessario. 2. Usare un wrapper. 3. Se si possiede un PC abbastanza potente si possono usare virtualizzatori. La prima soluzione è quella più classica, si ritaglia uno spazio per Windows sul disco fisso del computer e per mezzo di un bootloader sarà possibile scegliere, all'accensione del PC, quale sistema avviare (Windows o Linux). Non si potrà godere dei programmi Windows quando si è dentro a Linux e viceversa, rendendo necessario il riavvio del PC per cambiare SO. Questo ha il vantaggio di mantenere Windows nativamente sulla macchina, necessario ad esempio se si deve usare hardware particolare o fruttare le potenzialità di una scheda grafica per far girare videogames. Uso di wrapper: I wrapper sono programmi molto particolari studiati appositamente per creare un'interfaccia di traduzione tra librerie e programmi alieni. Sistemi operativi complessi come Windows e Linux praticamente hanno librerie per fare tutto. Entrambi i sistemi implementano funzioni equivalenti: è solo il modo che è diverso. Un wrapper molto famoso sotto Linux è “Wine”. Wine cerca di imitare tutte le funzioni di base di un sistema Windows, costruendo così uno strato di compatibilità verso i suoi file eseguibili. Quando un programma Windows viene avviato tramite Wine crede di essere all'interno del suo ambiente nativo, interfacciandosi con Wine come se fosse Windows. Wine poi non farà altro che tradurre le chiamate a funzione dei file EXE nelle equivalenti chiamate native del sistema Linux. Il risultato è quello di poter eseguire programmi Windows su Linux, in maniera diretta. Il vantaggio di un wrapper è di far girare il minimo indispensabile al funzionamento dell'applicazione, consumando il minimo indispensabile delle risorse del computer. L'applicazione aliena può comunicare direttamente con il sistema che la ospita, riuscendo ad esempio a stampare, ad accedere a file e directory presenti sul disco Linux. Lo svantaggio di un wrapper, o meglio di Wine in particolare, è che Microsoft purtroppo non documenta tutte le funzioni presenti in Windows, o le documenta male. Molti ambienti di sviluppo sotto Windows permettono di programmare in modo visuale e i programmi generati a volte finisco per usare funzioni non documentate la cui esistenza è conosciuta solo da chi ha fatto l'ambiente di programmazione stesso. Perciò succede che a volte certi programmi Windows chiamino funzioni fantasma mandando Wine in errore. Gran parte dello sviluppo di Wine si è svolto per ingegneria inversa, ossia si andava a studiare il funzionamento delle dll di Windows per poi cercare di imitarlo. Esiste una versione commerciale di Wine: Cedega. Cedega riesce a far girare molti videogames per Windows su Linux e la cosa impressionante è che a volte, a parità di hardware, questi giochi hanno prestazioni migliori su Linux (dentro questa sorta di emulazione) che non sul loro ambiente nativo. Il codice di cedega e quello di Linux è talmente ottimizzato da offrire prestazioni migliori dell'ambiente Windows nativo dove non vi è nessuno strato frapposto tra programma e sistema. Questo dovrebbe far riflettere. Pag.41 di 65 Virtualizzatori: I virtualizzatori sono programmi molto complessi nella loro struttura, che permettono di creare un computer virtuale sul quale far girare integralmente una copia di un'intero sistema operativo con tutte le sue applicazioni sopra. Inizialmente sono nati per sopperire alle problematiche dei wrapper, non riuscendo mai a simulare perfettamente l'ambiente nativo qualcuno ha pensato di far girare integralmente il sistema operativo desiderato con dentro le sue applicazioni. Ovviamente questo processo risulta più esoso di risorse e può essere realizzato solo se si possiede un computer sufficientemente potente. I virtualizzatori con il passare degli anni si sono molto raffinati diventando efficientissimi e molto importanti in parecchi ambienti professionali. Capita in aziende medio/grandi di avere a che fare, simultaneamente, con diversi software gestionali o programmi dedicati, provenienti da diverse case software e con diversi requisiti per poter essere eseguiti. Magari ci si trova di fronte a un vecchio gestionale contabile che gira ancora su Windows NT, un software di gestione delle tempistiche di lavorazione che vuole Windows 2003 con MS SQL e un software per la gestione degli ordini via web che gira su Linux. Qualche anno fa si sarebbero costruiti 3 server, ognuno con il suo SO e il suo programma. Tutti e 3 sfruttati però al 25% della loro potenza. Con un grande spreco di soldi per acquistare l'hardware, di tempo dedicato alla manutenzione, spazio occupato fisicamente da queste macchine e di energia elettrica per tenerle in funzione. Oggi possiamo costruire un'unico server dedicato, con Linux, sul quale far girare simultaneamente tutti e 3 gli altri sistemi operativi con le loro relative applicazioni. Sfruttando meglio anche le risorse della macchina a nostra disposizione. Un'altro vantaggio della virtualizzazione consiste nel fatto che una macchina virtuale sta all'interno di uno e più grossi file, contenenti l'immagine del suo hard disk con tutto il SO, le applicazioni e i dati. E' quindi facile salvare l'intera installazione. Il virtualizzatore, poi, non mostra alla macchina virtuale il vero hardware del computer, ma un hardware virtuale standard. Se noi avessimo un server con Windows 2003 e questo server si rompesse innanzitutto dovremo sostituirlo, poi reinstallare su di esso appunto Windows 2003, i driver della macchina e tutte le applicazioni che andranno riconfigurate da zero per poi importare i dati che si sono salvati dal vecchio server rotto. Questa procedura può essere onerosa di tempo e costringere ad un fermo prolungato di chi deve lavorare. Nel caso di un server virtualizzato se l'hardware fisico si rompesse anche qui, ovviamente, dovremo sostituirlo. Dovremo reinstallare un sistema Linux, solitamente ridotto ai minimi termini, che sorregge solo il software di virtualizzazione dopo di che ricopiare semplicemente i backup delle macchine virtuali. Saranno immediatamente operative! Infatti come detto l'hardware simulato dal virtualizzatore è sempre uguale, quindi questi server virtualizzati non si accorgeranno di nulla, anche se l'hardware del nuovo server fosse completamente diverso da quello precedente. Solo per chiarezza: se per ipotesi noi avessimo un server con Windows e questo si rompesse qualcuno potrebbe obbiettare che si può sempre prendere l'harddisk del vecchio e montarlo sul nuovo, oppure clonare l'installazione del vecchio server sul nuovo. Purtroppo questa procedura il 99% delle volte fallisce, soprattutto se l'hardware di destinazione non è identico a quello di partenza. Windows si avvierà e cercando di caricare sul nuovo server i driver del vecchio causerà un'immediato blocco del sistema, non c'è nessuna via d'uscita se non reinstallando interamente Windows sul nuovo hardware. Pag.42 di 65 Continuando con le peculiarità positive dei virtualizzatori: essi possono trovate utilità anche in altre situazioni. Potremo aver bisogno di utilizzare sistemi o software molto vecchi che non funzionano più su PC moderni... Un cliente dei Laboratori AIDAN, una grossa ditta di lavorazione della lamiera, ebbe il problema seguente: Si era rotto il computer che controllava un'enorme macchina per il taglio al plasma. Questo computer funzionava ancora con il DOS e Windows 3.1 e necessitava di collegarsi in rete con altri PC. I PC moderni ormai non garantiscono più buona compatibilità verso sistemi così vecchi. Di base non era forse impossibile recuperare un vecchio PC, era decisamente più difficile reinstallare il vecchio software e soprattuto far andare la rete su DOS, dovendo trovare un adattatore ethernet che fornisse driver per farlo. Insomma un vero problema. Si risolse usando una virtualizzazione, creando una macchina virtuale partendo dal clone del disco del vecchio PC. Un virtualizzatore può dare modo ad una persona di testare e provare tanti diversi sistemi e programmi senza riformattare in continuazione il proprio PC. Esistono anche virtualizzatori capaci di simulare hardware non PC che permettono di far girare ad esempio vecchi sistemi Apple, di simulare un Amiga o un Commodore 64 anche se spesso sono usati più che altro dagli appassionati dei vecchi videogame e non per scopi lavorativi. Nota finale: i virtualizzatori simulano tutto l'hardware, quindi non rendono possibile per esempio far girare videogame. Il gioco non vedrebbe la vera scheda grafica 3D del PC ma una generica VGA PCI. Pag.43 di 65 Hacker e Cracker: 2 termini il cui vero significato è spesso ignorato dalla stragrande maggioranza delle persone. Un hacker è una persona che si impegna nell'affrontare sfide intellettuali per aggirare o superare creativamente le limitazioni che gli vengono imposte, non limitatamente ai suoi ambiti d'interesse (che di solito comprendono l'informatica o l'ingegneria elettronica), ma in tutti gli aspetti della sua vita. I primi ad auto-qualificarsi "computer hacker" nel campus del MIT negli anni '60 traevano origine da un gruppo di studenti appassionati di modellismo ferroviario, che negli ultimi anni '50 si erano riuniti nel Tech Model Railroad Club. Una ristretta enclave all'interno di quest'ultimo era il comitato Signals and Power (segnali ed elettricità) - gli addetti alla gestione del sistema del circuito elettrico dei trenini del club. Un sistema costituito da un sofisticato assortimento di relè e interruttori analogo a quello che regolava il sistema telefonico del campus. Per gestirlo era sufficiente che un membro del gruppo inviasse semplicemente i vari comandi tramite un telefono collegato al sistema, osservando poi il comportamento dei trenini. Dal punto di vista del comitato Signals and Power, usare un relè in meno in un determinato tratto di binari significava poterlo utilizzare per qualche progetto futuro. Il termine hacking era sinonimo di un gioco in grado di migliorare le prestazioni o l'efficienza complessiva del sistema ferroviario del club. I membri di quel comitato cominciarono a indicare con orgoglio l'attività di ricostruzione e miglioramento del circuito per il funzionamento delle rotaie con il termine "hacking", mentre "hacker" erano coloro che si dedicavano a tali attività. Considerata la loro affinità per i sistemi elettronici sofisticati non ci volle molto prima che gli hacker mettessero le mani su una macchina appena arrivata al campus. Noto come TX-0, si trattava di uno dei primi modelli di computer lanciati sul mercato. Sul finire degli anni '50, l'intero comitato Signals and Power era emigrato in massa nella sala di controllo del TX-0, portandosi dietro lo stesso spirito di gioco creativo. Il vasto reame della programmazione informatica avrebbe portato a un'ulteriore mutamento etimologico. "To hack" non indicava più l'attività di saldare circuiti dalle strane sembianze, bensì quella di comporre programmi, con poco rispetto per quei metodi o procedure usati nella scrittura del software "ufficiale". Significava inoltre migliorare l'efficienza e la velocità del software già esistente che tendeva a ingolfare le risorse della macchina. Ed è qui che successivamente si colloca una diversa radice del termine hacker, la forma sostantiva del verbo inglese "to hack" che significa "tagliare", "sfrondare", "sminuzzare", "ridurre", "aprirsi un varco", appunto fra le righe di codice che istruiscono i programmi software. Un hacker era quindi uno che riduceva la complessità e la lunghezza del codice sorgente, con un "hack", appunto, una procedura grossolana ma efficace, che potrebbe essere tradotta in italiano come "zappata" o "accettata" (tagliata con l'accetta) o altrimenti con una "furbata". Rimanendo fedele alla sua radice, il termine indicava anche la realizzazione di programmi aventi l'unico scopo di divertire o di intrattenere l'utente. I computer hacker operavano all'interno di una disciplina scientifica basata sulla collaborazione e sull'aperto riconoscimento dell'innovazione. Non sempre hacker e ricercatori "ufficiali" andavano a braccetto, ma nella rapida evoluzione di quell'ambito le due specie di programmatori finirono per impostare un rapporto basato sulla collaborazione. Pag.44 di 65 Cracker: In ambito informatico il termine inglese cracker indica colui che si ingegna per eludere blocchi imposti da qualsiasi software in genere. Il (cracking) può essere usato per diversi scopi secondari, una volta guadagnato l'accesso di amministratore nel sistema desiderato o dopo aver rimosso le limitazioni di un qualsiasi programma. I cracker possono essere spinti da varie motivazioni, dal guadagno economico (tipicamente coinvolti in operazioni di spionaggio industriale o in frodi). I media hanno l'abitudine di definire hacker i cracker, anche se sebbene alcune tecniche siano simili, i primi hanno scopi sostanzialmente creativi/esplorativi mentre i secondi possono rivelarsi addirittura distruttivi. I “Crack” sono piccoli programmi, spesso messi in circolazione da cracker, che hanno il solo scopo di rimuovere le protezioni di certi programmi. Ad esempio rimuovere il controllo di autenticità da Windows XP. Pag.45 di 65 Cosa sono i malware, cosa fanno e perché: Per malware si intende genericamente “cosa malvagia”. Molte persone usano genericamente il termine “Virus” ma questo è scorretto, in quanto il Virus è solo una delle tante categorie di malware. Le categorie di malware sono: ● ● ● ● ● ● ● ● ● ● ● ● ● Virus Trojan Adware Spyware Worm NetBot SpamBot Backdoor Dialer hijacker RootKit Downloader Email “Phishing” Tutti questi tipi di malware si differenziano per il modo di funzionare, di propagarsi e di infettare i PC, mentre spesso le loro finalità ultime sono sempre le medesime. Iniziamo subito col dire che quella di prendere malware è una prerogativa di Windows mentre Linux resta sostanzialmente immune a questa problematica. Iniziamo con lo sfatare una credenza comune: Molte persone credono che i malware abbiano lo scopo di “rompere” il PC, e di causare malfunzionamenti di Windows. In realtà non è così. Prima analizziamo però il perché esistono i malware; chi li scrive? perché? Ma non hanno niente di meglio da fare? Chi scrive e diffonde malware solitamente non sono ragazzini brufolosi e arrabbiati col mondo, che si divertono a vandalizzare i computer delle povere persone, ma gruppi organizzati di malavitosi veri e propri. Lo scopo? Fare soldi ovviamente! Uno dei canali con cui fare soldi è lo spam. Per spam si intendono quelle fastidiose email che a volte cominciano ad arrivare nelle caselle di posta delle persone, pubblicizzando siti porno (nei quali per entrare ovviamente bisogna pagare), casinò online e gioco d'azzardo in genere, oggetti per finalità “sessuali”, vendite online di ogni genere come rolex fasulli, medicine miracolose tra cui il Viagra, pacchetti software contraffatti, etc... Ovviamente molte persone cestinano direttamente queste email considerandole una seccatura notevole. Come fare soldi con lo spam allora? La legge dei grandi numeri dice che più spam mandiamo più cresce la probabilità di raggiungere qualche “pollo” disposto a comprare o a “cascarci”. Ci sono spammer che generano fino (o anche oltre) 2 miliardi di email al giorno che si diffondono nel mondo raggiungendo le caselle di centinaia e centinaia di milioni di utenti. Se anche la percentuale di persone che cade nella trappola dello spammer fosse bassa, ipotizziamo un 2%, l'introito derivante dalla vendita sarebbe notevole. Si stima che ci siano individui (spammer) che guadagnano fino a 45.000$ al mese. Quasi 4 volte lo stipendio annuo di un operaio comune. Quindi si! E' difficile trovare di meglio da fare... Pag.46 di 65 Perché non arrestano questi individui? E poi cosa centra lo spam con i malware? Non li arrestano semplicemente perché vivono in paesi senza estradizione, le forze di polizia internazionale conoscono l'identità di molti di loro, sanno come si chiamano e dove abitano ma non li arrestano perché il paese dove vivono non considera illegale la loro attività. Mentre lo spam con i malware centra tantissimo. Sarebbe impossibile spedire 2 miliardi di email al giorno con 1 solo computer o con un piccolo gruppo di computer, forse con un'enorme server. In questo caso sarebbe necessaria anche una linea di connessione internet velocissima. Se anche lo spammer avesse a disposizione questi mezzi però sarebbe ancora troppo facile filtrare le sue email. Arrivando tutte da uno specifico indirizzo IP mittente noto è molto facile applicare filtri in modo che nessuna di esse arrivi a destinazione. Gli spammer quindi diffondono malware in modo da infettare quanti più computer possibili, sparsi per tutto il pianeta. Ogni computer infetto viene chiamato “zombie”, un gruppo di zombie infettati da uno stesso malware viene definito BotNet (da non confondere con i malware NetBot). Tutti i computer facenti parte di una BotNet sono pronti a prendere ordini da chi ha scritto il malware o da chi ha comprato in “affitto” la stessa BotNet per fare il suo comodo. Quando si ha a disposizione una BotNet molto grande si ordina a tutti i suoi zombie: “Mandate Spam”... A questo punto diventa facile mandare i famosi 2 miliardi di email al giorno, e diventa molto difficile filtrare questo spam in quanto ogni email non è perfettamente uguale all'altra e perché la provenienza non è mai la stessa. Mandare spam però non è l'unico modo per fare soldi usando battaglioni di zombie. Esistono anche altri tipi di speculazioni tra cui potrei citare l'andamento in borsa di aziende poste sotto attacco. Facciamo un'esempio: Tutti conoscono Yahoo. Yahoo è un titolo quotato in borsa ovviamente. Anni fa venne messo in circolazione un malware che aveva lo scopo di diffondersi e infettare quanti più computer possibili, restando silente fino ad un preciso giorno. Il giorno che questo malware si svegliò tutti i computer infettati cominciarono a fare richieste di connessione (apertura dell'home page) verso i server di Yahoo, in breve tempo questi vennero collassati da una mole di richieste migliaia di volte superiore alla norma. Dopo circa 12 ore dall'inizio dell'attacco divenne impossibile, per chiunque, accedere ai servizi di Yahoo in quanto semplicemente le pagine non si caricavano più. Questo tipo di attacco viene chiamato DDoS (Distribuited Denial of Service). A quel punto il valore delle azioni in borsa di Yahoo crollarono e chi “sapeva” ne approfittò per comprarne quante più poteva. Dopo una settimana il malware era programmato per disattivarsi automaticamente ristabilendo una situazione di normale fruibilità dei servizi di Yahoo, le azione in un mese circa riacquistarono il loro valore originario e chi “sapeva” aveva decuplicato il suo patrimonio azionario. BotNet vengono usate anche per effettuare attacchi politici versi siti di propaganda avversaria; Il regime comunista Cinese usò questo tipo di attacco verso siti esteri che effettuavano propaganda democratica contro lo stesso regime. Ancora; PC infetti possono essere usati, durante azioni di Craking, per mascherare la vera identità dell'attaccante. Chi viene attaccato “vede” come attaccante la macchina zombie, e le forze di polizia che indagassero sul caso arrivati allo zombie, non potrebbero sapere chi lo controllava in quanto lo zombie non tiene “log”, al contrario di provider e server. Pag.47 di 65 Ora vediamo brevemente il funzionamento dei vari tipi di malware: Virus: I virus sono programmi estremamente piccoli che funzionano sfruttando solitamente BUG del sistema o del software che attaccano per replicarsi e diffondersi, possono infettare i file eseguibili di altri programmi, supporti come floppy e il bootsector dei dischi fissi. I Virus erano una categoria di malware diffusa ai tempi di MS-DOS, solitamente non avevano “fini” se non quello di replicarsi e di danneggiare il computer che infettavano. Uno dei primi virus venne scritto e diffuso da Peter Norton a metà degli anni 80, facendo impazzire aziende e gruppi bancari. Alcuni mesi dopo lo stesso Peter Norton commercializzò la prima versione di Norton Antivirus. Oggi la categoria dei Virus è quasi estinta. Trojan: I trojan sono veri e propri programmi creati per ogni tipo di attività maligna si possa effettuare all'interno di un computer, prendono il nome dal loro modo di infettare il computer. Come nella storia mitologica del cavallo di troia i trojan infettano un computer perché è lo stesso utente a scaricarli e ad avviarli, inconsapevole della vera natura del file. Un esempio classico di trojan può essere “il falso sito porno” da cui si scarica un file exe cliccando sul link “clicca qui per accedere”. Oppure la falsa finestra di lettore multimediale che chiede l'installazione di un particolare codec per vedere il filmato della tal ragazza sexy, o il programmino che ti fa scaricare gratis la suoneria del cellulare con l'ultima canzone di un cantante famoso. Ci sono anche casi di trojan che vengono distribuiti sotto forma di veri e propri programmi antivirus/antispyware/etc gratuiti, e che apparentemente sembrano anche funzionare. Moltissimi trojan si trovano mascherati anche da Crack, parecchi siti di sottobosco distribuiscono crack (si trovano anche su reti di condivisione come eMule) atti a “piratare” altri programmi commerciali, costosi, bramati da molte persone. L'utente è indotto a credere che il file eseguibile del trojan sia di natura benigna quindi lo apre infettando il proprio PC. I trojan poi per non destare sospetto a volte fanno anche la funzione che l'utente si aspetta. Altre volte all'esecuzione lanciano una falsa finestra di errore che viene poi chiusa dall'utente che si convince che il programma non funziona. Adware: Dalla parola: “Cose aggiunte”. Gli adware sono programmi dalla dubbia utilità che vengono installati come aggiunte assieme ad altri programmi, spesso Freeware (gratis). Alla categoria degli adware fanno parte tutte quelle toolbar che si aggiungono nel desktop o sul browser Internet Explorer. Programmini per cercare file o cose sul web, magari pieni di pubblicità. E in genere tutte quelle che cose extra che vengono installate assieme ad altri programmi e che con loro non hanno direttamente a che fare. Si possono distinguere adware “buoni” (o meglio non cattivi) e adware cattivi. Sono adware buoni quando il programma di setup principale da modo all'utente di scegliere se installare anche gli ads oppure no. Come Winamp che installa un collegamento ad un sito da cui acquistare Musica in mp3, oppure CCleaner che chiede se si vuole installare la toolbar di Yahoo per internet explorer. Sono cattivi invece quando si installano di nascosto e bisogna disinstallarli a mano o peggio quando non si riesce più ad eliminarli con le vie convenzionali, rivelandosi piuttosto invasivi. Ad esempio l'adware “180solution” si vede nella lista dei programmi installati nel PC ma se si prova a disinstallarlo causa volontariamente un crash di Windows. Cancellando a mano la directory dove è installato in realtà non si elimina completamente il programma in quanto alcune parti restano attive e funzionanti, che hanno una funzione spyware, sono messe altrove. Pag.48 di 65 Spyware: Sono programmi che una volta installati nel computer spiano le attività dell'utente. I meno cattivi violano la privacy raccogliendo dati sulle abitudini di navigazione dell'utente (su che siti va), o su che programmi usa. I dati poi vengono solitamente raccolti con il fine di creare pubblicità più mirata che possa attrarre il maggior numero di persone. Quelli più cattivi potrebbero rubare l'intera rubrica di posta elettronica, trasmettendo gli indirizzi ad uno spammer che li inserirà in un database da cui attingere tutti i destinatari a cui verrà mandato lo spam. Altri spiware più mirati, chiamati anche keylogger, potrebbero cercare di intercettare la password che digitiamo quando accediamo a servizi come l'home bancking. Worm: I worm come i trojan possono avere finalità di ogni tipo ma differiscono dai trojan nel modo di propagarsi e infettare. Worm significa “verme”. I Worm si diffondono all'interno della rete da computer a computer, fruttando vulnerabilità del sistema operativo o dei software su di esso installati. Una macchina infettata da un Worm comincierà segretamente a sondare la rete (che sia locale o internet non ha importanza) alla ricerca di altri computer con la stessa vulnerabilità in cui intrufolarsi a sua volta. Ad esempio vi fu un BUG del firewall di “Norton Internet Security 2006” che permetteva la propagazione di un worm che, una volta infettata la macchina, cambiava delle chiavi di registro e corrompeva alcuni file DLL per far si che lo stesso antivirus apparisse perfettamente funzionante, in realtà nessun malware veniva più intercettato. Il worm poi, oltre che a propagarsi ulteriormente, si preoccupava anche di scaricare da internet e installare sul computer una marea di altri malware assortiti (Downloader). NetBot: Sono una categoria di malware dedicata alla creazione di BotNet. La macchina infetta diventa uno zombie che accede ad un canale di chat IRC preimpostato, creando per l'appunto un “bot”. L'amministratore del canale (ovviamente chi ha fatto il malware o chi ha comprato la rete di bot), poi potrà impartire comandi di massa a tutti i bot presenti nel canale di chat semplicemente scrivendoli nel canale. I NetBot possono essere diffusi con la tecnica dei trojan e dei worm. Spambot: uno Spambot è un malware “spara spam”. La macchina infetta spedisce email di spam in continuazione all'insaputa dell'utente che usa il computer. Gli Spambot possono diffondersi a braccetto con gli stessi spyware che rubano le rubriche di posta. Ci sono spambot invece che si spediscono solo alla rubrica di posta che trovano sul computer locale che hanno infettato e altri spambot che sono anche NetBot che attendono ordini per mandare email spammatorie ogni volta diverse in base agli stessi ordini e parametri che ricevono. Anche gli Spambot si diffondono solitamente con la tecnica dei trojan o dei worm. Backdoor: “Porta sul di dietro”. Le backdoor sono malware con lo scopo di aprire porte di accesso nascoste sul computer che hanno infettato. Il computer zombie in questo caso resta in attesa che qualcuno entri per fare qualcosa. Solitamente i PC infetti da backdoor vengono usati singolarmente, non in massa, per effettuare attacchi di Cracking o per lo scambio di materiale “scottante” lasciando anonimi e non rintracciabili i veri artefici. A volte anche normali programmi possono trasformarsi, loro malgrado, in Backdoor improprie. Ad esempio un BUG di RealVNC (un piccolo programma usato per gestire teleassistenze) fino alla versione 4.1.1 rendeva possibile, ad un'attaccante remoto, l'impossessarsi della macchina. Facendo leva su di un BUG era infatti possibile effettuare un login senza password, dopo di chè si poteva fare sul computer qualsiasi cosa si volesse. VNC infatti esporta video, mouse e tastiera del computer su cui è installato, ovviamente non era volontà degli sviluppatori di VNC permettere ciò. Pag.49 di 65 Dialer: I dialer sono programmi che una volta infettato il computer abbattono la connessione internet in corso e riconnettono lo stesso attraverso numeri internazionali a pagamento (144, 166, 005, etc...). Arricchendo il proprietario della linea e causando bollette telefoniche salatissime per l'utente. I dialer spesso si trovano su siti porno, o su siti che distribuiscono loghi e suonerie per cellulari o di casinò online cui è impossibile accedere se non si è connessi tramite la connessione creata dallo stesso dialer. In questo modo l'utente, dopo l'infezione, vedendo che il sito va ed è accessibile, continuerà ad accedervi, spesso ignaro dei costi a cui andrà incontro. Come per gli adware si può differenziare tra dialer buoni e cattivi, quelli buoni avvertono su cosa stanno per fare e su quelli che sono i costi di accesso che si andranno a sopportare accedendo a quel sito tramite lo stesso dialer, inoltre non precluderanno l'utente dall'uso di altre connessione internet differenti. Quelli cattivi invece faranno tutto di nascosto e spesso cancelleranno le altre connessioni ad internet già impostate sul sistema, oppure peggio si maschereranno dietro alle connessioni già esistenti così che l'utente crederà di accedere ad internet con il solito provider. Se cancellate e reimpostate le connessioni su di un computer infetto da dialer cattivo probabilmente non otterrete nulla, il computer continuerà a collegarsi attraverso il numero a pagamento. Il computer infetto da dialer cattivo tenterà di collegarsi in continuazione anche se non richiesto espressamente dall'utente. I dialer solitamente si diffondono solo con la tecnica dei trojan. I dialer funzionano solo se la connessione ad internet viene effettuata attraverso modem analogici o ISDN. La connessione ADSL non avviene componendo un numero di telefono, quindi non c'è il rischio di incappare in costi telefonici inaspettati. In ogni caso anche chi si connette attraverso ADSL può risentire della presenza del dialer, spesso si hanno difficoltà di connessione o navigando si viene sempre reindirizzati sulla pagina che vuole il dialer. Hijacker: Un hijacker è un particolare malware, che come i vecchi Virus, infetta file eseguibili di altri programmi o di sistema, rendendo molto difficile individuarli e/o rimuoverli. Lo scopo ultimo di un hijacker può essere qualunque. Solitamente si diffondono con la tecnica dei Trojan. RootKit: Per RootKit si intende una particolare tecnica di occultamento che può essere usata per nascondere un qualsiasi tipo di malware. Le tecniche usate dai RootKit fruttano lacune architetturali e BUG del sistema operativo per nascondere la presenza del processo maligno e anche gli stessi file del malware agli occhi dell'utente o alle scansioni di programmi antivirus. I RootKit si diffondono con la tecnica dei Trojan solitamente, anche se vi sono casi di diffusione come Worm. Downloader: I downloader sono un ceppo di Trojan il cui unico scopo è quello di cercare di disattivare le protezioni antivirus presenti sul computer e poi scaricare malware assortiti. I Downloader a volte possono essere anche NetBot e scaricare e installare sul computer altri malware a discrezione del padrone della BotNet. Email “Phishing”, permettetemi di usare un termine non proprio italianamente corretto ma che rende l'idea: “Andare a Pesci”. Sono email confezionate apposta per cercare di indurre “il pesce ad abboccare”. Usando tecniche di ingegneria sociale cercano di far credere all'utente di provenire da mittenti fidati. Spedendosi da un computer infetto verso gli indirizzi trovati nella sua stessa rubrica, sono uno dei vicoli di diffusione dei Trojan, in quanto chi riceve l'email la vede arrivare da un mittente conosciuto, di cui si fida e quindi più facilmente “abboccherà” alla trappola, aprendo eventuali allegati e infettandosi a sua volta. Pag.50 di 65 Inoltre le email phishing spesso cercano di far credere all'utente di provenire da mittenti importanti come gruppi bancari che chiedono di effettuare un login sul conto corrente online, per andare a visualizzare un pagamento ricevuto da qualcuno, una vincita in denaro o semplicemente per cambiare le password perché qualcuno ha tentato troppe volte di forzare l'accesso. Queste email spesso sembrano arrivare realmente dalla banca di cui riproducono anche la grafica e i loghi al loro interno. Se il ricevente ha effettivamente un conto su quella banca, ed è abbastanza “boccalone” può cadere nella trappola. Aprendo i link contenuti in queste email si verrà indirizzati verso una pagina che riproduce la grafica del sito della banca, ma inserendo ID e Password in essi si regalerà l'accesso del proprio conto corrente ad uno sconosciuto. E' importante sottolineare che in questo caso nulla va a infettare il PC, non si sfrutta una vulnerabilità di Windows o di qualche altro sistema o programma, ma si frutta la vulnerabilità della stessa mente di una persona. Le email di phishing spesso vengono spedite da zombie affetti da spambot. Vediamo un piccolo esempio di phishing: In questo caso l'email e' stata marchiata come [SPAM] dai filtri dello stesso server di posta. Si notano evidenti errori linguistici, segno che lo spammer non conosce bene la nostra lingua “Se pensate che sia qualcosa male”. Soffermandosi poi sul link è possibile vedere che l'URL a cui punta è: http://moonrise.msk.ru/... Pag.51 di 65 Aprendo il link nel browser si osserva questa pagina Pag.52 di 65 Come si difende Windows dai malware: è sempre importante mantenere aggiornato il sistema, avere un'antivirus decente, un'antiadware, un'antispyware, un'antirootkit, un firewall software (il firewall perimetrale che sta dentro ad un'eventuale router da solo non basta) o un pacchetto che contenga tutte queste protezioni. Bisogna mantenere aggiornati i programmi di protezione a fare spesso scansioni del sistema per accertarsi che sia pulito. Bisogna cambiare certe configurazioni insicure adottate da Windows, l'occultamento dei file nascosti, di sistema e delle estensioni dei file. come Ad esempio una tecnica Trojan consiste nello sfruttare il fatto che di default i sistemi Windows nascondono l'estensione dei file. Si potrebbe incappare in un file avente un nome simile: BellaBionda.jpg.exe Windows nasconderà l'estensione del file, a monitor si vedrà solo “BellaBionda.jpg”, all'interno del file exe verrà integrata l'icona tipica dei file jpg e quasi sicuramente l'utente crederà che quel file è una foto e lo cliccherà mandandolo in esecuzione e infettando la macchina. Bisogna stare attenti a dove si naviga a cosa si clicca e a cosa si scarica e si installa o esegue e a quello che si riceve per posta. Microsoft tanti anni fa per contrastare la tecnologia Java creò quelli che si chiamano VBScript e Activex. Queste 2 tecnologie come Java permettono di inserire all'interno di una pagina WEB veri e propri programmi che possono essere molto utili per superare alcune limitazioni della tecnologia html o creare pagine molto più interattive. Il problema è che Java funziona come una macchina virtuale blindata all'interno di un ambiente isolato dal resto del sistema mentre ActiveX e VBScript sono veri e propri programmi eseguibili da Windows che sostanzialmente hanno potere illimitato (questa è stata una pessima scelta effettuata da Microsoft). Quindi per essere infettati basta aprire la pagina sbagliata usando un browser che supporta VBScript e ActiveX (solo Internet explorer supporta queste tecnologie per fortuna). Per finire, le protezioni sotto Windows non sono mai sicure al 100%, essendo una lotta continua tra venditori di antivirus e chi scrive malware non si può mai avere la sicurezza che tutto venga bloccato sempre e comunque. Soprattutto su computer di utenti con pessime abitudini di navigazioni, o troppo sicuri di essere invulnerabili, si possono osservare infezioni, anche se tutte le protezioni sono presenti, aggiornate e le scansioni antivirus non riportano nulla. Pag.53 di 65 Perché Linux non è soggetto a malware: Molti utenti sono convinti che non esistano malware per Linux solo perché non è diffuso quanto Windows e se Linux si diffondesse molto allora comincerebbe ad essere bersagliato come lo è Windows. In realtà, come sempre, le cose sono molto più complesse di come la gente le vede. Proviamo ad immaginare il mondo dell'informatica come un'ecosistema composto da tante forme di vita differenti. Nulla è perfetto, ne Windows ne Linux così come non esistono organismi perfetti ed invulnerabili. Windows è un sistema che non si evolve, o meglio si evolve aggiungendo sempre nuovi strati software, nei quali sicuramente si celano nuovi BUG, sopra ad altri strati software vecchi nei quali continuano a sopravvivere vecchi BUG conosciuti. Windows non abbandona mai ciò che è diventato obsoleto e resta sempre compatibile con molte versioni precedenti. Windows tende ad essere un monoblocco, integrando sempre gli stessi programmi e le stesse librerie che non è possibile rimuovere se non si desidera usarle. Tutti i Windows sono uguali. Per questo motivo è possibile immaginare Windows come “un'organismo” obeso e goffo, con un sacco di organi praticamente inutili, molto fragile e malaticcio. Assolutamente non biodiversificato. Trovata una vulnerabilità su 1 qualsiasi PC Windows e fatto un malware capace di sfruttarla si ha la potenzialità di infettare tutti i computer del mondo che usano Windows. Oltre ai BUG su Windows, a favorire malware, ci sono anche scelte di architettura sbagliate nel concetto di fondo, che permettono di provocare danni al sistema senza sfruttare nessun BUG in particolare (come con i trojan, dialer e altri) ma solo la normale struttura del sistema. Ad esempio su Windows un file è eseguibile solo perché la sua estensione è exe e per eseguire un file exe è sufficiente un doppio click (ma esistono una marea di cose che rendono insicuro Windows, questa è solo una), solitamente su Windows un programma avviato poi ha accesso illimitato al sistema, perché quasi sicuramente lo stesso utente lo sta usando con diritti amministrativi. Su Windows (solo NT/2000/XP) sarebbe anche possibile creare e usare utenti con diritti ristretti ma l'incuria di tantissimi sviluppatori, o l'obsolescenza di certi programmi fanno si che siano rari i programmi che riescono a girare se l'utente che li lancia ha diritti limitati. Costringendo gli utenti a lavorare come Administrator, sempre e comunque. Poi è capitato anche che BUG del sistema permettessero a programmi avviati da utenti con accesso limitato riuscissero comunque ad ottenere privilegi amministrativi. Su Windows Vista finalmente Microsft ha imposto che l'utente sia utente, ma poi un programma che richiede espressamente privilegi amministrativi provoca l'apertura di una finestra di domanda, dove Vista chiede se si vuole concedere al programma tali diritti... Ovviamente la maggioranza degli utenti cliccheranno “SI” senza sapere nemmeno cosa voglia dire, spinti dal fatto “se dico no poi non va il programma”, ma se il programma fosse un malware? Pag.54 di 65 Linux invece è un sistema che si evolve realmente, eliminando veramente i BUG quando vengono scovati, eliminando le cose quando diventano obsolete. Inoltre subisce aggiornamenti costanti di tutte le sue componenti; si può dire che nel giro di 1 anno ogni libreria e programma di Linux non sia più perfettamente uguale a prima. Inoltre vi sono anche le varianti e le personalizzazioni introdotte dalle diverse distribuzioni che potrebbero compilare certe librerie o programmi con opzioni diverse. Questa situazione fa si che Linux sia un sistema leggero e agile, molto modulare dove è possibile installare solo quello che serve. Questo non significa che Linux sia perfetto o esente da BUG. Però sicuramente Linux ha molti (ma molti!) meno BUG di Windows, inoltre la “biodiversificazione” cui è soggetto fa si che un BUG sfruttabile per un attacco o per diffondere un malware sia disponibile solo su una cerchia molto limitata di computer e per un tempo piuttosto limitato, tanto da rendere poco vulnerabile la piattaforma anche se fosse molto diffusa. Ad esempio nell'anno 2002 venne scoperto un piccolo Worm capace di diffondersi tra Server Linux (e Linux è molto usato per fare server aziendali, web e di posta). Questo Worm però riusciva a infettare le macchine: ● ● ● ● ● ● SOLO SE era installata RedHat 6.2 come distribuzione. SOLO SE era attivo un determinato servizio vulnerabile (ssh). SOLO SE questo servizio era esposto a internet. SOLO SE su questo servizio era attiva una certa opzione. SOLO SE nel sistema era installato ANCHE un'altro certo programma (gcc). SOLO SE il sistema era installato di default dal CD e non erano stati fatti ancora gli aggiornamenti che chiudevano la falla e che erano usciti 48 ore dopo il rilascio delle stessa iso del suddetto CD. Questo worm infettò meno di 600 macchine e circolò per meno di un mese provocando danni irrilevanti. Al contrario delle pandemie che colpiscono soventemente Windows (cito: ILOVEYOU, Sasser, Zotob e tanti altri) che colpirono milioni di PC provocando danni incalcolabili in tutto il mondo e circolando per parecchio tempo. Si stima ad esempio che il virus Brain.A ha circolato dal 1986 fino a circa il 1995. Sono centinaia di migliaia i Malware conosciuti per Windows, e molte centinaia i nuovi malware che nascono ogni mese. Microsoft nell'estate del 2007 ha dichiarato che almeno il 60% dei PC Windows del pianeta è infetto da qualche forma di malware. Mentre mettendo assieme tutte le piattaforme UNIX, Linux e Machintosh dall'inizio dell'era informatica ad oggi si possono contare solo alcune decine di malware che ormai non sono più in circolazione da anni, ne sono in grado di infettare i sistemi attuali. E quando lo erano non hanno mai provocato danni degni di nota. I sistemi Linux oltre alla “biodiversificazione” godono anche di un'architettura molto migliore (derivando da UNIX), nella quale non sono mai stati fatti compromessi a discapito della sicurezza/prestazioni. Confrontiamo con Windows la questione dei file eseguibili: Sotto Linux un file non è eseguibile perché possiede una determinata estensione, anzi sotto Linux i file eseguibili solitamente sono privi di estensione. Un file è eseguibile solo se su di esso è stato impostato attributo di eseguibilità. Gli attributi sono dati salvati nel filesystem locale e non dentro al file, dovrà essere l'utente o l'amministratore del computer a decidere se dare a un certo file questo attributo. Cioè un file eseguibile scaricato da internet non è eseguibile finché l'utente non gli permette di esserlo. Pag.55 di 65 Vediamo questo screenshot dei permessi su di un file in Linux Inoltre su Linux gli utenti lavorano normalmente come utenti e non come amministratori. Su Linux tutti i programmi funzionano in questa condizione senza problemi, anzi: Su Linux alcuni programmi si rifiutano di funzionare se li avviate come super-utenti (il contrario di quello che succede su Windows). Linux è un sistema che da sempre è multiutente, la multi utenza è gestita a livello del Kernel. Windows invece non è sempre stato multiutente, quindi per compatibilità la gestione della multi utenza non è gestita a livello del Kernel ma da strati software superiori, molto più facili da raggirare. Su Linux un processo avviato da un utente non può avere privilegi maggiori di quelli dell'utente che lo ha avviato. Un processo avviato da un utente non può “richiedere” privilegi superiori. Su Linux un processo “figlio” avviato da un'altro processo “padre” non può avere privilegi superiori a quelli del padre. Su Linux un utente può leggere e scrivere solo all'interno della sua home, quindi un programma avviato da un utente non può intaccare in nessun modo i file all'esterno di questa. Ipotizzando una pagina WEB confezionata apposta: non è possibile forzare tramite script di qualche natura un browser a scaricare silentemente un file binario e ad eseguirlo. Il browser è avviato anch'esso con diritti limitati e non ha accesso alle api di sistema che gli permettono di impostare l'attributo di eseguibilità su di un file (mentre internet explorer è stato concepito per permettere addirittura l'esecuzione di binari all'interno della pagina). Deve essere l'utente ad eseguire particolari procedure, non proprio immediate o in punta di mouse, per eseguire un file come amministratore. Pag.56 di 65 Su Linux poi l'installazione e la disinstallazione del software avviene in un modo estremamente diverso da Windows. Linux usa la tecnica dei “repository”. I repository sono grandi archivi di software precompilato per una certa distribuzione. I repository sono gestiti da persone altamente qualificate che dettano e impongono le regole. Le persone che entrano a far parte dell'organico di un repository, pacchettizzando programmi, devono dimostrare di essere capaci e affidabili, e conquistare la fiducia degli amministratori prima che gli sia permesso di inserire pacchetti. Su un repository ogni utente mantiene aggiornati i propri pacchetti e non può andare a toccare pacchetti gestiti da altri se non sotto esplicita autorizzazione. Chiunque può segnalare un problema su di un pacchetto (come una errata compilazione o anche una manomissione), quindi è molto difficile che qualche furbo la faccia franca. Su Linux l'installazione/disinstallazione dei pacchetti avviene attraverso il package manager, che va ad attingere a questi repository, quindi il software installato è sicuro. Non è abitudine degli utenti Linux scaricare solitari pacchetti o eseguibili da siti trovati con i motori di ricerca, per poi installarli sul proprio sistema. Abitudine comune invece di chi usa Windows, sul quale la possibilità di incappare in sorprese è estremamente superiore. Curiosità: usando wrapper come Wine è possibile che alcuni malware per Windows riescano a girare, però rimarranno imbottigliati all'interno della home dell'utente che li ha avviati. Il malware non riuscirà ad intaccare il sistema, verrà terminato con il logout dell'utente e non riuscirà ad avviarsi automaticamente al nuovo login. Per pulirlo basterà solo cancellare la directory di lavoro di Wine all'interno della home dell'utente. La directory di lavoro sarà poi ricreata automaticamente all'avvio successivo di Wine. Il funzionamento risulta solo temporaneo, per la durata della sessione. Wine solitamente non è nemmeno installato di default, in ogni caso deve sempre essere l'utente ad avviare espressamente un file. Pag.57 di 65 A quali attacchi è soggetto Linux: Come abbiamo visto Linux non è vulnerabile come Windows a malware. è praticamente impossibile che la normale attività di un utente possa scatenare problemi, anche se l'utente va liberamente in siti di ogni genere e natura, cliccando e aprendo ogni cosa che gli capita. Linux non si infetterà mai, regalando a chi lo usa un grande senso di tranquillità. Una macchina desktop standard, quando ha attivo il suo firewall o è dietro a router è praticamente inattaccabile. Un sistema Linux può diventare vulnerabile se è un Server che espone servizi verso internet, o comunque una macchina casalinga in cui l'utente ha installato e attivato verso internet servizi tipicamente Server. Ad esempio server ssh, ftp, web, posta, etc... In questo caso non è proprio Linux ad essere attaccabile ma i servizi che espone su internet o i programmi che fa girare (come capita alcune volte anche su Windows). Facciamo un esempio: Anni fa avevo una macchinetta che tenevo a casa, collegata ad internet in adsl su cui era attivo il servizio apache (server WEB) su cui avevo installato phpBB GoldEdition 2.0.4. PhpBB è software php per creare piccoli forum. Un giorno venne scoperta una vulnerabilità di phpBB 2.0.4 che permetteva, tramite l'invio di determinati URL al server che ospitava il forum, di eseguire istruzioni arbitrarie in linguaggio PHP. Meno di 3 giorni dopo la scoperta del BUG era già disponibile un'update che lo correggeva, però io in quel periodo avevo poco tempo da dedicare alle attività non lavorative e trascurai per almeno 1 mese questo piccolo server. Qualcuno ne approfittò per sfruttare questa vulnerabilità di phpBB per “forare” la macchina. In sostanza tramite l'esecuzione arbitraria di codice php erano riusciti a fare upload di un file eseguibile Linux, costruito per l'occasione, renderlo eseguibile e poi avviarlo. Questo programmino era un NetBot. Dovetti salvare i dati e riformattare la macchina, non potevo avere la sicurezza che in mezzo a migliaia di file non fosse stato nascosto anche altro. Il punto è che la vulnerabilità non era intrinseca a Linux ma di un software che vi era stato fatto girare sopra, esposto al WEB. E l'attacco era stato eseguito esplicitamente da 1 persona intenzionata proprio a forare quel server. Anche un server WEB basato su Windows (oltre tutte gli altri problemi di sicurezza cui soffre Windows) è suscettibile di questo tipo di attacchi. Se si fosse installato phpBB su un server WEB Windows la sua falla avrebbe provocato le stesse insicurezze, però magari con Windows poteva essere lanciato un malware qualsiasi non un programma compilato apposta. Ma difendersi da questi attacchi non è una cosa difficile, non servono antivirus e altre cose simili. Basta mantenere aggiornato il software. Nel mondo Open Source nessuno ti tiene allo scuro di una falla conosciuta, ed i tempi di correzione di falle gravi come queste sono sempre molto corti, raramente passano più di 48 ore. Mentre come già sappiamo la politica di chi sviluppa closed è tenere segrete le cose, magari più impegnative da correggere, ed intervenire solo quando è evidente che qualcuno conosce la falla e ha già fatto una gran mole di danni. Se avessi aggiornato phpBB non sarebbe capitato nulla. Pag.58 di 65 Curiosità su Linux Com'è nato il logo di Linux? La mascotte di Linux che vedete qui sopra si chiama TUX, significa “Torvalds UniX” La nascita di questa mascotte risale al 1996 quando uscì la versione 2.0 di Linux. Erano settimane che Linus si arrovellava per ideare un logo da associare al suo sistema operativo. Un weekend Linus sua moglie e le 2 figlie andarono allo Zoo, giunti in prossimità del recinto con i pinguini Linus infilò un dito nella rete, agitandolo, per cercare di destare l'attenzione di uno di essi e farlo avvicinare così che le sue figlie potessero vederlo più da vicino. Un pinguino si avvicinò al dito di Linus e gli diede una bella beccata. Durante il ritorno in auto la moglie di Linus gli disse: “Perché non usi un pinguino come mascotte di Linux?” Venne indetto su internet un concorso, i partecipanti dovevano disegnare il pinguino che sarebbe diventata la mascotte di Linux. Il vincitore fu Larry Ewing con il suo pinguino paffuto e dall'aria contenta, il logo venne disegnato usando il programma di elaborazione grafica open source GIMP. Secondo Jeff Ayers, Linus Torvalds ha una "fissazione per gli uccelli acquatici grassi e che non volano". Inoltre Torvalds afferma di avere contratto la "pinguinite" dopo essere stato gentilmente mordicchiato da un pinguino: "La pinguinite ti tiene sveglio la notte a pensare ai pinguini e ti fa provare un grande senso di affetto verso di loro." Torvalds stava cercando qualcosa di divertente e simpatico da associare a Linux e un pinguino un po' grasso che si siede dopo un pranzo abbondante ed una buona pinta di birra rispondeva perfettamente all'idea. Da notare i piedi arancioni che lo fanno somigliare ad un'anatra. Pag.59 di 65 Licenze a riconoscimenti Questo testo è stato scritto da: ● ● ● ● ● ● ● ● ● Laboratori AIDAN di Mirko Guandalini Via C.Colombo n°5 Sozzigalli di Soliera Modena Cap: 41019 Tel: 059/563227 Fax: 059/853091 Web: http://www.aidan.it Email: [email protected] In collaborazione con: http://www.openlinux.eu Alcune parti di testo o definizioni sono tratte da fonti esterne e verranno qui sotto elencate: ● ● ● ● ● ● ● ● Pagina 5, “Cos'è un sistema operativo”, frammento di testo preso da: http://it.wikipedia.org/wiki/Sistema_operativo Pagina 12, “Cos'è uno standard”, frammento di testo preso da: http://it.wikipedia.org/wiki/Standard_(informatica) Pagina 12/13, “Standard veri e standard falsi”, testo parzialmente rielaborato e tratto da un'articolo apparso su http://www.geekplace.org Pagina 14/15/16/17 Rielaborazione del testo tratto da: http://it.wikipedia.org/wiki/Open_source Pagina 24/25/26 Rielaborazione del testo tratto da: http://it.wikipedia.org/wiki/Kernel Pagina 33 Testo tratto da http://www.openlinux.eu/content/view/169/58/ Pagina 45, cos'è un hacker: Rielaborazione del testo tratto da: http://it.wikipedia.org/wiki/Hacker Pagina 46, cos'è un craker definizione tratta ma rielaborata da: http://it.wikipedia.org/wiki/Cracker Pag.60 di 65 Questo testo è distribuito sotto licenza FDL GNU Free Documentation License Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or BackCover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standardconforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most Pag.61 di 65 prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: * A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. * B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. * C. State on the Title page the name of the publisher of the Modified Version, as the publisher. * D. Preserve all the copyright notices of the Document. * E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. * F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. * G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. Pag.62 di 65 * H. Include an unaltered copy of this License. * I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. * J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. * K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. * L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. * M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. * N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. * O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this Pag.63 di 65 License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. Pag.64 di 65 Pag.65 di 65