競争力のある「リアルタイム」OSとしてのLinux

これは、リアルタイムLinuxの第一人者で提唱者であるDoug Abbott氏とNewsForgeが交わしたIMチャットの内容に若干手を加えたものである。
NewsForge: Linuxが専用の組み込みオペレーティング・システムを向こうに回して競争できるのはなぜですか?専用の組み込みOSの方が、リアルタイム処理に向くように設計されているのではありませんか?

Abbott: 確かに、「従来の」組み込みOSの方がリアルタイム向きに設計されています。Linuxが「対抗」できるのは、「フリー」であり、ソースコードを入手できるからです。

それでは、「実際にどの程度のリアルタイムが必要なのか?」という質問が出てくると思います。

NewsForge: それで、どの程度でしょう?

Abbott: まず、多くのシステムには「ハード」リアルタイムと「ソフト」リアルタイムの両方の側面があります。たとえば、ロボットを制御する場合、腕の動きを監視するタスクは明らかにハード・リアルタイムです。しかし、腕の動きをオペレータに表示するタスクは違います。RTLinuxや、その派生形のRTAIの背後にある戦略は、非リアルタイムの部分をLinuxで処理し、リアルタイムの部分を小さな決定論的なカーネルで処理するというものです。

NewsForge: 特定のデバイスやアプリケーション専用に書かれたカーネルということですか?

Abbott: いいえ、少し話をはしょりすぎたかもしれません。RTLinuxの戦略は、「割り込みの抽象化」と呼ばれます。Linuxは、小さなリアルタイム・カーネルの下で、優先順位の最も低いタスクとして、場合によってはアイドル・タスクとして実行されます。そして、リアルタイムの部分は、このカーネルの下でより優先順位の高いタスクとして実行されます。

RTカーネルは、割り込み処理を引き継ぎます(「割り込みの抽象化」と呼ばれるのはこのためです)。Linuxに対する割り込みは、Linuxの割り込みが有効になったときに渡されます。RTタスクに対する割り込みは、タスクに直接渡されます。

NewsForge: つまり、Linuxを――少なくともLinuxカーネルの一部を――腕の動きに直接使用するということですか?

Abbott: いいえ、腕の動きは、RTカーネルの下で直接実行されるRTタスクによって処理されます。カーネルがプリエンプティブルではないので、RTタスクはカーネル・サービスを利用できません。標準のLinuxがリアルタイムでないのはそのためです。これに対して、腕の動きを描くには、LinuxとX Window Systemを使います。

NewsForge: 現在使用されているか、お勧めのRTカーネルの例を示していただけますか?

Abbott: RTLinuxとRTAIについて言えば、カーネルは「内蔵」されています。つまり実装の一部になっています。

NewsForge: なるほど。

『RTLinux HOWTO』 をご覧になったことは?

Abbott: あります。今その話をしようとしたところです。

NewsForge: 要は、リアルタイム処理に直接かかわったことのないほとんどの人は、リアルタイム処理のしくみや、その背後にあるソフトウェアをまったく理解していないということです。

Abbott: おっしゃるとおりです。マルチタスクや割り込み駆動型のプログラミングの概念を初めから理解するのは容易なことではありません。

NewsForge: プロセス制御やその他の業種では、工場内で動かすリアルタイム(またはリアルタイムに近い)コンピュータにLinuxが浸透し始めていると聞きました。この浸透がますます加速して、若いプログラマがリアルタイムの分野を専門にすることを検討しなければならないほどになるでしょうか?

Abbott: 「若いプログラマ」なら、Linux環境でもそれ以外の環境でも、またプロセス制御であろうとなかろうと、全員が組み込みとリアルタイム・プログラミングの概念に触れるべきです。かつて組み込みプログラミングは、コンピュータ・サイエンスでもどちらかといえば日の当たらない特殊分野でした。今では、コンピュータはあらゆる場所にあり、組み込みプログラマもあらゆる場所にいます。

NewsForge: 何かお勧めの本やコースはありますか?

Abbott: つまり、 私の本のほかにということですね 8-)?

いくつか挙げるなら、David Simon氏の『An Embedded Software Primer』、Jean LaBrosse氏の『MicroC/OS-II, The Real-time Kernel』、同じくLabrosse氏の『Embedded Systems Building Blocks』などがあります。最近は、組み込みソフトウェア関係の書籍が増えてきているようです。おそらく、ほかにも良い本があるはずです。ここで挙げたのは、私がよく知っている本だけです。

Abbott: 優れた組み込みプログラマになるには、ハードウェアにもある程度接する必要があることも付け加えておきます。コース学習に関しては、これまで大学レベルではほとんどコースがありませんでしたが、ここ数年でそれが変化しているように感じます。私の知る限り、Linuxを使うかMicroC/OSなどのほかのOSを使うかは別として、現在いくつかの大学が組み込みプログラミングを扱うコースを開設しています。

NewsForge:*ご自身の* コースはいかがですか? :)

Abbott: そうそう、私はリアルタイムと組み込みプログラミングの3日間のセミナーを2つ教えています。1つ目のコースでは、マルチタスクのパラダイムの基礎と、そのパラダイムを使用して、信頼性のあるわかりやすい割り込み駆動型のコードを構築する方法を扱っています。このコースでは、MicroC/OSをベースとして使用します。もう1つのコースでは、組み込みとリアルタイム・プログラミングのベースとしてLinuxを扱っています。

私はこの2つのコースを、組み込み形態の正反対の側面を見ることだと考えています。電子レンジに内蔵された8051プロセッサでLinuxを動かすことはありません。同様に、MicroC/OSにはPDAやセットトップ・ボックスを動かす機能はありません。

NewsForge: 話をLinuxに戻しますが、ライセンスの問題は本当に大きな違いを生むほどの意味を持っているのでしょうか?

Abbott: はい、その可能性はあると思います。米Wind River社では、VxWorksの使用料として、コンピュータ1台あたりおよそ2万ドル強の料金を設定しています。ただし、Linuxが必ずしも「フリー(無料)」ではないことも認識する必要があります。何年か前に、Linus語録で次のような言葉を見かけたことがあります。「ソフトウェアはセックスに似ている。フリーであればなお良い。」もちろん、セックスが決してフリーでないことは周知の事実です。何事にも落とし穴はあります。そして、私はソフトウェアもフリー(無料)ではないということを強く主張します。Wind Riverなどの会社に前金を支払えば、堅牢で、きちんとしたドキュメントが揃った、サポートが充実した製品を手に入れることができます。また、インターネットからLinuxをダウンロードして、自力ですべてやることもできます。Unixにあまり詳しくない人の場合、Linuxを学習することはかなり大変です。

NewsForge: Linuxに精通した人間を雇うという「中間的な」措置ではどうでしょうか?

Abbott: もちろんかまいません。要は、COTS(市販標準製品)ソリューションを使用する場合に比べて、Linuxを使用するには、おそらく社内により多くのOSの専門知識が必要になるということだと思います。Linuxを使用する最終的なメリットは、見通しがはるかに良くなることです。ソースコードは手元にあるし、オープンソース開発者の巨大なコミュニティに参加できるからです。

NewsForge: コードを変更/カスタマイズできる点はどうでしょうか?必要な専門知識があるか、専門知識を持つ人間を雇うことができるなら、重要な意味があるのではないでしょうか?

Abbott: 個人的には、カーネル自体を変更することについて、私は非常に慎重な考えを持っています。しかし、ソースコードにアクセスできるので、デバイス・ドライバを書く(または変更する)ことは比較的容易です。また、さまざまなカーネル「フック」を利用すれば、実際にカーネルをハッキングせずに機能を追加することができます。

NewsForge: そうそう、そのデバイス・ドライバですが… これには主観的な判断が必要になることを承知のうえでお聞きします。Linux用のデバイス・ドライバを書くのと、たとえばWind River社やQNX社のシステム用のデバイス・ドライバを書くのとでは、どちらが容易でしょうか?

Abbott: そうですね、やはりソースコードにアクセスできるので、Linuxのデバイス・ドライバはきわめて見通しが良くなります。デバイス・ドライバがどのようなしくみで動くかや、カーネルとどのようにやりとりするかを正確に知ることができます。また、自分でドライバを書く際のたたき台として利用できる膨大な量の実例が用意されています。Wind River社やQNX社からは、APIとわずかな実例しか手に入りません。私はVxWorksのドライバを書いたことは一度もありませんが、Linuxでドライバを書く方が容易だと思います。

NewsForge: 何かお聞きすべきなのに、私がうっかり聞き忘れていることはありませんか? :)

Abbott: 「Linuxは、組み込むには『大きすぎ』ませんか」という質問はどうでしょう?

NewsForge: で、そのお答えは?

Abbott: カーネルはカスタム構成できるので、特定のアプリケーションに不要な多くの機能を取り去ることができます。それなりに機能するLinuxカーネルとアプリケーション・コードを1.44MBのフロッピー・ディスク1枚に収めることは、別に難しいことではありません。Linuxで何か実用的なことをするために必要な最小限のメモリは、だいたい8MB程度です。

余分な機能を省いたカーネルと、便利な設定ツールなどが入った組み込みLinuxの商用ディストリビューションが数多く存在します。

つまり、組み込みアプリケーション専用のディストリビューションですね。

NewsForge: リアルタイムOS市場でLinuxのシェアは拡大していますか?

Abbott: はい。必ずしも「リアルタイム」OS市場でシェアを拡大しているわけではありませんが、組み込み分野で主要な要素になりつつあることは確かです。すべての組み込みデバイスにハード・リアルタイムが必要なわけではないことに注意してください。多くのデバイスでは、普通のLinuxを使えば十分に間に合うのです。