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

Schema a livelli con applicazioni, API e librerie, sistema operativo, kernel e driver, firmware e hardware
Un modello semplificato dei livelli che separano le applicazioni dall’hardware fisico.

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

Open source, proprietario, libero, freeware e shareware: cambia la licenza, non la funzione

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.

Diagramma con i quattro criteri per classificare un software: funzione, distribuzione, licenza e mercato
Lo stesso programma può essere classificato contemporaneamente per funzione, distribuzione, licenza e mercato.

Primo criterio: quale funzione svolge

La prima domanda dovrebbe essere:

che ruolo ha questo programma nel sistema?

Le categorie principali possono comprendere:

RuoloCosa faEsempi
Software di sistemaGestisce piattaforma e risorse fondamentalisistema operativo, alcuni driver e utility
Software applicativoSvolge compiti per l’utente o l’organizzazionebrowser, editor, CRM, videogiochi
Software di programmazioneServe a produrre o analizzare altri programmicompilatore, debugger, IDE
Software embeddedOpera all’interno di dispositivi e sistemi dedicaticontroller, 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?

ModelloCaratteristica principale
Desktopinstallazione ed esecuzione su computer
Web applicationaccesso tramite tecnologie Web
Mobileapplicazione progettata per dispositivi mobili
SaaSapplicazione 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.