Linuxデバイス・ドライバ・モデル

Linuxドライバ・モデル:優れたデバイス・サポート方法

Dan Kohn、Linux Foundation

2008年6月

目次

1.Linuxドライバ・モデル:優れたデバイス・サポート方法

1.1 要旨

1.2 はじめに

1.3 Windowsデバイス・ドライバ・モデル

1.4 Linuxデバイス・ドライバ・モデル

1.5 結論:IHVはドライバをメインラインに組み込みましょう

2. プログラム及びプロジェクト

2.1 Linux Foundation NDAプログラム

2.2 Linuxドライバ・プロジェクト

2.3 ドライバの早期統合

2.4 ドライバ・バックポート・ワークグループ

2.5 Linux Foundationメンバーシップ

2.6 結論

 

 

1.Linuxドライバ・モデル:優れたデバイス・サポート方法

1.1 要旨

 今日、Linuxは、世界中のどのオペレーティング・システムがサポートしてきたハードウェア・デバイスよりもさらに多くのデバイスをサポートしています。Linuxではこれをなし遂げるのに、一般的に知られているWindowsデバイス・ドライバ・モデルとはまったく異なる開発モデルを使用しています。Linux開発プロセスは継続的に進化・発展し、IHV(独立ハードウェア・ベンダー)、ディストリビューター、およびコミュニティの他のメンバーのニーズをサポートしています。また、Linuxの開発モデルのメリットは時間の経過と共にさらに強化されています。Linuxはドライバ開発者にソースまたはバイナリ・インターフェースにおいて安定したインターフェースを提供しませんが、IHVの開発者の方々とって、ドライバ開発を容易にする多くのプロジェクトがあります。これらのプロジェクトの多くはLinux Foundationが支援しており、その中には、ハードウェアNDAプログラム、Linuxドライバ・プロジェクト、ドライバ・バックポート・ワークグループなどがあります。IHVがLinuxコミュニティに参加すると、ほとんどと言っていいほど、Linuxドライバ・モデルには、優れたドライバを少ないコスト開発できる大きなメリットがあることに気付きます。

1.2 はじめに

  オペレーティング・システム(OS)の基本的な目的は、アプリケーションとハードウェア間の相互運用を可能にする抽象化レイヤとして機能することです。IHVは、所有するハードウェアでOSのすべての機能をうまく利用したいと考え、OSは、OS上で動作するハードウェアを最大限に活用したいと考えています。OSおよびハードウェアは機能の追加や再調整を徐々に行う傾向にあるため、これは動的相互作用となります。ユーザーも含めて、全ての人々は、面倒な設定やサポートの電話をかけることもなく、ハードウェアが「普通に機能する」ことを望んでいます。

 現在、Linuxは、世界中のどのOSがサポートしたデバイスよりもさらに多くのデバイスをサポートしています。そうは言っても、自分が使用する必要のあるデバイスのサポートがないと慰めにもなりません。これまで、Windowsは、IHVがWindowsドライバに対して非常に多くのリソースを費やしてきたことで恩恵を受けてきました。WindowsおよびLinuxドライバ・モデルの長所と短所を検討することで、関連する状況を説明でき、背景を把握することで、Linuxデバイス・サポートが、デバイス・サポートの数および品質の両方で最終的にどのようにしてWindowsを超えたのかを理解することができます。

1.3 Windowsデバイス・ドライバ・モデル

  多くのベンダーがWindowsモデルを最も良く知っています。Windowsモデルに隠れた理論とは、Microsoftはドライバ開発者が利用できる安定したABI(Application Binary Interface)の提供を約束していることです。これらのインターフェースは、コアOSがデバイス・ドライバに提供できる一連のサービスを表しています。IHVは、リリースされたバイナリOSに対して自身のバイナリ・ドライバのテストおよび認証を行います。Microsoftは、同じバイナリ・インターフェースを長い期間提供することを約束しているため、IHVはこのインターフェースに依存することになります。

  この方法に隠された理由付けは、ドライバ開発をOS開発から切り離すことを可能にするということです。Microsoftは自身のクローズド・ソースOSを制御し、IHVは自身のクローズド・ソース・ドライバを開発します。両者の間には安定したABIであるこのインターフェースのみがあります。また、コア・オペレーティング・システムと比較して、ドライバは、外部の二級市民の立場であることを意味しています。バグのあるドライバがOS全体を破壊する可能性があるという事実はそのままであるにもかかわらず、ドライバ開発者は、このABIの背後にあるコアOSにアクセスしたり、中身を確認したりすることはできません。

  ドライバはバイナリ形式でのみリリースされるため、IHVはWindowsドライバのソース・コードを公開することはありません。IHVはドライバのリリースおよびアップグレードを独自に行い、ユーザーに新しいバージョンをインストールさせます。これによりユーザーは、CD-ROMをインストールして新しいハードウェアを動作させることを求められます。(これらのドライバはIHVにより頻繁にアップデートされるため、現在では、経験のあるユーザーはCD-ROMを無視し、IHVのWebサイトから最新のドライバをダウンロードしています。)

 この方法のデメリットは、安定したデバイス・ドライバABIを保証するために、OSの信頼性および安全性を低下させてでも、古くて最適ではないインターフェースに固執せざるをえないことです。たとえば、いろいろなUSBデバイスの機能をすべて利用できるようにするため、WindowsおよびLinuxの両者とも、USB内部実装を何度も書き換える必要がありました。Linuxは、インターフェースおよびドライバを同時にアップグレードでき、古いインターフェースを停止して削除することができました。一方、Windowsは、古いインターフェースを永久にサポートし続ける必要があるため、これは、何度となく開発の悩みの種となり、バグおよびセキュリティ・ホールが発生する可能性を増やしたと見ることができます。

 加えて、バイナリ・ドライバはバグが多くなります。これは、システム・ベンダー、開発者、および、ユーザーのコミュニティではく、IHVだけがバグの特定と修正を行うからです。Windowsドライバの閉鎖性がもたらす別のデメリットは、膨大な量のサブシステム・コードがWindowsドライバごとに(異なる形式で)複製されるということです。この複製の原因は、少数の開発者しかコードにアクセスできず、すべてのコードを確認できる開発者がいないため、共通サブシステムのコードの削除と最適化を行うことができないなためです。

しかし、Windowsモデルの最も大きな問題は、安定したデバイス・ドライバABIが実際は安定性を維持できないことにあります。Microsoftは、Windowsのリリースの度にWindows ABIを修正しています。これにより、ハードウェア・サポートの問題が絶えず発生します。ABIを少しでも変更すると、ハードウェアが正しく動作しなくなり、OS全体を破壊してしまう可能性があるからです。この問題を修正するには、IHVは最新のABIに対応して書き直す必要がありますが、ドライバのアップデートのリリースには何年もかかる場合があります。一部のIHVは、古いハードウェアのVista用ドライバをすべてサポートしないことに決めています。また、すべての新しいWindowsリリース(サービス・パックさえ)において、ドライバ不良に関する新しい問題が発生しています。

 最近、PC Worldは、「Service Pack 1へのアップグレード後に発生したWindows Vistaデバイス・ドライバの不良に起因するMicrosoftの大失敗は、20年以上前にWindowsが最初のリリースの際に取った戦略の結果で、このことはほぼ必然的で予測することができた。」と指摘しています。

1.4 Linuxデバイス・ドライバ・モデル

  Linuxドライバ・モデルは異なります。目標は、ユーザーに対して「簡単に動作する」という体験を提供することです。Linuxモデルでは、IHVはメインライン・カーネルにドライバのソース・コードを託します。これにより、ドライバ・コードの品質が十分で、バグまたはセキュリティ・リスクがないことを保証する公開のピアレビュー・プロセスが行われます。3Linuxは、安定したバイナリ・ドライバABIまたは安定したソース・コード・ドライバAPI(Application Programming Interface)のどちらも備えていません。つまり、あるバージョンのカーネルで提供されたインターフェースは、次のバージョンで利用できるという保証はありません。また、ABIおよびAPIの一部はカーネルのリリースごとに変更されます。

 一方、Linuxカーネルは、Linuxアプリケーション用の安定したユーザー空間インターフェースを提供しています。これらのアプリケーションはLinuxカーネルと基本的な取り決めを交わしています。それは、アプリケーションが依存するユーザー空間バイナリ・インターフェースが、変わることなく継続的に長期間機能するということです。Linuxアプリケーションが複数のディストリビューションおよび複数のバージョンで正しく動作するのはこのためです。ユーザー空間バイナリ・インターフェースの基本実装は変わる可能性がありますが、Linux 1.0以前のアプリケーションでさえ、最新のカーネル上で正常に動作します。これはデバイス・ドライバと反対で、バイナリまたはソースによるドライバが依存するインターフェースが、カーネルのバージョン間で常に同じであるという保証はありません。

 プロプライエタリ・システムの観点から見ると直感的に分かりにくいかもしれませんが、Linuxでは、カーネル・コードおよびそれに依存するすべてのドライバはオープン・ソースであるため、内部カーネル・インターフェースの安定性はないほうがいいのです。事実、ドライバ・コードは、第二級のアドオンではなく、Linuxオペレーティング・システムに欠かすことのできない部分なのです。ドライバはメインライン・カーネルに一度取り込まれると、内部カーネル・インターフェースが変化しても長期間維持されます。つまり、サブシステム・メンテナーがカーネル・インターフェースに対して互換性のない変更を行うパッチを受け入れると、このパッチは、そのインターフェースに依存するすべてのドライバを同時にアップグレードします。また、新しいドライバおよびアップグレードは、メインライン・カーネルからすべてのLinuxディストリビューションにまで自動的に適用されます。

 ユーザーの観点から見たこの方法の主な長所は、Windows Vistaなどプロプライエタリ・オペレーティング・システムと比較するとうれしいことに、あるデバイスがLinuxの特定のバージョンで一度動作すると、それ以降のバージョンすべてにおいてこのデバイスがサポートされる点です。(通常、デバイスを利用するユーザーがほとんどいない場合にのみ、デバイスは削除されます。)Linuxでは、ハードウェアのサポートは向上することはあっても悪化することはありません。

 IHVの観点から見ると、大きなメリットは、IHVのドライバはコミュニティにより長い間サポートされることです。つまり、他のユーザーがドライバの修正、調整、および機能の追加を行います。内部カーネル・インターフェースが新しいOSの各リリースで変わっても、IHVは新しいドライバの作成やリリースを行う必要がなく、ドライバは自動的にアップグレードされます。古いインターフェースは、無期限にサポートされるのではなく、停止され削除されます。共通サブシステムをドライバから取り除くことにより、すべてのハードウェアに機能をさらに追加しながら、デバイス・ドライバから無駄をなくし、バグを少なくすることができます。これにより、OSおよびドライバ両方の安定性、セキュリティ、および完成度が向上します。 加えて、Linuxモデルは、ほぼ無償で、異なるアーキテクチャ間のドライバをサポートできます。IHVが一つのチップ・アーキテクチャでのみでドライバをテストしていたとしても、興味を持つ開発者が、Linuxがサポートするすべてのアーキテクチャでこのドライバが確実に動作するようにしてくれます。LinuxはこれまでのどのOSよりも多くのアーキテクチャをサポートしています。多くのチップ・アーキテクチャが32ビットから64ビットに移行した過去10年間で、この方法の長所は特に明確になってきています。ほぼすべてのLinuxドライバは直ぐにアップデートされ、これらの新しいアーキテクチャをサポートします。一方、出荷の多いx86アーキテクチャ上の64ビットWindows Vistaであっても、今日のサポートは十分ではありません。

 一部のIHVにとってLinuxドライバ・モデルの最大のハードルは、ドライバ・コードをオープン・ソースにする必要性です。ある一部のIHVは不承不承オープン・ソースにしています(そのようなIHVは減少していますが)。また、ドライバがメインラインに取り込まれると、エンタープライズ・ディストリビューションに導入されるまで最大18か月必要となります。ドライバを既存のディストリビューションに移植することが今日まで容易に行えませんでしたが、ドライバ・バックポート・ワークグループによりこれが改善されています。

1.5 結論:IHVはドライバをメインラインに組み込みましょう

 Linuxでハードウェアを確実にサポートするということは、ドライバをメインライン・カーネルに組み込むということです。カーネルAPIの変更の度に新しいバージョンを絶えずリリースする必要があるため、メインラインに組み込まれていないオープン・ソース・ドライバをサポートするには、IHVが払う費用は際限なく膨らみます。メインラインに組み込まれていないバイナリ・ドライバをサポートするには、IHVが払う費用はさらに際限なく膨らみます。また、バイナリ・ドライバは「望ましくない」と多くのカーネル開発者が最近の意見書で直接否定しています。

 Linuxドライバ・モデルは、多くのIHVが利用しているWindowsモデルとは異なります。しかし、これは一貫性のある魅力的な方法であり、コンピュータ・ハードウェアの世界全体をサポートするのに成功しています。さらに、IHV内の圧倒的多数がLinuxに対応し、Linuxドライバ開発モデルに関連するビジネスで成功しています。メインラインLinuxドライバをサポートしていないIHVのごく一部にもLinux開発モデルを採用する時期が来ています。このLinuxモデルに適応すると、コストが減少し、ドライバの安定性が向上します。そうすることで、IHVは、最も大きな成功を収めている最大規模のLinux共同開発プロジェクトの中心に立つことになります。

2. プログラム及びプロジェクト

 IHVがデバイス開発プロセスを容易に進めることができるように、次のようなプログラムがあります。

2.1 Linux Foundation NDAプログラム

IHVは守秘義務契約(NDA)プログラムを使用し、カーネル開発者と仕様書およびハードウェアを非公開で開示・共有することができます。IHVは、Linux Foundation(LF)とNDAの契約を結びますが、それはLFの契約者をカバーしています。IHVの同意を得て、1名以上のカーネル開発者がLFと開発契約(NDA対象)を結びます。NDAはLFのWebサイトから入手することができます。5また、LFは、カーネル・コミュニティの代わりに、PCIおよび他のコンソーシアムとの連絡窓口を設けています。

2.2 Linuxドライバ・プロジェクト

IHVは、ボランティアのカーネル開発者にドライバを無償で開発してもらうことができます。IHVは、デバイスの仕組みが記述された仕様書、質問に答える協力的なエンジニアの電子メール・アドレス、およびデバイスのサンプル数個(理想を言えば)を提供します。Greg Kroah-Hartman率いるボランティアによる開発専門家チームが、Linuxメインライン・カーネル・ソース・ツリーに追加された、正常に機能するLinuxドライバを提供してくれます。

  ドライバ(すべてのLinuxドライバのように)は、自動的に最新の状態に保たれ、すべてのLinuxカーネルAPI変更において機能します。ドライバは、LinuxがサポートするあらゆるCPUタイプで正常に機能します。Linuxは、これまでのどのオペレーティング・システムよりも最も多くのCPUタイプをサポートしています。作業がLF NDAプログラム下で行われるようにIHVは選択することができます。詳細については、Linuxドライバ・プロジェクトのWebサイトを参照してください。

2.3 ドライバの早期統合

  Linus TorvaldsとIHVのサブシステム・メンテナーは、新しいドライバが次の条件を満たす場合、新しいドライバをどんどん統合することを発表しました。

コンパイルして正常に機能しそうな場合

明らかなセキュリティ・ホールがない場合

対応できるメンテナーがいる場合

当該ハードウェアを持たないユーザーに悪影響を与えない場合

不要なまたはよく考えていないユーザー空間インターフェースを新規に作りこまない場合

  目標は、ハードウェアができる限り速やかに機能して、共同開発が促進されることです。7加えて、最近では、メインライン・カーネルに統合するにはまだ十分完成していない新しいドライバを組み込むために、Linuxステージ・ツリーを用意しています。

2.4 ドライバ・バックポート・ワークグループ

 前述のとおり、ドライバの開発、テスト、および、メインライン・カーネルへの統合がなされます。しかし、ほとんどのユーザーは、メインライン・カーネルではなく、コンシューマー・ディストリビューションまたはエンタープライズ・ディストリビューションを使用しています。新しいドライバがメインラインに取り込まれると、そのドライバがエンタープライズ・ディストリビューションとして出荷されるまで最大で18か月必要となります。さらに、そのディストリビューションの購入やインストールなると、ユーザーにとって、さらに1~2年かかることもあります。既存ディストリビューションのユーザーとっては、メインライン・カーネルのドライバを彼らが現に使用しているカーネルにバックポートする方法が必要となります。

  現在では、最新のカーネルのドライバ・コードを古いバージョンのディストリビューションで機能するようバックポートするための数多くの互換性のない方法が存在しています。Novell、Red Hat、Ubuntu、IBM、Dell、およびHPの積極的なサポートを受けながら、Linux Foundationはドライバ・バックポート・ワークグループを設立し、新しいドライバ・コードを古いバージョンのOSに配布するためのプロセスを標準化しています。このワークグループはパッケージ・ソリューションを提供して、Linuxディストリビューションの古いカーネルにおいて最新のメインライン・カーネルのアップストリーム・ドライバ・コードを利用することができようにしてます。目標は、いろいろなLinuxディストリビューションにおいて、最新バージョンの関連するデバイス・ドライバのダウンロードおよびインストールが自動的に行うことできるようになることです。詳細については、ワークグループのページを参照してください。

2.5 Linux Foundationメンバーシップ

  IHVはLinux上のデバイスのサポートを受けるのに、Linux Foundationのメンバーになる必要はありません。しかし、メンバーになると、企業のLinuxに対する投資が、法的、技術的、および広報活動の観点から確実に保護されます。メンバーは、企業およびコミュニティ両方におけるLinuxエコシステムの最も優れた専門家が集まり協力するイベントやサミットに参加することができます。これにより、Linux Foundationは、Linus Torvaldsや、すべてのLinux開発コミュニティに法的、財政的、およびロジスティックのサポートを継続して提供することができます。ビジネスの戦略にLinuxを利用する場合、Linux Foundationのメンバーになるべきです。

2.6 結論

  Linuxは、これまで前例のないレベルのハードウェア・サポートを実現しています。これは定着しているWindowsモデルとはまったく異なる開発モデルを使用していますが、安定性、機能性、およびセキュリティにおいて大きなメリットを提供します。Linux OS同様、ドライバ・モデルは、オープン・ソース開発の長所を利用し、改善してさらに優れたコードを少しずつ提供します。カーネル・コミュニティおよびLinux Foundationのいくつかの新たな構想の下、および関連IHVの協力を通じ、Linuxはまだ未完成の数少ないデバイスの全面的なサポートを直ぐに提供することができるでしょう。