「Linux」という言葉が指すもの
「Linux」という言葉が世の中ではたくさんの意味で使われています。本記事ではそのうちの使用頻度が高いものについて述べます。
カーネルとしてのLinux
「Linux」というのはそもそもLinus Torvalds氏が開発を開始したOSカーネルのことです。OSカーネルとは、ものすごく雑にいうとアプリケーションやミドルウェアなどのプロセスとハードウェアの間に存在する、コンピュータシステムの核となるソフトウェアのことです。
プロセス
-----
カーネル
------
ハードウェア
アプリのユーザ目線でいうと、OSカーネルは次のようなことを実現します。
- アプリケーションが一つ異常終了しても他のアプリケーションには影響が出ない
- 複数のアプリケーションがシステムに存在しているCPUやメモリなどのリソースを共有し、かつ、互いのリソースには触れられないようになっている(メモリを共有するようなことはある)
- アプリケーション間で通信する
- アプリケーションは直接ハードウェアにアクセスする必要はなく、カーネルが提供する統一したインタフェースによってアクセスできる。裏をかえすと、アプリケーションはハードウェアに直接アクセスできない
この意味でLinuxを指す場合は、誤解されないように「Linuxカーネル」ということもあります。雑な図で示すと以下のようになります。
プロセス
-----
Linux(カーネル)
------
ハードウェア
プロセスはカーネルにシステムコールと呼ばれる特別な方法で処理を依頼します。システムコールの一例として、プロセスの作成、新規メモリ獲得、および、デバイスへのアクセスなどがあります。
Operating SystemとしてのLinux
Linuxという言葉はLinuxカーネル上で動作すUnixライクなインタフェースを持つOperating System(OS)、という意味もあります。UbuntuやRed Hat Enterprise LinuxなどのLinuxディストリビューションというほうがわかりやすいと思います。たとえば「UbuntuはLinux」のように使います。
さきほどOSカーネルという言葉が出てきましたが、OSイコールカーネルではありません。OSはカーネルよりも広い範囲を指しています。かなり適当にいうとカーネルに加えて、カーネル上で動く全て、あるいはすべてのソフトウェアが依存するものののかたまりがOSです。
たとえばOSは以下のようなものを提供します。
- bashなどのshell
- Cで書かれたプログラムなどが内部的に使う標準Cライブラリなど。
- CやC++,Goなどのコンパイラ
- Pythonなどのインタプリタ
OSという言葉は厳格に定義された言葉ではないので、上記のリストのうちいくつかについて「これはOSではないだろう」と思う人もいると思います。「だいたいこんなかんじ」くらいのイメージでいてくださればいいです。
ただ最近のLinuxのディストリビューションは上述したようなOSに加えてアプリからミドルウェアまで何でも入っている巨大なソフトウェアの集合体になっているので、筆者としては「さすがにこれはOSと呼んでいいのか?」と思ったりもします。
余談ですが、Debian GNU/LinuxというOSがありまして、これにはHurdというカーネルを使っているDebian GNU/Hurdや、FreeBSDのカーネルを使っているDebian GNU/kFreeBSDという別のOSがあります。カーネルだけ差し替えるなんて、面白いですね。
コンピュータシステム全体としてのLinux
OSとしてのカーネルをベースに構築したコンピュータシステム全体のこともLinuxと呼ぶことがあります。たとえば「ナントカ社のシステムは従来はWindowsだったが(Windows上に構築していた)、Linuxに移行した(Linux上に構築したシステムに移行した)」のように使います。
その他
"Operating SystemとしてのLinux"節に"Unixライクなインタフェースを持つOS"とあえて書いたのには意味があります。たとえばAndroidはLinuxカーネルを使いますが、その上にはUnixライクなものとは異なるインタフェースを持つAndroid固有のソフトウェアが載っています。「AndroidはLinux」といえなくはないですが、あんまり言いません。「AndroidはLinuxを使っている」くらいならよく聞きます。「AndroidはLinux」とか「Linuxカーネルを使っているけどLinuxではない」とか言われます。
おわりに
自分で書いてわけわかんなくなってきました。本当に使い方が難しい言葉です。本や記事を書く時には必要に応じて最初に言葉を定義しておかないといけないし、それぞれを明確に言い分ける標準的な名前がついているわけではないので面倒です。おわり
Discussion