Software)またはシステムプログラムは、コンピュータのハードウェア管理や制御などを行うソフトウェア全般を指す用語。対比語はアプリケーションソフトウェア(業務プログラム)。類似の用語には、基本ソフトウェア、システム制御ソフトウェアなどがある。一般的な例には、オペレーティングシステム、デバイスドライバ、プログラミング言語処理系などがあるが、システムや観点にもより、その境界は明確ではない。アプリケーションプログラムを稼働させるための、よりシステム(ハードウェアなど)に近い、共通的なソフトウェア・プログラムが、システムソフトウェアと呼ばれている。その範囲は、時代やシステムや観点によっても異なる。初期のコンピューターや、一部の組み込み機器、専用機器などでは、アプリケーションプログラムとシステムソフトウェアは明確に分離されていない。オペレーティングシステムが登場した後でも、当初はユーザーインターフェース、マルチタスク、ネットワーク、ライブラリなどの機能は、アプリケーションプログラムの領域であった。現在のオペレーティングシステムでも、付属するゲームなどは製品上はオペレーティングシステムの一部だが、技術的にはアプリケーションプログラムである。狭義にはオペレーティングシステムの中でもカーネルがシステムプログラムとされるが、ユーザーインターフェースである各種シェルや、ネットワーク機能なども含める場合もある。個々のハードウェア用のドライバーは、オペレーティングシステムに付属する場合、ハードウェアまたはアプリケーションソフトウェアに付属する場合、単体販売される場合もある。ミドルウェアが存在する場合は、オペレーティングシステムの観点からはアプリケーションプログラムの一種であるが、ミドルウェア上のアプリケーションプログラム(ユーザープログラム)の観点からはミドルウェア自体も一種のシステムプログラムである。同様に各種のユーティリティソフトウェアも、オペレーティングシステムから見れば単なるアプリケーションソフトウェアだが、ユーザー(人間)から見ればシステム制御系のものも存在している。Windows)の一部かどうか、分離不可能かどうかが議論となった。programming)は、システムソフトウェアのプログラミングを指す。以下では、オペレーティングシステムやデバイスドライバの開発におけるシステムプログラミングについて述べる。アプリケーションソフトウェアのプログラミングとの主な違いは、ハードウェアとの関わりが大きい点である。他にも以下のような特徴がある。プログラマはハードウェアやその他のシステムの特徴を前提として、それらを利用してコードを作成する。そのハードウェアで効率がよいとわかっているアルゴリズムを採用したりする。以下のような低レベルなプログラミング言語が使われることが多い。リソースに制限のある環境で動作可能な言語を使う。効率がよく、実行時オーバーヘッドの小さい言語を使う。ランタイムライブラリが非常に小さいか、全くライブラリを持たない言語を使う。メモリアクセスや制御構造を直接制御できる。プログラムの一部を直接アセンブリ言語で書くことが出来る。リソースが制限されているためデバッガが使えない場合もあり、そうするとデバッグが困難になる。このため、エミュレータ上でデバッグを行ったりする。システムプログラミングはアプリケーションプログラミングとかなり異なるため、プログラマはそれぞれの領域に特化する傾向がある。高い実行効率が求められるため、プログラマーにはアルゴリズムとデータ構造に関する深い知識が要求されることもあるが、資源の制約などで高度なアルゴリズムやデータ構造が使えないという縛りの下でのプログラミングが必要なこともある。システムプログラミングでは、プログラミングに利用できる道具が制限されることが多い。ガベージコレクションは一般的ではないし、デバッグが困難な場合もある。ランタイムライブラリはあったとしても貧弱で、あまりエラーチェックをしない。このような制限があるため、モニタリングやデータロギングといった技法が使われることが多い。オペレーティングシステム(特にカーネル)はそのようなロギングを多用している。古くは、システムプログラマは例外なくアセンブリ言語を使っていた。B5000のALGOL、MulticsのPL/Iがある。1960年代後半から、BLISS、BCPL、C言語などが使われるようになり、UNIXの普及もあって1980年代にはそれが一般化した。21世紀に入ると、セキュリティの重要性が否応にも増していることから、型システムによってより強い安全性が保証されたプログラミング言語でシステムソフトウェアを書くことも、研究レベルでは進んでいる。オペレーティングシステムやネットワーク関連の実装ではシステムプログラミングが必要となる(例えば、仮想記憶を実装する場合やデバイスドライバを実装する場合など)。3.0のもとで利用可能です。プライバシーデスクトップ。