Fondamenti Architettonici
Unix dal 1993 è descritto da un diagramma 'a cipolla' cioè a strati concentrici.
Gli strati sono:
- hardware
- kernel
- applicativi
Gli applicativi non possono gestire direttamente l'hardware ma richiedono al kernel di farlo tramite delle funzioni, in linguaggio C, chiamate system calls.
Queste corrispondono a quello che in Windows si chiamano le API di Sistema (Application Programming Interface). Sono implementate da tre (minimo) librerie dinamiche, che sono sempre linkate a tutti i programmi che devono funzionare in Linux.
E' da notare che sono in linguaggio C, a basso livello, non in C++ come in Windows o Mac. Per generare degli applicativi scritti in C che vivano da 'buoni cittadini' in ambiente Linux, non basta una conoscenza di base del linguaggio, ma la padronanza di skill e conoscenze appropriate.
Il kernel gestisce l'hardware tramite moduli detti device drivers, anch'essi in linguaggio C. Il kernel stesso è scritto in C, con un minimo di routines a bassissimo livello in Assembler, per massimizzare l'efficienza di codice chiamato molto spesso.
Il kernel ha quindi tre funzioni:
- processi del kernel, propri di gestione dell'ambiente operativo: schedulatore, gestore della memoria, ecc.
- supporto alle system calls
- moduli di device drivers
Corrispondentemente vi sono due interfacce:
- interfaccia delle system calls - libreria standard del Linguaggio C (Glibc)
- interfaccia kernel-driver - con moduli caricati automaticamente
Interfacce Utente
L'essere umano interagisce con gli applicativi Linux in due modalità diverse:
- Client User Interface (CLI) - a caratteri, sempre presente
- Graphical User Interface (GUI) - grafica, non strettamente indispensabile ma molto conveniente
Si può completamente interagire, amministrare e gestire un sistema Linux da CLI, con risparmio di risorse di memoria. Al giorno d'oggi però il risparmio di memoria non è veramente notevole e la convenienza del GUI rimane alta, specie per workstations e piattaforme di sviluppo software.
L'interfaccia CLI è implementata da un tipo di programma chiamato Shell. Vi sono numerose shell disponibili nelle varie versioni di Unix e distribuzioni di Linux; la particolare shell adottata dai Linux moderni è bash (Bourne again shell). Bash fornisce sia l'interattivita con l'utente, come interprete di comandi di linea, sia possiede un linguaggio di programmazione che permette di scrivere 'procedure shell' (shell scripts).
L'interfaccia GUI è implementata da un ambiente grafico complesso detto Ambiente Desktop (Desktop Environment). E' un derivato della serie di programmi detti X Window System originariamente sviluppati allo MIT fino al 1993.
Vi sono svariati ambienti desktop, ma i due rimasti come prioritari in Linux sono:
- Gnome - di default sia in Ubuntu che Red Hat
- KDE - di default in Slackware, installabile in Red Hat
Ogni distribuzione 'personalizza' poi il desktop con effetti e features propri, quindi l'interattività grafica (Look & Feel) dipende sia dalla distribuzione che dalla release.