まずはじめに、人間が道具を使う事の構造について考えてみた。そもそも、ハードウェアなどの「道具」を使うとは、以下のように集約されるのではないだろうか。ユーザが行いたい意図があり、それをユーザーが直接ハードウェアに働きかけることで、意図が達成される。
コンピュータのシステムというのは、このユーザーとハードウェアという二者の関係の間に、「インターフェイス」と呼ばれる仕組みを組み込むことであると言ってもよさそうだ。
インターフェイスは、何も一つの実体を指す物ではない。コンピュータのシステムでは様々なプログラムが階層的な構造を取り、ハードウェアとの間の橋渡しを行うことが普通である。
さて、この考えを元にOS(Operation System)とはどのようなものであるかを考えていく。まずは、OSが無いシステムを考える。このようなシステムではアプリケーションがユーザとハードウェアの間に入って直接ハードウェアを制御することとなる。下には、OSなしで動作するシステムの実例として、Arduinoを挙げた。
一方、OSが存在する場合は、OSがアプリケーションとハードウェアとの間に位置する。そして、OSがハードウェアの直接的な制御を担うこととなる。アプリケーションは、OSとの連絡を通して間接的にソフトウェアを制御する。言わば、OSがアプリケーションとハードウェアに対して、インターフェイスを提供していると言うができる。
OSの存在するシステムの例として、GNU/Linuxシステムを考える。GNUとは、ここまで議論してきたアプリケーションに相当するものと言っても大きな間違いは無いだろう。Linuxと呼ばれるプログラムは、狭義の意味でのOSと言われる。それはここまでの議論の通り、ハードウェアを直接制御するアプリケーションであるからである。一方、GNUが提供しているソフトウェアは、アプリケーション自身であったり、アプリケーションがカーネルと情報のやり取りを行う際に利用するAPI(Application programming interface)であったりする。ユーザーが触れているのは、アプリケーションであって、カーネルではないので、Linuxカーネル単独ではユーザーの意思を実現することができない。GNUの提供するプログラムが必要なのである。(下の例ではGNU/Linuxが働くハードウェアの実例として、Raspberry Piを挙げた)
GNUとLinuxカーネルの双方にリスペクトを払うという意図で、一般に「Linux」と呼ばれるシステムを、「GNU/Linux」と呼ぶ人も多い。
以上が、私がRaspberry PiやArduinoをいじっているうちに、OSの本質が少し見えてきたように感じたことのまとめである。人間と道具(ハードウェア)という二者の関係に始まって、ソフトウェアがインターフェイスを提供したり、ハードウェアとのやりとりを一手に引き受けるOSのあるシステムまで見てきた。
今後は、OSがあることの利点についてより具体的に考えていきたいと考えている。