Il software è l’insieme di programmi, istruzioni e componenti logici che permettono a computer e altri dispositivi di svolgere determinate operazioni. A differenza dell’hardware, non identifica la parte fisica della macchina: definisce ciò che il sistema deve eseguire e il modo in cui deve comportarsi.
La definizione è semplice, ma appena si cercano i “tipi di software” compaiono classificazioni molto diverse: di sistema, applicativo, di programmazione, embedded, SaaS, open source, proprietario, verticale, custom.
Il motivo è che queste categorie non appartengono tutte allo stesso piano. Alcune descrivono la funzione del programma; altre il modo in cui viene distribuito, i diritti concessi dalla licenza oppure il mercato per cui è stato progettato.
Per orientarsi conviene quindi seguire un criterio preciso: prima capire cosa fa un programma, poi come viene eseguito o distribuito e infine quali condizioni ne regolano l’uso.
Cos’è il software e cosa lo distingue dall’hardware
La distinzione più immediata è tra componente fisico e componente logico.
L’hardware comprende processore, memoria, unità di archiviazione, scheda madre, periferiche e gli altri elementi fisici di un sistema. La parte logica comprende invece programmi e istruzioni che consentono di utilizzare quelle risorse per ottenere un risultato.
Un computer spento possiede comunque CPU, RAM e disco. Quando viene avviato, diversi livelli logici iniziano a coordinare i componenti, mettere a disposizione servizi e consentire l’esecuzione delle applicazioni.
Treccani usa proprio la contrapposizione con hardware per definire il termine e distingue inoltre software di sistema, di base e applicativo. La definizione di software nell’Enciclopedia Treccani
Il punto importante è che hardware e programmi non sono due mondi separati. Un’applicazione deve essere eseguita da un processore, occupare memoria, leggere o scrivere dati e, quando necessario, comunicare con periferiche o servizi di rete. L’hardware mette a disposizione le risorse fisiche; i programmi stabiliscono come utilizzarle.
Software, programma e applicazione: termini vicini ma non identici
Nel linguaggio quotidiano “software” e “programma” vengono spesso usati come sinonimi. In molti contesti va bene, ma tecnicamente il primo termine è più ampio.
Un programma è un insieme di istruzioni eseguibili progettate per ottenere un risultato.
Un prodotto completo può invece comprendere più elementi: eseguibili, librerie, componenti, configurazioni, risorse e altri file necessari al funzionamento.
Anche “applicazione” ha un significato più specifico. Un’app è progettata per svolgere attività rivolte all’utente o a un determinato processo applicativo.
Un editor di testo, un browser e un programma di grafica sono applicazioni. Un driver, un kernel o un componente coinvolto nell’avvio del sistema sono invece programmi di altro tipo e non vengono normalmente descritti come app.
Perché un’app è software, ma non tutto il software è un’app
La relazione corretta è:
applicazione → software
non:
software → necessariamente applicazione
È una distinzione utile perché impedisce di classificare qualsiasi componente eseguibile in base a ciò che l’utente vede sullo schermo.
Gran parte dei componenti essenziali al funzionamento di un dispositivo opera infatti senza offrire una normale interfaccia applicativa.
Come funziona il software: dal codice all’esecuzione
Dire che un programma “dà istruzioni all’hardware” è una buona prima semplificazione, ma il percorso reale comprende normalmente più livelli.
Quando apri un’applicazione, questa non dovrebbe poter controllare liberamente processore, memoria e periferiche.
Un modello concettuale più utile è:
applicazione → API e librerie → sistema operativo → driver e componenti di sistema → hardware
L’implementazione cambia a seconda della piattaforma, ma lo schema aiuta a capire perché un’app possa funzionare su un sistema e non su un altro e perché sistema operativo e driver siano anch’essi software.
Come il software usa processore, memoria e periferiche
Quando un programma viene eseguito, il sistema deve caricare il codice e i dati necessari, assegnare risorse e coordinare l’esecuzione.
La CPU esegue le istruzioni macchina prodotte direttamente o indirettamente dal codice. La memoria mantiene dati e istruzioni utilizzati durante l’esecuzione. Lo storage conserva programmi e informazioni anche quando il dispositivo viene spento.
Per usare GPU, stampanti, schede di rete o controller di archiviazione entrano inoltre in gioco componenti specializzati.
È quindi fuorviante immaginare un programma come un’entità astratta completamente indipendente dalla macchina. La logica definisce il comportamento, ma deve sempre essere eseguita attraverso una piattaforma concreta.
Il ruolo del sistema operativo, delle API e dei driver
Il sistema operativo crea gran parte dell’ambiente nel quale vengono eseguiti gli altri programmi.
Gestisce o coordina risorse come:
- processi e thread;
- memoria;
- file;
- dispositivi;
- rete;
- utenti e permessi.
Le applicazioni possono utilizzare API e librerie invece di dover conoscere direttamente tutti i dettagli dell’hardware sottostante.
I driver gestiscono invece la comunicazione con specifiche classi di dispositivi e componenti.
Questo livello di astrazione è fondamentale. Senza di esso, ogni programma dovrebbe conoscere il comportamento concreto di ogni periferica con cui deve interagire.
Kernel e firmware: dove si collocano nello stack
All’interno del sistema operativo, il kernel gestisce risorse fondamentali e opera con privilegi molto superiori rispetto alle normali applicazioni.
Non coincide però con tutto il sistema operativo. Un sistema completo comprende normalmente anche librerie, utility, servizi, interfacce e numerosi altri componenti.
Il firmware appartiene invece a un’area strettamente legata all’hardware. È software progettato per inizializzare, controllare o governare specifici dispositivi o componenti.
Anche in questo caso il confine è più chiaro se si guarda alla funzione:
firmware = codice fortemente legato al dispositivo
non:
firmware = hardware
Tipi di software: prima bisogna scegliere il criterio di classificazione
Non esiste un unico elenco universale capace di classificare ogni programma da tutti i punti di vista.
IBM, per esempio, distingue software di sistema, di programmazione, applicativo ed embedded. La classificazione dei tipi di software proposta da IBM
Altre fonti raggruppano alcune di queste famiglie oppure introducono ulteriori sottocategorie. Non è necessariamente una contraddizione: la classificazione cambia in base alla domanda che stiamo facendo.
Se vogliamo sapere quale ruolo svolge un programma, possiamo distinguere tra sistema, applicazioni, strumenti di programmazione ed embedded.
Se vogliamo sapere come viene fornito, possiamo parlare invece di installazione locale, web application o servizi SaaS.
Se vogliamo sapere quali diritti possiede chi lo utilizza, entrano in gioco licenze open source, software libero e software proprietario.
Mescolare questi assi produce elenchi facili da ricordare, ma poco precisi.
Software di sistema e software di base
Il software di sistema comprende componenti necessari a gestire il computer e fornire un ambiente agli altri programmi.
Il sistema operativo è l’esempio più evidente. Alla stessa area vengono spesso ricondotti driver, utility di sistema e altri componenti che permettono alla piattaforma di funzionare.
L’espressione “software di base” viene talvolta usata come sinonimo molto ampio di software di sistema, ma non tutte le fonti adottano la stessa tassonomia.
Treccani, per esempio, distingue il software di sistema relativo al sistema operativo dal software di base costituito da programmi e procedure di utilità generale.
Conviene quindi evitare una formula rigida come:
software di base = sempre e soltanto sistema operativo
La distinzione precisa dipende dalla terminologia adottata nel contesto tecnico o didattico.
Software applicativo
Il software applicativo serve a svolgere compiti destinati direttamente all’utente o a un processo organizzativo.
Ne fanno parte, per esempio:
- programmi di videoscrittura;
- fogli di calcolo;
- browser;
- strumenti grafici;
- programmi per montaggio video;
- gestionali;
- CRM;
- videogiochi;
- strumenti di comunicazione.
La differenza rispetto al software di sistema non dipende dall’importanza del programma.
Un sistema operativo non è “più software” di un editor fotografico: semplicemente svolge un ruolo diverso nell’architettura.
L’applicativo utilizza i servizi messi a disposizione dalla piattaforma per risolvere un problema specifico dell’utente.
Software di programmazione
Il software di programmazione comprende strumenti utilizzati per creare, analizzare, tradurre, testare o mantenere altri programmi.
Rientrano in quest’area, a seconda della classificazione adottata:
- compilatori;
- interpreti;
- debugger;
- linker;
- ambienti di sviluppo;
- tool di build;
- strumenti di analisi del codice.
Un IDE può integrare molte di queste funzioni nella stessa interfaccia.
Anche qui i confini non sono assoluti: un editor generico può essere utilizzato per programmare senza diventare necessariamente un IDE, mentre una piattaforma di sviluppo può includere strumenti appartenenti a categorie differenti.
Software embedded e il confine con il firmware
Il software embedded viene progettato per funzionare all’interno di un dispositivo o sistema dedicato.
Automobili, elettrodomestici, sensori, apparecchi industriali, dispositivi medicali e sistemi IoT possono contenere programmi che controllano funzioni specifiche.
IBM include l’embedded tra le principali categorie funzionali.
Il confine con il firmware può diventare sottile. Un piccolo microcontrollore potrebbe eseguire un unico programma strettamente legato all’hardware; un dispositivo più complesso potrebbe invece possedere firmware, sistema operativo embedded, driver e applicazioni.
Per questo non conviene cercare una regola basata soltanto su dove è memorizzato il codice.
La domanda più utile è:
quale responsabilità svolge quel componente nel dispositivo?
Software applicativo: orizzontale, verticale e personalizzato
Una volta identificato un programma come software applicativo, possiamo classificarlo secondo un altro criterio: quanto è generico il problema che risolve e per quale mercato è stato progettato.
Questa distinzione non sostituisce quella tra software di sistema e applicativo. È un livello successivo.
Software orizzontale
Un prodotto orizzontale risponde a esigenze comuni a molti settori e categorie di utenti.
Un foglio di calcolo può essere utilizzato da un commercialista, un negozio, un ricercatore, un’associazione o uno studente.
Lo stesso vale per elaboratori di testo, programmi di presentazione e molti strumenti di comunicazione.
Il prodotto non nasce intorno ai processi di un unico settore.
Software verticale
Un prodotto verticale viene invece progettato intorno a esigenze caratteristiche di uno specifico settore o mercato.
Un gestionale per strutture alberghiere, un programma destinato agli studi dentistici oppure un sistema per la gestione di uno stabilimento produttivo possono contenere processi, terminologia e funzioni molto specializzate.
“Verticale” non significa necessariamente personalizzato per una singola azienda. Lo stesso prodotto può essere venduto a molte organizzazioni appartenenti allo stesso settore.
Software custom
Il software custom viene sviluppato o adattato in modo sostanziale per requisiti specifici di un’organizzazione, di un prodotto o di un processo.
Il confine con il prodotto commerciale configurabile può essere sfumato.
Un gestionale standard con molte impostazioni resta una soluzione configurabile. Quando architettura, funzioni o integrazioni vengono progettate espressamente intorno a requisiti specifici, il livello di personalizzazione diventa molto più profondo.
Queste tre categorie rispondono quindi a una domanda diversa da “software di sistema o applicativo?”:
quanto è generale o specifico il problema per cui è stato progettato?
Software desktop, web, mobile e SaaS: cambia il modello di distribuzione
Desktop, web, mobile e SaaS vengono spesso elencati insieme ai “tipi di software”.
Sono categorie utili, ma descrivono soprattutto come un’applicazione viene distribuita, eseguita o resa disponibile, non necessariamente la sua funzione.
Lo stesso compito può essere svolto da un programma installato sul computer, da una web app o da un servizio accessibile attraverso più client.
Software installato, web application e app mobile
Un programma desktop viene normalmente installato ed eseguito su un computer.
Una web application utilizza invece tecnologie Web e viene raggiunta tramite browser, anche se parte della logica può essere eseguita su server remoti e parte sul dispositivo dell’utente.
Le applicazioni mobili vengono progettate per piattaforme come smartphone e tablet e possono sfruttare servizi e capacità specifiche del dispositivo.
Questi modelli possono inoltre sovrapporsi.
Un servizio può offrire contemporaneamente:
- applicazione Web;
- app mobile;
- programma desktop;
- API;
- servizi cloud condivisi.
Non avrebbe quindi molto senso classificarlo quattro volte dal punto di vista funzionale.
È lo stesso prodotto o ecosistema che espone modalità di utilizzo differenti.
SaaS: perché è un modello di servizio, non una categoria funzionale equivalente
Un SaaS, Software as a Service, consente di utilizzare un’applicazione fornita come servizio mentre il provider gestisce gran parte dell’infrastruttura sottostante.
Il NIST descrive SaaS come la possibilità per il consumatore di utilizzare le applicazioni del provider eseguite su un’infrastruttura cloud, senza controllare normalmente rete, server, sistemi operativi e storage sottostanti. Definizione NIST di Software as a Service
Questo chiarisce un errore frequente.
“SaaS” non ci dice necessariamente che cosa fa il programma.
Un CRM, un programma di contabilità, uno strumento grafico e una piattaforma di collaborazione possono essere forniti secondo questo modello pur svolgendo funzioni completamente differenti.
Per questo:
software applicativo → funzione
mentre:
SaaS → modalità con cui l’applicazione viene fornita e gestita
Esiste infine un terzo asse importante: i diritti e le condizioni con cui un programma viene distribuito.
Anche queste categorie vengono spesso inserite in un unico elenco insieme a software applicativo, di sistema e SaaS. Il risultato è poco preciso.
Un sistema operativo può essere open source oppure proprietario. Un applicativo può essere libero oppure proprietario. Un servizio SaaS può usare al proprio interno componenti con licenze differenti.
La licenza non sostituisce la funzione.
Software open source e software libero
Open source non significa semplicemente “codice che posso vedere”.
La Open Source Initiative specifica che una licenza open source deve rispettare una serie di criteri relativi, tra le altre cose, a redistribuzione, disponibilità del codice sorgente e possibilità di creare opere derivate. Open Source Definition della OSI
Il concetto di software libero mette invece al centro le libertà degli utenti.
La Free Software Foundation le collega alla possibilità di eseguire, studiare, modificare e ridistribuire il programma. Sottolinea inoltre un punto spesso frainteso: software libero non significa necessariamente software gratuito. Definizione di software libero del progetto GNU
Open source e software libero presentano quindi una forte sovrapposizione pratica, ma nascono da impostazioni e definizioni che non vanno trattate come perfettamente identiche.
Software proprietario
Nel software proprietario il titolare mantiene un controllo molto più restrittivo sul codice e sui diritti concessi all’utente.
La licenza può permettere l’uso del programma senza consentire, per esempio, di modificarlo o redistribuirne liberamente copie.
“Proprietario” non significa necessariamente “a pagamento”. Un prodotto può essere distribuito gratuitamente pur mantenendo una licenza proprietaria.
Freeware e shareware
Freeware indica normalmente un programma che può essere utilizzato gratuitamente secondo le condizioni previste dal titolare.
Non significa automaticamente open source e non garantisce il diritto di modificare o redistribuire il codice.
Shareware descrive invece una modalità di distribuzione in cui il programma può essere provato o utilizzato con determinate limitazioni, prima dell’acquisto o dello sblocco completo.
Anche questi termini descrivono quindi condizioni commerciali o distributive, non ciò che il programma fa.
Un’applicazione grafica può essere freeware, proprietaria, open source oppure offerta in prova. Dal punto di vista funzionale resta comunque un applicativo.
Esempi di software: come classificare correttamente un programma
A questo punto diventa evidente perché chiedere soltanto “che tipo di software è?” possa produrre più di una risposta corretta.
Prendiamo un normale programma di elaborazione testi.
Dal punto di vista della funzione è software applicativo.
Dal punto di vista del mercato può essere un prodotto orizzontale, perché viene utilizzato in moltissimi settori.
Dal punto di vista dell’esecuzione potrebbe essere un programma desktop oppure una web application.
Dal punto di vista della licenza potrebbe essere proprietario, open source o libero.
Queste definizioni non si escludono a vicenda perché rispondono a domande differenti.

Primo criterio: quale funzione svolge
La prima domanda dovrebbe essere:
che ruolo ha questo programma nel sistema?
Le categorie principali possono comprendere:
| Ruolo | Cosa fa | Esempi |
|---|---|---|
| Software di sistema | Gestisce piattaforma e risorse fondamentali | sistema operativo, alcuni driver e utility |
| Software applicativo | Svolge compiti per l’utente o l’organizzazione | browser, editor, CRM, videogiochi |
| Software di programmazione | Serve a produrre o analizzare altri programmi | compilatore, debugger, IDE |
| Software embedded | Opera all’interno di dispositivi e sistemi dedicati | controller, sistemi automotive, IoT |
Questa è normalmente la classificazione più utile da affrontare per prima.
Secondo criterio: dove viene eseguito e come viene distribuito
Poi possiamo domandarci:
come raggiunge l’utente e dove gira?
| Modello | Caratteristica principale |
|---|---|
| Desktop | installazione ed esecuzione su computer |
| Web application | accesso tramite tecnologie Web |
| Mobile | applicazione progettata per dispositivi mobili |
| SaaS | applicazione fornita come servizio con infrastruttura gestita dal provider |
Questa classificazione può sovrapporsi alla precedente.
Un CRM SaaS resta un software applicativo. “SaaS” aggiunge informazione sul modello di erogazione, non cancella la sua funzione.
Terzo criterio: quali diritti e condizioni stabilisce la licenza
Infine possiamo chiedere:
cosa può fare legalmente e praticamente l’utente con quel programma?
Qui entrano categorie come:
- open source;
- software libero;
- proprietario;
- freeware;
- shareware.
Il modello utile da ricordare è:
funzione → distribuzione/esecuzione → licenza
A seconda del problema può essere aggiunto un quarto asse:
mercato/personalizzazione → orizzontale, verticale o custom
Non serve quindi imparare un elenco infinito di “tipi di software”. Serve riconoscere quale criterio stiamo utilizzando.
Conclusione
Il software non è soltanto “la parte non fisica del computer”. È l’insieme di programmi e componenti logici che trasformano le risorse hardware in funzioni utilizzabili.
La distinzione fondamentale resta quella tra software di sistema e software applicativo, ma da sola non descrive tutto l’ecosistema.
Esistono strumenti di programmazione, componenti embedded e programmi strettamente collegati all’hardware. Le applicazioni possono essere orizzontali, verticali o personalizzate. Possono essere installate, disponibili sul Web o fornite come SaaS. E ciascuna soluzione può adottare modelli di licenza differenti.
Per non confondere categorie che descrivono cose diverse, conviene ragionare sempre nello stesso ordine:
che cosa fa → come viene eseguito o distribuito → quali diritti concede → quanto è specifico per un mercato o un’esigenza
È un modello meno immediato di una lista da memorizzare, ma molto più utile: permette di classificare anche programmi che non rientrano perfettamente nelle categorie tradizionali e di capire perché lo stesso prodotto possa appartenere contemporaneamente a più famiglie senza alcuna contraddizione.
