Tutti hanno sentito i termini hardware e software per computer - l'hardware sono le cose fisiche su cui eseguiamo i programmi, e il software sono i programmi stessi.
L'hardware è "duro" perché è difficile da cambiare - fare un cambiamento nel design di un circuito richiede tipicamente un nuovo layout di un circuito stampato (PCB), la fabbricazione della scheda, l'assemblaggio di tutte le parti sulla nuova scheda, e il test prima che qualsiasi programma possa essere eseguito su di essa.
Il termine software è stato coniato nel 1953 da Paul Niquette, e usato per la prima volta da John Tukey nel 1958. (Tukey ha anche inventato la parola "bit" per la cifra binaria.)
Il software è "soft" perché si possono fare alcune modifiche a un programma per computer, che ai tempi di Niquette e Tukey significava modifiche a un mazzo di carte perforate, e rieseguire il programma senza dover fare alcuna modifica al computer. (Negli anni '40, computer come Colossus e ENAIAC venivano riprogrammati cambiando il cablaggio del computer tramite interruttori e spine)
Oggi, il software è associato a programmi che vengono memorizzati su qualche supporto di memoria di massa, come un disco rigido o SSD, e poi caricati nella RAM per essere eseguiti. Potrebbe anche essere applicato alle app che vengono scaricate dal Cloud e poi memorizzate sul vostro smartphone o tablet nella memoria Flash, e di nuovo scaricate nella RAM per essere eseguite.
Nel 1971, il primo microprocessore - il 4004 - fu inventato. I programmi venivano memorizzati ed eseguiti direttamente dalla memoria di sola lettura (ROM) invece di essere caricati da un altro supporto. Inizialmente l'unico modo per cambiare il programma era quello di creare un nuovo set di maschere per il chip ROM. Più tardi furono inventate le ROM programmabili, chiamate PROM, seguite dalle ROM programmabili cancellabili (EPROM) usando la luce UV, e infine le ROM programmabili cancellabili elettricamente (EEPROM), che sono collegate alle memorie Flash di oggi.
I microcontrollori embedded che usano la memoria Flash per contenere i loro programmi possono essere aggiornati sul posto usando quella che viene chiamata programmazione seriale in-circuito (ICSP). I programmi sono chiamati firmware perché è più facile da aggiornare che fare modifiche all'hardware, ma non così facile come caricare semplicemente un programma da un disco rigido, e i programmi non sono volatili.
Aggiornare il firmware su una scheda di sviluppo usando ICSP
Ascher Opler ha coniato il termine "firmware" in un articolo di Datamation del 1967. Originariamente, significava il contenuto di una memoria di controllo scrivibile (una piccola memoria specializzata ad alta velocità), contenente microcodice che definiva e implementava il set di istruzioni del computer. Non era composto da istruzioni macchina della CPU, ma da microcodice di livello inferiore coinvolto nell'implementazione delle istruzioni macchina.
È stato solo dopo l'invenzione del microprocessore (e più tardi del microcontrollore) che il firmware ha cominciato ad essere associato ai programmi che giravano su questi dispositivi
In un PC desktop o portatile, che esegue il software su un disco rigido o SSD ecc, c'è ancora un po' di firmware situato nel BIOS del computer, che gestisce il processo di avvio della macchina, caricando il sistema operativo nella RAM e poi dandogli il controllo.