Linux e FreeBsd a confronto – Prima Parte
FreeBSD è un sistema operativo basato sulla Berkeley Software Distribution (BSD), che a sua volta è una modifica dello UNIX AT&T, creato dall’Università della California. Durante lo sviluppo di FreeBSD, per evitare problemi legali con i proprietari del codice, gli sviluppatori hanno deciso di ricostruire il BSD originale piuttosto che copiarne il codice. OpenBSD è invece stato pensato per la sicurezza, in 10 anni di sviluppo soltanto due bug sono stati individuati e tempestivametne corretti da patch al kernel (OpenSSH è parte del progetto OpenBSD).
L’implementazione dello Stack TCP/IP in OpenBSD è così ben scritto e privo di bug, che persino Microsoft l’ha usata come parte integrante del suo Kernel Windows NT 4.0 (fonte Windows Internals).
Molti tra cui Amazon, Sony e altre grandi società utilizzano OpenBSD come sistema operativo ad-hoc per i loro server, a prova della sua alta affidabilità, sicurezza, performance e stabilità del sistema. OpenBSD presenta lievi differenze architetturali da FreeBSD, principalmente incentrate nel rafforzarne la sicurezza del sistema operativo con tecniche di Defensive Programming e aumentando la stabilità del sistema a discapito della semplicità di utilizzo, per questo di seguito userò il termine FreeBSD.
Diversamente da GNU/Linux, dove ogni singolo componente viene sviluppato separatamente e messo assieme grazie alle distribuzioni, FreeBSD è stato concepito come un completo sistema operativo: il kernel, i drivers per le periferiche, gli strumenti di amministrazione e tutti gli altri componenti del software sono mantenuti nella stessa revisione di sistema.
Lo sviluppo iniziale di Linux risale al 1991 grazie a Linus Torvalds che utilizzò Minix—un sistema operativo concepito da Andrew Tanenbaum a fini didattici—come piattaforma di partenza per il suo sistema. Nel 1990 il progetto GNU, iniziato da Richard Stallman nel 1983, aveva già prodotto e messo assieme tutte le librerie, i compilatori, gli editor di testo, le shell e il restro del software per dar vita ad un sistema operativo libero; mancava il kernel. Gli sviluppatori dil Linux decisero di adattare quel kernel in modo tale che potesse lavorare col software GNU per costituire un sistema operativo completo: nacque così GNU/Linux.
Il kernel, gran parte del codice di FreeBSD è stato rilasciato e distribuito sotto licenza BSD anche se diverse componenti del sistema utilizzano altri tipi di licenze come la GPL, la LGPL o la ISC. Il kernel Linux, e la maggioranza dei programmi che fanno parte del progetto GNU vengono proprio rilasciati sotto la GPL (GNU Public Licence) che è stata concepita dalla Free Software Foundation.
Linux usa nomi predefiniti per ogni tipo di periferica e, per questo motivo, eth0 è la prima scheda di rete Ethernet a prescindere dal tipo di chip presente nella scheda. FreeBSD, d’altro canto, utilizza un nome differente per ogni tipo di periferica e per ogni chip presente: ad esempio, una singola scheda di rete con chipset RealTek 8129 viene chiamata rl0 sotto FreeBSD.
Sotto Linux le informazioni hardware possono essere ottenute esaminando il contenuto della directory
/proc
; in alternativa da linea di comando si può utilizzare
lspci
o
lsusb
. Questi comandi non fanno nient’altro che riformattare le informazioni contenute dentro
/proc
. FreeBSD non usa la directory /proc, bensì il comando sysctl che può essere utilizzato sia per mostrare tutte le informazioni sull’hardware presente che per configurarlo o aggiornarlo.
Runlevels e scripts di avvio
Runlevel è il termine utilizzato per descrivere la modalità operativa di un sistema come il riavvio, lo spegnimento, modalità singolo utente o multiutente. Sotto GNU/Linux il file /etc/inittab descrive questi diversi runlevel e il processo init (inizializzazione) permette il sistema di passare da uno all’altro.
FreeBSD usa comandi come:
reboot
o
shutdown -h
per cambiare i runlevel invece del comando
telinit
utilizzato da GNU/Linux.
Sotto GNU/Linux ogni runlevel ha una sottodirectory in /etc/ o /etc/rc.d/, a seconda della distribuzione in uso: Debian, ad esempio, usa /etc/.
Queste sottodirectory sono rc0.d, rc1.d e così via fino all’ultimo runlevel (abitualmente sono sette). Ogni directory rcx.d contiene link simbolici a script di avvio che risiedono nella directory /etc/init.d/. Uno Unix con tale tipo di init viene chiamato SysV
Sotto FreeBSD gli scripts di avvio risiedono nella directory /etc/rc.d/ se riguardano il sistema e nella directory /usr/local/etc/rc.d/ se riguardano applicativi di terze parti. Questi scripts usano parametri come start o stop per controllare quale servizio debba esser lanciato all’avvio (start e reboot) e quali allo spegnimento. In definitiva, uno Unix con tale tipo di init viene chiamato BSD.
Kernel
Ovviamente il disegno dei kernel Linux e FreeBSD presentano differenze, ma ci sono anche caratteristiche comuni:
- Moduli: supporto per la carica e la scarica dei moduli senza dover ricompilare il kernel o riavviare la macchina.
- Versioni: ogni kernel ufficiale usa un numero di versione.
- Costruzione di un kernel personalizzato: tra i benefici che si possono rilevare ricompilando un kernel personalizzato possiamo citare una maggiore velocità di avvio, un consumo inferiore di memoria e un supporto migliore all’hardware.
I comandi per caricare e scaricare i moduli del kernel, come quello per elencare i moduli caricati sono diversi in ogni sistema. Chi utilizza Linux usufruisce del comando modprobe per caricare un modulo e per elencare quali moduli sono disponibili; lsmod si limita a mostrare i moduli caricati all’interno del kernel mentre rmmod scarica dal kernel i moduli indesiderati. Chi utilizza FreeBSD usufruisce di kldstat per elencare i moduli caricati, kldload per caricare un modulo e kldunload per scaricarlo.
Il kernel Linux usa tre numeri per ogni versione: il prima rappresenta la cosidetta major version—al momento tale numero è ‘2’; il secondo numero indica se è stabile (numeri pari) o una versione sperimentale di sviluppo (numeri dispari) mentre l’ultimo numero indica la versione della patch. Lo si può osservare nella versione più recente: 2.6.21. In FreeBSD il kernel ha due numeri di cui il primo rappresenta la major version mentre il secondo l’aggiornamento.
Costruire un kernel personalizzato in entrambi i sistemi richiede una compilazione da sorgenti. Comunque, i passi per la costruzione differiscono da sistema a sistema.
- La prima tappa consiste nello scaricare il codice sorgente oppure ottenerlo da un supporto fisico come un DVD o un CD—questa tappa è necessaria in entrambi i sistemi.
- Come seconda tappa occorre creare il file di configurazione del kernel al fine di stabilire quali parti del kernel compilare, quale driver hardware supportare e quanti moduli debba avere il kernel. In Linux questa configurazione avviene grazie alla presenza di un’interfaccia che si preoccupa di creare al posto nostro il
.config. Sempre sotto Linux se desideriamo una GUI (Graphic User Interface) daremo il comandomake menuconfigomake xconfigse invece ci basta una CLI (Command Line Interface) eseguiremo il comandomake config. FreeBSD utilizza un approccio diverso: è presente un file di configurazione standard che va personalizzato utilizzando un qualsiasi editor di testo grazie al quale sarà possibile commentare o decommentare le opzioni che controllano i processi. - Alla fine, in entrambi i sistemi, si utilizzerà il comando
makeper compilare e installare il kernel.
Installazione del software
Il software sviluppato da terze parti può esser distribuito o tramite binari o tramite sorgenti. Abitualmente questo software viene pacchettizzato utilizzando strumenti di archiviazione e compressione come tar e gzip. Tuttavia, la gran parte delle distribuzioni GNU/Linux utilizzano un loro formato particolare di pacchettizzazione e prevedono uno strumento per l’installazione, la rimozione e la configurazione del software. Debian, ad esempio utilizza i pacchetti dal formato .deb e strumenti come apt o dpkg per maneggiarli; Fedora, Mandriva e Suse utilizzano invece pacchetti .rpm e strumenti come yum, urpmi e yast. Utilizzando questi applicativi il processo di installazione di un software da linea di comando è piuttosto semplice; il seguente esempio mostra come installare il popolare server web Apache:
# apt-get install apache
su Debian o
# urpmi apache
su Mandriva.
FreeBSD prevede due strumenti interessanti per l’installazione del software:
Pacchetti
Un pacchetto è un singolo file compresso che contiene binari precompilati, documentazione e files di configurazione, comprese le informazioni che permettono al sistema di installare il software nelle directory giuste del filesystem. Strumenti come pkg_add, pkg_delete, pkg_info, ecc., vengono utilizzate per maneggiare i pacchetti. Caricare e installare automanticamente un pacchetto è piuttosto facile se si utilizza il comando pkg_add:
# pkg_add -r gimp
Ports
In FreeBSD il termine port significa una collezione di files destinati al fine di automatizzare il processo di compilazione e installazione di un programma a partire dal suo codice sorgente.
L’abilità che hanno gli applicativi che si occupano della gestione del software di capire le dipendenze è una caratteristica ad entrambe le metodologie: pacchetti e ports. I ports sono molto utili quando abbiamo bisogno di un controllo completo sui parametri di compilazione per ottenere il massimo dell’ottimizzazione per la nostra macchina; il pacchetto ha l’indubbio vantaggio rispetto al port di esser di dimensioni più ridotte dal momento che non contiene codice sorgente. Inoltre, l’installazione di un pacchetto non prevede che l’utente abbia nessun tipo di comprensione sui processi di compilazione. Dal momento che entrambe le strategie sono possibili sta all’utente scegliere, di volta in volta, quale tecnologia usare.
Si può installare un applicativo dal suo sorgente in entrambi i sistemi utilizzando i classici metodi di compilazione e installazione utilizzando la sequenza:
-
# ./configure
-
# make
-
# make install
Shell
Bash (Bourne-Again SHell) è la shell di default in quasi tutte le distribuzioni GNU/Linux. In una installazione di default FreeBSD non prevede comunque bash. Ovviamente non si pone nessun problema dal momento che è possibile installarla:
# pkg_add -r bash
Le distribuzioni GNU/Linux scelgono la shell bash perché è stata scritta per il progetto GNU; FreeBSD usa csh, in linea con i sistemi UNIX tradizionali.
Nel caso in cui si preferissero altre shell come tcsh o csh, si possono installare in entrambi i sistemi operativi utilizzando le modalità sopra descritte. La scelta della shell è una decisione del tutto personale che dipende dal tipo di esperienza che si possiede e la tipologia di lavoro che si intende mettere in pratica.
Nella seconda parte verrà trattata a basso livello le differenze, quali le chiamate a sistema, le funzioni sui socket e altro.
In ambito Web Server e più in generale per applicazioni Client/Server vi è il tipico problema della scalabilità, tale problematica verrà affrontata nella seconda parte dell’articolo, Alla prossima! and Have Fun!
Related posts:
- Installare Google Chrome su GNU/Linux
- KonBoot recupera tutte le password di Windows e GNU/Linux
- Wicd: Ottimo network manager per GNU/Linux
- Accedere alle partizioni GNU/Linux da Windows
This entry was posted on Tuesday, July 7th, 2009 at 1:45 pm and is filed under Articles on GNU/Linux. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Tagged with: freebsd • linux







Pingback: Linux e FreeBsd a confronto – Prima Parte « ClsHack