スタンドアロンプログラム(フリースタンディングプログラムとも呼ばれる)とは、外部モジュール、ライブラリ関数、またはプログラムをロードせず、ターゲットプロセッサのブートストラップ手順で起動するように設計されたコンピュータプログラムであり、ベアメタル上で動作します。オペレーティングシステムの概念を持たないENIACのような初期のコンピュータでは、スタンドアロンプログラムがコンピュータを実行する唯一の方法でした。スタンドアロンプログラムは通常、特定のハードウェア向けにアセンブリ言語で記述されます。
後期のスタンドアロンプログラムは、ディスクフォーマットなどのユーティリティ機能のために提供されるのが一般的でした。また、メモリ容量が非常に限られているコンピュータ、つまり1950年代半ばまでのほとんどのコンピュータや、それ以降の組み込みプロセッサでは、スタンドアロンプログラムが使用されることがありました。
スタンドアロン プログラムは現在、主にSoCまたはマイクロコントローラ(バッテリー寿命、価格、データ スペースが重要な場合) [ 1 ]およびクリティカル システムに限定されています。極端なケースでは、考えられるすべての入力とエラーのセットをテストして、すべての潜在的な出力を把握する必要があります。完全に独立している (物理的なサプライヤーとプログラミング チームが異なる) が、完全に並列なシステム状態監視が必要です。[ 2 ] [ 3 ] [ 4 ]または、攻撃対象領域を最小限に抑える必要がある場合。オペレーティングシステムは、許容できない複雑さと不確実性を追加します (例としては、産業用オペレーターの安全割り込み[ 4 ] 、商用航空会社[ 2 ] [ 3 ]、医療機器、弾道ミサイル発射制御、および消費者向けデバイスのリチウム電池充電コントローラ (火災の危険性とチップのコストが約 10 セント) などがあります)。リソースが限られたマイクロコントローラは、オペレーティングシステムに必要なより強力なハードウェアよりも、さまざまな環境条件に対してより耐性があります。これは、クロック周波数がはるかに低いこと、ピン間隔が狭いこと、大容量データバス(DDR4 RAMモジュールなど)がないこと、トランジスタ数の許容範囲が限られていることなどにより、設計マージンが広くなり、回路レイアウトと材料選択の両面で、より堅牢な電気的および物理的特性を実現できる可能性があるためです。