Capita spesso che le discussioni riguardo le differenze tra le architetture di Linux e Windows sfocino in flame e ondate piroclastiche di ignoranza generalizzata su entrambi i fronti. L’idea quindi è quella di mettere un po di ordine e generare una serie di articoli fruibili dagli interessati e che facciano chiarezza mantenendo una certa obiettività.
Di sicuro non c’è spazio per descrivere esaustivamente ogni punto, a meno di non voler scriverci un libro. A questo proposito ci limiteremo alle differenze più grossolane senza perderci nei meandri oscuri e iper-tecnici di questa materia. Si cercherà inoltre di adottare un approccio tecnico ma chiaro a tutti.
Sistema Operativo
Ma cos’è esattamente un sistema operativo? Molti usano questa parola ma ne ignorano completamente il significato. Tra le definizioni più accreditate eccone due molto interessanti:
Il sistema operativo è un programma che viene eseguito incessantemente dall’avvio(boot) del PC fino al momento in cui viene spento o riavviato.
(A. Silberschatz, P. Galvin “Operating System Concepts”)
Oppure se non vi garba la precedente definizione, eccone un’altra:
Un sistema operativo assomiglia ad un governo. Egli provvede alla gestione delle risorse. E come un governo non utilizza particolari funzioni, si limita semplicemente a creare un ambiente nel quale altri programmi possono essere facilmente utilizzati.
(A. Silberschatz, P. Galvin “Operating System Concepts”)
Quest’ultima definizione calza a pennello sopratutto per il concetto di kernel, esattamente quello che è Linux e che ad oggi (Ottobre 2007) è giunto alla versione non stabile 2.6.24rc1. Ovviamente anche Windows necessita di un kernel che viene caricato al boot, il suo nome è “ntoskrnl.exe” e come è lecito aspettarsi non ha nulla a che vedere con la controparte Open Source, anzi il concetto stesso con cui è sviluppato è estremamente diverso e lo vedremo in seguito.
Kernel
Di cosa si occupa esattamente il kernel?
Immaginiamo, per semplificare, che il sistema Computer sia diviso in 3 strati: user space, kernel e hardware. Lo User Space è quell’ambiente in cui vengono eseguiti i classici programmi che utilizziamo in prima persona, ad esempio Firefox o OpenOffice.org. L’utente non viene mai in contatto con il kernel vero e proprio, egli infatti oltre a mantenere attiva la macchina è il tramite tra lo user space e l’hardware. Le applicazioni dialogano con il kernel attraverso quelle che vengono definite system call, che a questo punto faranno da tramite tra le nostre volontà e l’oggetto fisico (es. Hard disk) da cui vogliamo ottenere delle informazioni, orchestrando un balletto a noi invisibile in cui eseguono numerose operazioni a basso livello.
Il kernel Linux è definito Monolitico ossia contenuto in un unico file. Questo dovrebbe rappresentare un vantaggio in velocità e semplicità rispetto ai Microkernel tipo Mach su cui si basa MaxOSX. In realtà ci sono state accese discussioni a causa della sua natura monolitica e dell’incredibile complessità a cui è giunto Linux.
Andrew S. Tanenbaum, ideatore di Minix (Microkernel), a cui Linus Torvalds si ispirò per iniziare lo sviluppo di Linux, rimproverò lo stesso Linus per aver scelto questa architettura. Secondo lui obsoleta già nel 1991, in quanto troppo complessa per un sistema tutto fare come Linux.
Kernel Monolitico (Wikipedia)
In realtà il kernel Linux nonostante sia ,onolitico utilizza un sistema speciale, per cui attraverso moduli si possono integrare altre funzionalità nel kernel, senza doverle inserire precedentemente nel sorgente e doverlo ricompilare nuovamente; questa funzionalità rende il kernel un po più ibrido e meno monolitico.
Microkernel (Wikipedia)
I Microkernel (es. MacOSX) si caratterizzano da un nucleo principale che si occupa di far dialogare altre numerose parti che girano in user space. L’amministrazione delle risorse viene svolta da processi esterni (servers) e non direttamente dal kernel. Questa soluzione offre una maggiore facilità nella gestione dello sviluppo del kernel a discapito di prestazioni lievemente minori.
Kernel Ibrido (Wikipedia)
Il Kernel di Windows è definito microkernel ma in realtà sarebbe più corretto definirlo hybrid kernel. Al boot viene fatto partire ntoskrnl.exe, in seguito parte il modulo HAL (Hardware Abstraction Layer) che si occupa di caricare a sua volta i driver necessari al sistema, per poi continuare con il Session Manager smss.exe.
Tempi di avvio
C’è da sottolineare una piccola differenza che a prima vista vedrebbe premiare Windows in quanto a velocità nello startup. Windows al momento del login non ha ancora terminato completamente l’avvio del sistema, alcune parti importanti vengono caricate in seguito, come le group policy. Si può dire terminata la fase di avvio circa una decina di secondi dopo il login. Una distribuzione GNU/Linux senza interfaccia grafica è già completamente caricata e funzionante al momento del login, certamente GDM-KDM rallentano l’intero processo e pongono Linux, seppur di poco, al secondo posto in quanto a velocità di avvio.
Volendo fare i fiscali non possiamo dimenticare come i sistemi Windows, a causa della estrema complessità e alcune particolari scelte strutturali, abbiano un generale calo di performance sul lungo periodo e ciò li porta a diventare più lenti rispetto ad alcune distribuzioni GNU/Linux.
di Domiziano Russo - TuxJournal.net