今度はOS の種類に目を向けてみましょう。同じ機種のパソコンでも、インストールできるOS の種類にいくつかの選択肢があります。たとえばWindows パソコンなら、Windows だけではなく、Ubuntu やRHEL など、いくつかのLinux ディストリビューション*1を利用できます。もちろん、アプリケーションは、OS の種類ごとに専用のものを作らなければなりません。CPU の種類ごとにマシン語が違うように、OS の種類ごとにアプリケーションからOS への命令の仕方が違うからです。

 アプリケーションからOS への命令のやり方を定めたものを、API(Application Programming Interface)*2と呼びます。Windows やLinuxのAPI は、任意のアプリケーションから利用可能な関数のセットとして提供されています。OS ごとにAPI が異なるので、同じアプリケーションを他のOS 用に作り直す場合には、アプリケーションがAPI を利用している部分を書き換えなければなりません。APIとして提供されるのは、キー入力、マウス入力、ディスプレイ出力、ファイル入出力のように周辺装 置と入出力を行う機能などです。

 API は、OS が同じなら、どのハードウエアでも基本的に同じです。したがって、特定のOS のAPI に合わせて作られたプログラムは、どのハードウエアでも動かすことができます。もちろん、CPU の種類が違えばマシン語が違いますから、ネイティブ・コードまで同じ、というわけにはいきません。この場合には、それぞれのCPUに合わせたネイティブ・コードを生成するコンパイラを使って、ソースコードをコンパイルし直す必要があります。

 ここまでの説明で、プログラム(ネイティブ・コード)がどのような環境で動作するかは、OS とハードウエアが決めている、ということをご理解いただけたでしょう。

*1 Linuxディストリビューションとは、Linuxカーネル(OSの中核となる部分)とさまざまなソフトウエアを1つにまとめて、すぐに利用できるようにしたものです。Linuxディストリビューションには、UbuntuやRHEL(Red Hat Enterprise Linux)などがあります。

*2 APIのことを「システム・コール」とも呼びます。アプリケーションが、OSというシステムの機能を呼び出す(コールする)ための手段だからです。システム・コールについては、第9章で説明します。