Linuxのカーネル

OSの構成要素のうち、メモリ管理プロセス管理デバイス管理など、コアとなる機能を提供する部分をカーネルという。
本頁では、Linuxを構成するカーネル(Linuxカーネル)について、特徴や全体像について述べる。

開発の背景 ~UNIXライクなOS~

1969年、AT&Tにて、UNIXと呼ばれるOSが開発された。
AT&Tは当初独占禁止法の問題を抱えていたため、このOSのソースコードを無償で配布した。C言語というアイデアにより移植性が高いため、大学や研究所などの教育機関で大規模な採用が行われたが、のちにAT&Tはライセンスによる制限を与えた。広く普及したUNIXを代替する無償のOSへの需要は高く、様々な派生OS(これをUNIXライクなOSという)を生み出される。しかしこれらは、著作権の問題がなかなか解決されなかった。

この時期、オランダ・アムステルダム自由大学にてアンドリュー・タネンバウムの下、OSを学んでいた学生リーナス・トーバルスは、講義で利用したMinixと呼ばれるOSを参考にUNIXのコードを一切利用していないUNIXライクなOSを開発した。普及の進んでいたインターネットを通じて無償で公開され、瞬く間に注目を集める。これがのちの、Linuxカーネルである。

開発スタイル ~バザール方式~

UNIXライクなOSである点に着目され多くの注目集めたLinuxカーネルであるが、その開発手法についても大きな注目が集まった。
UNIXライクなOSへ需要が高まっていた時期、FSFのリチャード・ストールマンも無償のカーネルを開発していたが難航している状況にあった。彼は、これまであたりまえのように行われてきた、外部にバグを隠しウォータフォールによる慎重に積み上げるような開発スタイルを行っていた。
同時期、リーナス・トーバルスは普及しつつあったインターネットにより世界中の多くの開発者とコミュニケーションを行い、先述した開発スタイルとは全く正反対の方法で、巨大なカーネルプログラムを完成させた。

これら2つのケース(開発手法)について分析され、1997年エリック・レイモンドによって、論文「伽藍とバザール」として発表された。
「はやめにリリース、しょっちゅうリリース」という考えで、プログラマやテスタがコミュニティを形成しプログラムを完成させるそのスタイルを比喩し、バザール方式と名付けた。その後、Mozillaプロジェクトの成功を受け、ビジネスからも注目が集まった。

ライセンス ~オープンソースソフトウェア~

先述した通り、FSFのリチャード・ストールマンはUNIXライクなOSの開発に失敗していた。自身の提唱するフリーソフトウェアというアイデアが採用されたUNIXライクなOSを欲していた彼は、同時期インターネットを通じて注目を浴びていたLinuxにその代わりを託したいと考えた。Linuxは彼の開発したフリーソフトウェアであるGNUのgccを用いていたため、この提案は行いやすい状況にあったからである。

Linuxは、その開発手法から、「無償でソースコードを公開する」という著作権上の要件を満たすため、パブリックドメイン化(著作権の破棄)を行う必要がある。しかし、パブリックドメインで公開されたソースコードは、第三者による独占化などのリスクも多く、この開発手法には不向きであった。リチャードの発明したフリーソフトウェアライセンスを適用すれば、このリスクを回避できる。このため、Linuxへこのライセンスの適用は、ごく自然なものであった。

その後、先述した論文「伽藍とバザール」によって、バザール方式開発と共にこのフリーソフトウェアライセンスも有名なものとなった。
論文の作者であるエリックは、この開発手法をビジネス界へ普及させるマーケティング手段として、これら開発手法・ライセンス体系に対して「オープンソース」という名称を与えた。このような背景もあり、Linuxはオープンソースの代表と呼ばれることが多い。

しかし、ライセンスという手段を、あくまでバザール方式開発で起こりうるリスクを低減するための目的に用いているリーナス側と、自身の「ソースコードは無償であるべき」という思想を支えることを目的とするリチャード側では、開発手法の考え方・ソースコードやソフトウェアのあり方・考えに大きな溝が存在する。リチャードは、「フリーソフトウェア」という言葉と、「オープンソース」という言葉を同一視することを拒否しており、Linuxはフリーソフトウェアライセンスを採用はしているものの、フリーソフトウェアとは言い難い。しかしながら、オープンソースという言葉はマーケティングとして成功しているため、フリーソフトウェアをオープンソースと呼ぶことも少なくない。

このような背景により、Linuxカーネルは、オープンソースライセンスでありフリーソフトウェアライセンスの一種である、GPLによって配布されている。


設計思想 ~モノリシックカーネル~

カーネルには、先述したOSが担うべき機能を同一のメモリ空間内で実装すべきであるというモノリシックカーネルと、カーネルが持つべき機能を最低限に抑え資源の抽象化を行うべきであるというマイクロカーネルの2つの設計思想に大別される。

Linuxカーネルは前者のモノリシックカーネルに属する。モノリシックカーネルはプログラムが巨大化するという弱点を抱えているが、Linuxカーネルの場合、実行時にカーネルの一部を動的に読み込むカーネルモジュールという仕組みを設けることで改善を図っている。

linux_linuxkernel_sum01.gif

情報参照

動作中のカーネルの設定情報や状態の取得については、別頁「Linuxのカーネルの情報参照」にて解説する。


起動の流れ

Linuxのカーネルイメージは、単体では起動が行えない。ブートローダや初期RAM等、様々なメカニズムがあって初めて起動を可能とする。
よって、ここではLinuxオペレーティングシステムが全体として起動するまでの流れ、カーネル単体が初期化・起動を行う流れについて別に分けて解説した。

オペレーティングシステム全体の起動の流れ

Linuxのカーネル単体ではなく、カーネルを含めたオペレーティングシステム全体の起動の流れについては、以下の通りである。

   ↓
   ↓
   ↓
   ↓
   ↓
   ↓

起動・初期化の流れ

Linuxのカーネルがブートローダからロードされ制御を渡された後、カーネルはシステム全体の初期化を行う。
この流れについては、別頁「Linuxのカーネルの初期化ルーチン」にて解説する。


構築・インストール

カーネルはディスク上等へイメージファイルとして配置する際には、カーネルイメージを圧縮し、これを解凍するためのアルゴリズムや初期化を行う為のルーチンと共にブートイメージとしてまとめられる。したがって、純粋なカーネルイメージを扱うことはほぼ無い。
よって、カーネルの構築手順については、別頁「Linuxのブートイメージ」にて解説する。


設定・調整

カーネルの設定・調整方法については、別頁「Linuxのカーネルパラメータ」を参照。

  • 最終更新:2009-12-09 00:11:24

このWIKIを編集するにはパスワード入力が必要です

認証パスワード