目次


Linux カーネル2.4 の紹介: 第1回

リリース日は? 新機能は?

Comments

Linux 2.4: "遅くなっても出ないよりはまし"

最初の約束は 1999 年の秋でした。次に 2000 年の春になりました。Linux カーネル 2.4.0.0 のテスト版 1 がプロトタイプとしてリリースされたのが 2000 年 5 月 25 日、2.4.0.0 のテスト版 2 が Linux Kernel Archives に追加されたのが 2000 年 6 月 23 日のことです。

待望の Linux カーネル 2.4 のリリースを待ちつづけるユーザーたちのいら立ちは、最近のオープン・ソース・コミュニティーで飛び交う不安に満ちたやり取りの中によく表れています。熱狂的な Linux ファンが Windows オペレーティング・システムの駆逐を切望するあまり、Linux のバージョン・リリースの方法も、他のオペレーティング・システムのベンダーのやり方に近くなってきているようです。長く待たせたり、期限を延長したり、下位互換性が確保されない大幅な変更を加えたりといったことが常套手段になっています。それでも、Linux の開発においては、こうした傾向に歯止めをかける動きが始まっているのは喜ばしいことです。Linux 2.4 のリリースでは、変更点がさらに把握しやすくなり、更新がより短いインターバルで行われてゆくようになるでしょう。

Linus Torvalds 氏は、まさに核心に迫り、2000 年 6 月 13 日 (火) にサンフランシスコで行われた Linux Debian Project のための祝賀会の基調講演の中で、次の Linux リリース (2.4) が 2000 年の秋に出ることを発表しました。Linux バージョン 2.2 が出たのは、それよりも前のメジャー・リリースである Linux 2.0 の 30 か月後のことでした。Linux 2.0 の場合は、バージョン 1.2 がリリースされてから 18 か月後に発表されました。Torvalds 氏によれば、新しいリリースが出るまでにかなりの時間がかかっている現状は、各リリース間の変更をあまり大きくしないという方針によって改善されるということです。つまり、リリース予定を守ることを優先し、期日までに完成できない変更や追加は、次のリリースである 2.5 に持ち越すというわけです。そのようにすれば、これまでのように、アップグレードで大きな問題が発生したり、いろいろ苦労させられたりすることもなくなるでしょう。Torvalds 氏は、このように変更を小さくする方針を昨年の末ごろに採用したようです。

なぜ待たされているのか

実のところ、2.4 のリリースは遅れているわけではありません。そもそも、リリースの予定日が設定されていなかったのです。とにかく、できる時にはできるといった具合でしょう。そのような中で遅れているという印象が広がっていることには、2 つの理由があると思います。1 つは、Linux コミュニティーの思い込み、もう 1 つは、リリース日に執着するマスコミが流した情報です。たとえば、Windows 2000 のリリースにあえてぶつけるために、Linux 2.4 が 2000 年 2 月 17 日にリリースされるというような情報がまことしやかに流れました。

開発者のメーリング・リストでも、リリースの日付や新しい機能に関するあやしげな情報が飛び交っています。Linux は、オープン・ソースのプロジェクトです。開発者のメーリング・リストはいくらでもありますし、その気になればだれでもメーリング・リストに加入して、開発者の間でやり取りされる内容を見ることができます。そこで問題になるのは、第一線の開発者たち (Linus Torvalds、Alan Cox、David S. Miller) のやり取りを、単なる意見の交換としてではなく、正式なリリースの機能リストとみなしてしまう人が多いということです。

Linux 2.4 は、とにかく完成した時にリリースされます。機能の凍結の方針も出ていることですし、コーディングとテストの終了に合わせてリリース日が自然に固まってくるのを待つというのが、大人の対応というものでしょう。Linux 2.4 については、変更を小さくするとともに、徹底的なテストが終わるまでリリースを保留にしておくというのが、唯一の健全な選択肢なのです。

Linux のオープン・ソース開発サイクル

Linux 2.4 の開発は、Linux 2.3.x を土台にしています。2.3.x は開発者向けのバージョンであり、現行リリースは Linux 2.2.x ということになります。2.4 向けに発表されている機能は、完成の程度に差こそあれ、2.3 にすでに盛り込まれています。開発者たちは、既存の 2.3 のコードに何かの必要性やバグを見つけると、追加や変更のコードを送ります。そのようにして送られてきたコードを Linus Torvalds 氏などの主力開発者たちがテストし、品質を確かめたり、副作用がないかどうかを確認したりします。2.3.x の安定版ができたとき、それが 2.4 としてリリースされるのです。

Linux カーネル 2.4 の変更点

2.4 リリースには、かなりの変更や追加があります。ただし、具体的にどのような変更が加えられるのかは、いまだに推測の域を出ません。リリース日がかなり近づいてからでなければ、本当のところは分からないでしょう。しかし、Linux 2.4 では、カーネルにかなりの変更が加えられる結果、処理速度や信頼性がアップし、サポートされるハードウェアのベースが一段と充実するようです。

全体的な設計変更

Linux の ELF と POSIX の基礎強化

Linux カーネル 2.4 は、Linux 2.2 よりも ELF (Executable and Linking Format) への依存度を強めています。ELF は先進的なバイナリー・フォーマットであり、コードやデータの複数セクションがサポートされているばかりか、共用ライブラリーのサポートも強化されています。Win32 フォーマットによく似ていますが、設計は ELF のほうが優れています。Solaris OS に採用されたことから有名になりました。この ELF バイナリー・フォーマットを十分に活用することによって、Linux カーネルの開発者たちは、コードの部品化をさらに進めることができるため、全体的な保守がいっそう容易になることでしょう。さらに、ドライバーの初期化についても、コア・コードの中に初期化のための明示的なコードを含めずに、リンクによって初期化ができるようになります。

Linux 2.4 は、POSIX のクロックとタイマーを採用して、さらに POSIX 準拠の色彩を強め、クロックとして非 rtc デバイスを内部で使用できるようになります。

企業サポート: スレッド化、スケジューリング、容量

Linux 2.4 には、企業レベルの OS 設計として 3 つの変更が加えられます。こうした変更によって、標準的な環境で Linux が使いにくくなるということはなく、むしろ標準的な Linux に一段と充実した機能が追加されることになります。

1) Linux 2.4 では、さらに多くの同時処理または同時スレッドを扱えるようになります。マルチプロセッサー・システムでのスケーラビリティーが向上し、プロセス限度を柔軟に設定できるようになるからです。Linux 2.4 で採用されるスレッド化モデルは、スケーラブルな ("柔軟な") バージョンに変更されてきました。以前のスレッド限度は 1024 と固定されていたため、ユーザーの数が多い場合にはパフォーマンスが低下しました。ところが、この限度が実行時に設定されるようになったため、実際にスレッド化を制限する要素は、使用可能なメモリーの量だけになります。

2) スケジューラーが改良され、たくさんの並行処理を行うシステムをより効率的に運用できるようになります。

3) いくつかの分野で容量が大幅にアップしています。

  • 新しいカーネルでは、なんと 42 億のユーザーやグループを処理できます。
  • Intel ハードウェアで 4 ギガバイトの RAM がサポートされています。
  • 1 つのシステムに 16 個のイーサネット・カードをインストールできます。
  • 1 つのシステムに 10 個の IDE コントローラーをインストールできます。
  • 2 ギガバイトというファイル・サイズ制限がなくなりました。

リソース管理

リソース管理コードは全面的に書き換えられ、スケーラビリティーと汎用性が高まっています。長期的に見れば、リソース管理サブシステムの制御性や使い勝手が向上するはずです。

組み込み Web サーバー

Linux 2.4 には、カーネルの Web サーバー khttpd が新たに組み込まれます。このカーネル・スペースの httpデーモン は、ユーザー・スペースに配置する必要がありません。データはカーネル・スペースに送信され、さらにネットワーク接続に送られます。結果として、応答時間が短縮されます。ただし、khttpd は静的なページしか実行できません。CGI プログラムを実行する場合は、Apache や他の httpd を使用する必要があります。khttpd は、Web サーバーの代わりになるように設計されているわけではないからです。khttpd が CGI の要求を受け取ると、その要求をユーザー・スペースに送り、そこで Web サーバーに要求を処理してもらうことになります。

ネットワーキング

Linux 2.4 では、ネットワーキング層が全面的に書き換えられています。スケーラビリティーの向上を目指して、できるだけ非シリアル化を進めるという発想です。ネットワーク・サブシステムも、マルチプロセッサー・システムでの安定性を確保するために、設計が手直しされており、レース状態 が大幅に削減されます。既存のネットワーク・ドライバー・セットもかなり更新されており、高速ネットワーキングに対応した ATM ネットワーク・アダプターのサポートなど、新しいデバイスもたくさん追加されています。

Linux 2.4 の改訂では、ファイアウォールとインターネット・プロトコルの機能がカーネルに組み込まれるようになります。ネットワーク・サブシステムも 2 層に分割され、パケット・フィルター層とネットワーク・アドレス変換 (NAT) 層に分かれます。いずれの層も旧バージョンに比べて汎用性が高まっており、どんな Linux マシンでも洗練されたルーティングが実現します。さらに、使用可能な機能を管理するための新しいユーザー・スペース・ツールが追加されます。下位互換性を確保してアップグレードをスムーズに実行するために、Linux 2.0 の ipfwadm または Linux 2.2 の ipchains を使用するためのモジュールも組み込まれます。

PPP (point-to-point protocol) コードも、書き換えとモジュラー化が大幅に図られています。ISDN 層からの PPP 層とシリアル・デバイス PPP 層 (モデムによるダイヤルアップ接続などで使用する層) からの PPP 層がカーネルで結合されます。ISDN についても、たくさんの新しいカードをサポートできるように更新されます。PLIP (PPP over parallel ports) 層も改良され、新しいパラレル・ポート抽象層と PPPoE (PPP over Ethernet) サポート (一部の DSL プロバイダーで使用しているプロトコル) を使用するようになります。

ネットワーキングに関するエンタープライズ・レベルの改訂では、Linux と既存のネットワーク・インフラストラクチャーをいっそう統合するための機能が投入されます。たとえば、特殊な Digital/Compaq システムや ARCNet プロトコルとの相互運用を実現する DECnet サポートや、特殊なシステム (旧式の Digital/Compaq システムなど) との相互運用性を高めるハードウェアが追加されます。

Linux 2.4 では、Server Message Block (SMB) プロトコルに基づいて Windows 共有を自動検出できるようになります。Linux も、混在 (異種混合) ネットワークに十分対応できるようになるわけです。Windows 9x からドライブをマウントするのか、Windows NT からドライブをマウントするのかを選択しなければならないというコンパイル時の要件もなくなります。リモート・システムのタイプを自動検出し、必要に応じてバグ修正プログラムを適用することもできます (一部のバージョンの Windows には SMB バグがあります)。(これは SMB クライアントでのみ活用できます。サーバーのニーズがある場合は、Samba パッケージを使用します。)

UNIX ネットワーク・ソケット・モデルが変更されています。Linux 2.2 では、ネットワーク・ソケットからのイベントを待っているプロセスがすべて、イベントの検出時に起動しました。しかし、そのイベントを実際に受け取るのは 1 つのプロセスだけで、残りのプロセスは再び待ち状態に入ります。Linux は効率的なシステムであり、このような処理を高速で行っていましたが、それでもこの "一斉起動" をやめれば、ネットワークのスピードがかなりアップするはずです。それで、この新しいモデルは "1 プロセス起動" と呼ばれ、活動が発生した場合に 1 つのプロセスだけが起動することになります。Apache などのサーバーでは、2.4 のリリースに合わせて、この新しい機能を採用することになるようです。

IPv4 の実装のスケーラビリティーが向上し、IP "別名設定" でコロンを使用することがなくなります。Linux は依然として、IPv4 仕様の趣旨に完全に準拠した唯一のオペレーティング・システムです。

その他

Linux 2.2 では、拡張子やファイル・ヘッダー情報に基づいて、バイナリー・タイプとアプリケーションとの関連付けを行うための柔軟なバイナリー・ローダー・モジュールのサポートが追加されました。そのため、WINE Windows Emulator を活用して、Linux マシンで Windows アプリケーションを実行できるようになっています。2.4 でも、このサポートを継続します。

Linux 2.2 と Linux 2.0 には、Java のサポートが組み込まれていました。Linux 2.4 では、Java バイナリーを実行するための直接サポートがなくなります。Java アプリケーションを起動するには、Linux 2.2 に用意されている misc バイナリー・ローダーを使用しなければなりません。特に何かの機能が失われるわけではありませんが、起動スクリプトの中にこのローダーを組み込む必要が出てきます。

例外と潜在的な制限

Linux カーネル 2.4 は、Linux 2.2 と互換性のない部分がいくつかあります。内部構造がかなり変更されており、/proc ファイル・システムのファイル・フォーマットも一部に変更があります。とはいえ、ほとんどの場合、アプリケーションは問題なく動きます。ただし、例外は、カーネル・レベルで実行されるアプリケーション (デーモン) です。/dev ディレクトリーのほとんどのファイルの名前も変更されていますが、互換性を維持するための名前が用意されています。

Linux 2.4 では実現しないものの、Microsoft のオペレーティング・システムで使用されている NetBEUI プロトコルをサポートするための作業も進められています。Microsoft 自体はこのプロトコルから TCP/IP へ移行しつつありますが、依然としていくつかの Windows ベースのネットワーク環境では、このプロトコルが重要になっています。カーネルの開発者たちによれば、このプロトコルは煩雑でバグが多いため、カーネルでサポートするのは無理だということです。2.4 リリースでサポートするには、NetBEUI の安定性が十分ではないということかもしれません。

Linux 2.4 のメインのディストリビューションでは、暗号のサポートが組み込まれないようです。暗号技術の輸出入に関する規制が国によって違うため、シンプルな開発を目指すには、標準カーネルに暗号を組み込むのは得策ではないということでしょう。その代わりに、暗号を追加するためのパッチが用意されます。

Linux カーネル 2.4 では、デスクトップ OS の問題に直接取り組んではいません。とはいえ、ディストリビューション・ベンダーのために、インストール・プロセスを大幅に改良するためのツール・セットが用意されます。

ハードウェアの変更点

CPU サポート

Linux 2.4 では、Intel ia64 (Itanium/Merced)、IBM S/390、Hitachi SuperH という 3 つの新しいアーキテクチャーが追加されます。(Intel Itanium/Merced CPU は今のところまだ用意されていません。) カーネル 2.4 の変更点は、現在の仕様と、現在の 64 ビット CPU アーキテクチャー (Alpha、Sparc64 など) の既存サポートに基づいています。

Linux 2.4 のハードウェア・サポートは、Linux 2.2 とほとんど変わっていません。386 から Pentium III までの Intel チップはすべてサポートされており、互換性のある AMD と Cyrix のチップもサポートされています。Torvalds 氏の勤務先である Transmeta で設計された Crusoe CPU は、i386 をエミュレートした Code-Morphing ファームウェアを採用しているため、Linux の Crusoe 固有ポートは不要です。

ハイエンド・ハードウェアのスピードアップのためのサポートは、AMD K7 プロセッサーと Cyrix プロセッサーの一種である MCR に対応した、Intel 以外の Memory Type Range Registers (MTRR) の各種サポートによって実現しています。これによって、一部の高帯域幅デバイスでパフォーマンスが向上します。Linux 2.2 では、一部の高帯域幅デバイスでパフォーマンスを向上させるために、最新の Intel チップで使用される Memory Type Range Registers (MTRR) のサポートが組み込まれたのに対し、Linux 2.4 ではさらに進んで、AMD や Cyrix といった代替ベンダーの MTRR (および MCR) の各種サポートが追加されています。

Intel 386 よりも前の CPU はサポートされなくなります。古い 286 マシンに Linux をインストールする人は、Embeddable Linux Kernel Subset (ELKS) のような特殊バージョンを探す必要があります。

カーネル 2.2 は、最高で 4 台のプロセッサーをサポートできましたが、Linux 2.4 は、16 台以上のプロセッサーをサポートするようになるはずです。

拡張プログラマブル割り込みコントローラー (APIC)

Linux 2.2 では、割り込みを複数のプロセッサーに分散させるために、IO-APIC のサポートが組み込まれていました。Linux 2.4 では、超ハイエンド・サーバー用として、複数の IO-APIC コントローラーの使用がサポートされます。

メモリー使用量

Linux 2.4 では、Linux 2.2 とほぼ同じ量のメモリーを使用します。構成内容によって、実際の数値は違ってくるでしょうが、一部の主要サブシステム (ファイル・キャッシュ層など) では、同じ作業をより少ないメモリーで実行できるようになるため、メモリー使用量がいくらか下がる傾向が見られるかもしれません。

Linux で共用メモリーを処理する方法が変更されています。Linux 2.4 は、業界標準にいっそう準拠するようになり、特殊な "共用メモリー" ファイル・システムをマウントしないと、共用メモリー・セグメントが正しく動作しません。ディストリビューション・ベンダーは、Linux 2.4 に対応するときに、この点も処理することになります。

その他のハードウェア

Linux 2.4 は、キーボードが BIOS によって事前に初期化されないマシンや、キーボードのないマシンでも実行できるようになります。

Linux カーネル 2.4 では、マウス・エミュレーションなどのディジタイザー・パッドのサポートが拡張されます。PC、Atari、Amiga、Macintosh ハードウェアのサポートも拡大されます。

ハードウェア・サポートの問題点

Linux カーネル 2.4 では、サポートされるハードウェアのリストが大幅に拡充されますが、2.4 のリリース時にどんなハードウェアが実際にサポートされるのかは、今のところ推測の域を出ません。

ハードウェア検出とドライバー・ソフトウェアの設計 / コーディングは、複雑な問題です。まず、ハードウェアに関する詳細な知識が必要です。そのためには、ベンダーやハードウェアの設計者たちからの協力が不可欠でしょう。たとえハードウェアが規格に準拠していても、デバイスによっては、規格やファームウェアの一部に適合しないという問題が発生するかもしれません。「Windows ではこのカードを使えるのに、なんで Linux ではできないの ?」というような問題です。時には、Windows でも使えないということもあります。ハードウェアに用意されているドライバーに障害や副作用があったりして、更新が必要だという場合も少なくありません。Linux は、趣味でパソコンを使うユーザーにまだまだ浸透していないため、サーバーで使うデバイスはともかくとして、個人用のシステムで使うようなデバイスについては、Linux を無視するベンダーが多いようです。要するに、専用の Apache サーバーに VooDoo 3000 AGP ビデオ・カードを差し込む人はいないというわけです。

それで、何が ? いつ ?

Linux カーネル 2.4 のコードにいろいろな変更を加える作業については、明らかなバグの修正のほかに、次のような 3 つの大きな目標があるようです。

1) 特に大規模サーバーでの処理速度をアップすること。これに成功すれば、Microsoft が非常に特殊な状況で NT の動作を良く見せるためのテストを委託するというようなことは、永久になくなるでしょう。構成やロードについて、Linux のほうが遅いという状況が完全に消えてしまうのです。Linux Today の Paul Ferris 氏は、次のような見通しを述べています。

1999 年には、"Mindcraft" なる会社で一連のベンチマーク・テストが行われました。いくつかのテストでは不正があり、実際に Linux が NT よりもかなり遅いという結果が出ましたが、一部のデータについては、結局のところ正しい方向性を指していることが後から証明されました。いずれにしても、そのようなテストで使われた方法はきわめて疑わしく、テストを実施した会社に否定的な見方をする人が多くいました。どこかの企業から委託料をもらってテストをしたのではないかという疑念さえあったわけですが、結局、委託料を払ったその企業とは、Microsoft にほかならないことがすぐに明らかになりました。非難の大合唱が起きました。 しかし、この騒動にも明るい面がありました。つまり、市場を刺激したのです。オープン・ソースの理念にかかわる多くのプログラマーは、そのテストで公開されたデータを、修正点を見極めるための優れた方法とみなし、Linux のカーネルだけでなく、Samba などの Linux の付属物についても改良を加えてゆきました。 だからこそ、Linux の 2.4 リリースはそのように呼ばれたのです。

2) 市場にさらに浸透すること。コードに多くのドライバーや変更点が追加されることで、ハードウェアのサポートがより広く、より手軽になるため、Linux がさらに浸透してゆくのは間違いありません。

3) カーネルの変種を少なくすること。同じ標準リリースに、ラップトップの要素とエンタープライズ・サーバーの要素が混在しているのは、おかしな状況でしょう。過剰なカスタム・バージョンの数をとにかく減らすのが目標です。組み込みデバイスでも、ラップトップでも、デスクトップでも、ネットワーク・サーバーでも、同じ Linux カーネルをそのまま使えるようになります。カーネルに新しいドライバーを追加したり、スケーラビリティーを高めたりすることによって、変種を減らすことができるはずです。

個人的な希望としては、9 月の初旬までには 2.4 のリリースを期待していますが、現実的に考えれば、2001 年の春までずれ込むこともありそうです。もちろん、それよりも早くリリースされるに越したことはありませんが、そのほうが新しいミレニアムの始まり (2000 年狂奏曲ではなく、本当の意味での始まり) にふさわしいという見方もあるでしょう。とにかく、1 つのことだけは確かです。Linux カーネル 2.4 は、準備のできた時にリリースされるのであって、それよりも早くなることはないのです。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=228563
ArticleTitle=Linux カーネル2.4 の紹介: 第1回
publish-date=08012000