システムソフトウェア(英: system(s) software)は、電子機器類(コンピュータも含む)の基本的な制御や管理を行うためのソフトウェア[1]。コンピュータのハードウェア管理や制御などを行うソフトウェア全般をまとめて指すための用語(総称)。システムプログラムとも。対比される用語・概念はアプリケーションソフトウェア(応用ソフトウェア)。類似の用語には「基本ソフトウェア」「システム制御ソフトウェア」などもある。
1960年代から使われるようになった用語であり[2]、何を「システムソフトウェア」と呼ぶかは、電子機器の種類やそのメーカーによって異なっており[1]、また時代によっても変化してきており、その境界は明確ではないが、一般論として言えば、ファームウェアやオペレーティングシステム(OS)、ミドルウェアなどの総称として使われており[1]、機器によってはそれらを組み合わせたものもそう呼ばれる[1]。たとえばデバイスドライバ、またプログラミング言語の処理系(つまりコンパイラやインタプリタなど[3])もそう分類されることは一般的である。とはいえ、PCなど汎用コンピュータ製品では「OS」や「ファームウェア」などとひとつひとつ区別をはっきり付けることが多いため(多くなってきたため)[1]、PCに関してはこれらをまとめてシステムソフトウェアと呼ぶ機会は少なくなっている[1]。(その結果、近年では)テレビ、家庭用ゲーム機など、コンピュータを応用したデジタル機器でよく用いられる用語となっている[1]。 通常、各アプリケーションプログラムを稼働させるための、よりシステム(ハードウェアなど)に近い、共通的なソフトウェア・プログラムが、システムソフトウェアと呼ばれている。しかしその範囲は、時代やシステムや観点によっても異なる。 初期のコンピューターや、一部の組み込み機器、専用機器などでは、アプリケーションプログラムとシステムソフトウェアは明確に分離されていない。オペレーティングシステムが登場した後でも、当初はユーザーインターフェース、マルチタスク、ネットワーク、ライブラリなどの機能は、アプリケーションプログラムの領域であった。 現在のオペレーティングシステムでも、付属するゲームなどは製品上はオペレーティングシステムの一部だが、技術的にはアプリケーションプログラムである。狭義にはオペレーティングシステムの中でもカーネルがシステムプログラムとされるが、ユーザーインターフェースである各種シェルや、ネットワーク機能なども含める場合もある。また個々のハードウェア用のドライバーは、オペレーティングシステムに付属する場合、ハードウェアまたはアプリケーションソフトウェアに付属する場合、単体販売される場合もある。更にミドルウェアが存在する場合は、オペレーティングシステムの観点からはアプリケーションプログラムの一種であるが、ミドルウェア上のアプリケーションプログラム(ユーザープログラム)の観点からはミドルウェア自体も一種のシステムプログラムである。同様に各種のユーティリティソフトウェアも、オペレーティングシステムから見れば単なるアプリケーションソフトウェアだが、ユーザー(人間)から見ればシステム制御系のものも存在している。 マイクロソフト社に対する独占禁止法訴訟では、ウェブブラウザ(Internet Explorer)がオペレーティングシステム(Microsoft Windows)の一部かどうか、分離不可能かどうかが議論となった。「ブラウザ戦争」も参照 システムプログラミング(英: System programming)は、システムソフトウェアのプログラミングを指す。以下では、オペレーティングシステムやデバイスドライバの開発におけるシステムプログラミングについて述べる。アプリケーションソフトウェアのプログラミングとの主な違いは、ハードウェアとの関わりが大きい点である。他にも以下のような特徴がある。
概要
システムプログラミング
プログラマはハードウェアやその他のシステムの特徴を前提として、それらを利用してコードを作成する。