組み込みLinuxシステムとは

2.1. Linuxシステムとは

Linuxとは、1991年にLinus Torvalds氏が公開した、OS(オペレーティングシステム) です。当初はx86 PC上でしか動作しない、わずか1 万行程度の小さなOSでした。しかしながら、Linuxは驚異的な進化を遂げ、今日ではx86以外にもARM、PowerPC、MIPS 、SHなどの様々なアーキテクチャのコンピュータで動作し、組み込みシステムからPC、サーバー、スーパーコンピューターまで様々な用途で使用されています。

厳密にいうと、Linuxとはプロセス管理や CPU、メモリなどのリソース管理、デバイスドライバ、プロトコルスタックなどをおこなうOSの中心となる部分(これをカーネルとよびます)だけを指します。一つのシステムとして動作するには、アプリケーションプログラムや各種ライブラリなどのユーザーランドが別途必要です。そのため、カーネル部分だけを意味する場合は Linuxカーネルといい、ユーザーランドも含めたシステム全体をさす場合は、Linuxシステムといいます。

Linux システムアーキテクチャ

図2.1 Linuxシステムアーキテクチャ


Linuxカーネルの大きな特徴として、UNIXライクであることと、オープンソースであることが挙げられます。

UNIXとは、AT&Tのベル研究所で開発されたOS です。UNIXは当時のOSとしては先進的であった、マルチユーザー、マルチタスクという特徴を持っていたため、多くの分野で使用されてきました。その分、様々な派生バージョンが発生することになります。そのため、標準化が必要となりPOSIX(Portable OperatingSystem Interface)が制定されました。UNIXライクなOSとは、POSIXに沿うよう開発されているOSのことを指します。Linuxカーネルも POSIXに沿うよう開発されていますが、すべて準拠しているわけではありません。

オープンソースであるとは、ソフトウェアのソースコードがすべて公開されており、誰でも利用、改変、再配布できることを意味します。Linuxカーネルでは、このオープンソースという特徴を維持するために、ソースコードのライセンスとして GPL v2(General Public License version 2)を適用しています。GPL v2 が適用されたソフトウェアでは、ソースコードの改変を自由に行える代わりに、改変したソフトウェアを配布する際には、改変部分を含むソースコードを公開する必要があります。なお、GPLではソースコードの公開義務は生じますが、そのソフトウェアを商業利用することは禁じていません。GPLに関する詳細な説明は、GNU 一般公衆利用許諾契約書(GNU General Public License)[7]を参照してください。

[注記]GNU/Linux

Linuxシステムでは、ユーザーランドで動作する基本的なソフトウェアの多くをGNUプロジェクトの成果物で構成することが一般的です。そのため、GNUプロジェクトの成果物を使ったLinuxシステムを、GNU/Linuxと表記することがあります。

GNUプロジェクトは、フリーソフトウェアという考え方のもとに、GPLを適用したソフトウェアだけでの UNIX互換のオペレーティングシステムと開発環境の構築を目指し開始されたプロジェクトです。GNUは、GNU’s not Unixという再帰的な意味を持っています。GNUプロジェクトについては、The GNU Operating System[8]を参照してください。

Linuxシステムでは、GNUソフトウェアを始めとしたフリー/オープンソースソフトウェアや、プロプライエタリなソフトウェアなど、多くのソフトウェアを使用してシステムを構築します。しかしながら、これらを一つ一つ自分で組み合わせて目的に適合する安定したシステムとするのは大変な労力を必要とします。そこで、カーネルを始め、様々なツールやアプリケーション、ライブラリなどシステムを構成するのに必要なものすべてを収めたディストリビューションというものが存在します。

PCやサーバー用途向けのディストリビューションとして主なものを下記に示します。現在主流のディストリビューションは、GUI によるインストーラで簡単にインストールでき、コンパイル済みのソフトウェアをパッケージという単位でインストール/アンインストールできるなど、複雑な Linuxシステムを簡単に扱えるよう工夫されています。ここに挙げたもの以外にも多くのディストリビューションがあり[9]、様々な用途に使われています。

  • Debian GNU/Linux

    • コミュニティによって開発、サポートされているディストリビューションです。フリーなソフトウェアだけで構成されています。ソフトウェアの管理はDebianパッケージと呼ばれるパッケージ単位で行われます。2010年8月現在の最新版である Debian GNU/Linux 5.0(コードネーム lenny)では、24,000以上のパッケージが用意されています。
  • Ubuntu Linux

    • Debian GNU/Linuxから派生したディストリビューションです。Canonical社がバックアップしており、コンシューマ市場での使いやすさを重視しています。近年では、Ubuntu LinuxをプリインストールしたPCを販売するメーカーも出現してきています。
  • Fedora

    • 開発が終了したRed Hat Linuxの後継として、コミュニティベースで開発、サポートされているディストリビューションです。RPMと呼ばれるパッケージでソフトウェアの管理を行います。
  • RedHat Enterprise Linux

    • Red Hat社が提供する商用ディストリビューション[10]です。Fedoraを元にして開発されています。
  • OpenSUSE

    • Novell社によって支援されたコミュニティにより開発されている、ディストリビューションです。以前は SUSE Linuxと呼ばれていました。技術者以外の一般のユーザーにとっての使いやすさを重視しており、RPMと呼ばれるパッケージでソフトウェアの管理をおこないます。
  • SUSE Linux Enterprise

    • Novell社が提供する商用ディストリビューションです。OpenSUSEを元にして開発されています。
  • Gentoo Linux

    • コミュニティにより開発、サポートされているディストリビューションです。使いやすさよりも最適化や自由度を重視しており、ソースコードベースでソフトウェアを管理するのが特徴です。

2.2. 組み込みLinuxシステムとは

PCやサーバーで使用される"普通の"Linuxシステムと、組み込みLinuxシステムでは、同じソースコードをベースとしたカーネルを使用するという意味では、変わりはありません。但し、PCはIntelのx86系アーキテクチャで動作するのに対して、組み込みではARM、MIPS、PowerPC、SHなどのアーキテクチャが採用されることが多く、デバイスドライバなどのプロセッサ依存部分は普通のLinuxとは異なります。また、組み込みシステムでは、特有の機能が必要になることが一般的ですので、組み込みシステム用のカーネルではボードごとに修正を加える必要があります。

ボード固有の部分に修正が必要になるとはいえ、ユーザーランドで動作するアプリケーションとカーネルとのインターフェースであるシステムコールに関しては、"普通の"Linuxシステムと組み込みLinuxシステムで代わりはありません。そのため、"普通の"Linuxシステムで動作するソフトウェアは、多くの場合、組み込みLinuxシステムでも動作します。

PCやサーバーと比較すると、組み込みシステムではCPUクロックや、ストレージ容量、メモリ容量などのリソースが少ない場合が多く[11]、また、外部環境もPCやサーバーに比べると過酷な場合があります。そのため、組み込みLinuxシステム向けにソフトウェアを作成する場合は、メモリ不足やストレージへの書き込みエラーが発生した場合の対処などに関してより慎重な姿勢が必要になります。

組み込みLinuxで特に注意を要する事項として、ライセンスの問題があります。Linuxシステムでは、様々なライセンスが適用されたソフトウェアを組み合わせて使用することになります。前章でも説明したとおり、GPLが適用されるソフトウェアを機器に組み込んで出荷する場合は、該当ソフトウェアに関するソースコードも機器に添付しなければなりません[12]。もちろん、ライセンスでソースコードの公開が義務付けられていないソフトウェアの場合は、公開する必要はありません。

自分で作成したアプリケーションプログラムは、基本的にはソースコード公開の義務はありません。しかしながら、GPLが適用されたライブラリをアプリケーションプログラムから使用する場合は、アプリケーションプログラムまでGPLが伝搬します。そのため、作成したアプリケーションプログラムを第三者へ配布する場合は、ソースコード公開の義務が生じます[13]。アプリケーションプログラムを作成する際には、利用するライブラリのライセンスも注意深く確認する必要があります。

"普通の"Linuxシステム向けのディストリビューションとして、Debian GNU/LinuxやFedoraがあったように、組み込み向けのディストリビューションも存在します。組み込み向けのディストリビューションは、開発フレームワークとしての側面も持ち合わせており、「開発ディストリビューション」と呼ぶこともあります。

組み込み向けの開発ディストリビューションとしては、uClinux-distやOpenWRTなどがあります。

uCLinux-distは、ソースコードベースの開発ディストリビューションです。当初はMMUを搭載していないプロセッサ向けにカスタマイズしたuCLinux用の開発ディストリビューションでしたが、現在ではそのような制限はありません。Linuxカーネルと、ユーザーランドアプリケーション、ライブラリなどのソースコードを一つのツリーに統合し、それらを一括でビルドできるようになっています。

OpenWRTは、パッケージベースの開発ディストリビューションです。主に、ルータに採用されています。



[10] 特定の企業が開発しており、企業によるサポートを受けることができるディストリビューションを商用ディストリビューションと呼びます。

[11] これは、相対的なものでマイコンボードに比べると豊富なリソースを持っていることになります。

[12] または、ソースコードを入手する方法を提供する必要があります。

[13] ライブラリに適用されることが多いLGPL(Lesser GPL)では、ライブラリ利用によってライセンス条件が伝搬しませんので、アプリケーションプログラムのソースコード公開義務は生じません。