Un programme autonome, également appelé programme indépendant, est un programme informatique qui ne charge aucun module, fonction de bibliothèque ou programme externe et qui est conçu pour démarrer avec la procédure d’amorçage du processeur cible – il fonctionne sur du métal nu. Dans les premiers ordinateurs comme l’ENIAC, sans le concept de système d’exploitation, les programmes autonomes étaient la seule façon de faire fonctionner un ordinateur. Les programmes autonomes sont généralement écrits ou compilés dans le langage d’assemblage pour le matériel spécifique.
Les programmes autonomes plus tardifs étaient généralement fournis pour des fonctions utilitaires telles que le formatage de disque. En outre, les ordinateurs avec une mémoire très limitée utilisaient des programmes autonomes, c’est-à-dire la plupart des ordinateurs jusqu’au milieu des années 1950, et plus tard encore les processeurs embarqués.
Les programmes autonomes sont maintenant principalement limités aux SoC ou aux microcontrôleurs (où la durée de vie de la batterie, le prix et l’espace de données sont à prix d’or) et aux systèmes critiques. Dans les cas extrêmes, tous les ensembles possibles d’entrées et d’erreurs doivent être testés et donc toutes les sorties potentielles connues ; surveillance de l’état du système totalement indépendante mais totalement parallèle ; ou lorsque la surface d’attaque doit être minimisée ; un système d’exploitation ajouterait une complexité et une incertitude inacceptables (exemples : interruptions de la sécurité des opérateurs industriels, compagnies aériennes commerciales, dispositifs médicaux et commandes de lancement de missiles balistiques, contrôleurs de charge de batteries au lithium dans les appareils grand public). Les microcontrôleurs à ressources limitées peuvent également être rendus plus tolérants aux conditions environnementales variées que le matériel plus puissant nécessaire à un système d’exploitation ; cela est possible parce que la fréquence d’horloge beaucoup plus basse, l’espacement des broches, l’absence de grands bus de données (par exemple, les modules ram ddr4) et le nombre limité de transistors permettent des marges de conception plus larges et donc le potentiel de propriétés électriques et physiques plus robustes à la fois dans la disposition des circuits et les choix de matériaux.