Come qualcuno che progetta sistemi informatici, sono d'accordo con i suggerimenti finora. Certamente, il sistema operativo stesso è un esempio di software di sistema. Tuttavia, ce ne sono molti altri che non sono stati menzionati finora. Dal mio punto di vista, il software di sistema è quel codice che è necessario per permettere l'esecuzione dei programmi applicativi. In molte varianti di O/S, c'è una distinzione tra user-state e supervisor-state all'interno del processore. Le cose che vivono nello stato utente sono le applicazioni, le librerie e i motori necessari per eseguire altri software utente. Lo stato supervisore contiene il kernel principale dell'O/S, i driver dei dispositivi, le routine di servizio degli interrupt (ISR), i gestori delle eccezioni, lo scheduler, i thread del kernel e simili.
Se pensiamo ad un O/S come Windows, allora vediamo il kernel Win32/64 o WinRT stesso (più i driver dei dispositivi, ISR, ecc.). E un file system che contiene applicazioni in stato utente, DLL, ecc. C'è una distinzione simile in un O/S come Linux. Ma, il file system in Linux è in gran parte basato su GNU (glibc, ecc.) per Linux dove c'è un user-space completamente diverso per Android, Tizen, WebOS, ecc. nonostante questi O/S utilizzino il kernel di Linux.
Tuttavia, dobbiamo anche aggiungere la distinzione che certi software user-space sono un abilitatore e non un fine in sé. Per esempio, il runtime C/C++, JavaVM, PythonVM, glibc, le librerie socket, ecc. non sono applicazioni, ma piuttosto abilitatori di applicazioni. Quindi, nella mia mente di persona che aiuta a sviluppare questi tipi di codice, essi rientrano anche nel secchio del "software di sistema" perché le applicazioni utente non potrebbero funzionare senza di loro e tuttavia lo sviluppatore dell'applicazione utente non deve pensarci - sono semplicemente lì nel file system.
Quindi, mentre non considererei Vi ed Emacs come software di sistema (sono applicazioni utente che usiamo come editor), il compilatore, il linker, il loader, ecc. potrebbero facilmente essere considerati software di sistema. Inoltre, le librerie/DLL sarebbero considerate software di sistema perché sono una risorsa sviluppata in un modo molto particolare per aiutare i programmatori di applicazioni a sviluppare ed eseguire il loro codice.