Linuxシンポジウム:来たるPerl 6の技術動向

オタワ発――4日間にわたるLinuxシンポジウムの第2日目は、非常にテクニカルな内容となった。まずはkernelnewbies.orgおよびRed HatのRik van Rielが、自らがホストを務めるCKRMカーネル・リソース管理プロジェクトの仕組みについて解説した。

Rielによると、CKRMはリソース管理をより効率的にするためのプロジェクトだという。複数のプロセスがメモリと処理時間の面で競合している場合、CKRMカーネル・パッチが、効率を向上させ、すべてのプロセスが同じ確率でCPUおよびRAMを利用できるようにしてくれる。

CKRMの具体的な役目は、1人のユーザ、または1つのプロセスがシステムを占領し、ほかのプロセスが機能できなくなるのを防ぐことだ。彼が挙げた例では、CKRMを利用すると、あるサーバ上のWebサイトがslashdottingを受けていても、このパッチを使用しているカーネルが、同じサーバ上のほかのWebサイトやサービスにも十分なリソースが割り当てられ、機能できるようにするという。

仮想マシンを仮想マシンから保護する

CKRMでは、ユーザとタスクに対し、優先度と、保証される最低限のリソース量を割り当てることができる。システム全体は、階層的に再分割される。各階層には、親のリソースの一部が与えられるので、利用可能な量を超えてリソースを割り当てることは不可能だ。

Rielの説明によると、CKRMの主な用途は、仮想マシンをほかの仮想マシンから保護することだ(本稿でのちほど扱う)。ある仮想マシンが多くのシステムリソースを占有して、同じ物理マシン上のほかの仮想マシンに影響が及ぶことはない。CKRMがこれを許さないからだ。どちらの仮想マシンにも、最低限のサービスレベルがあり、同時に、両方が機能できるよう、互いに制限が課せられているのだ。

CKRMでは、IPアドレスやポートも、サーバ上で同じように管理できる。たとえば、あるポートに大量のトラフィックが流れ、ほかのポートのデーモンが一切トラフィックを受け取っていないような場合、カーネルが介入し、両方のポートがトラフィックを受け取れるように、最低限のリソースを割り当てる。

LinuxカーネルのリーダーであるLinus Torvaldsは、CKRMの概念を全面的に支持しているが、変更が必要な部分はまだ多くあるとRielは言った。

CKRMが既存のカーネルスケジューラに与えるオーバーヘッドは非常に少ないという。言い換えると、Linuxシステム上のプロセスにこのような保護を追加しても、サーバの動作が目に見えて遅くなることはない。

CKRMは、ほかのプロセスがリソースを必要としない限り、あるプロセスがシステムリソースをすべて使うことを禁止することはない。よって、CKRMが個別のプロセスのパフォーマンスに与える影響も微々たるものである。

Rielは、CKRMでは将来的に、プロセスの優先順位が、管理者だけでなく、ユーザからも見ることができるようにする予定だと語った。

続いて、Open Source Development LabsのChris Wrightがこの日2つ目のセッションを開始した。彼のテーマは、Linuxの仮想化、つまり、Linux内での仮想マシンのセットアップと利用についてだ。

Wrightは、仮想化は互換性のあるタイムシェアリング・システム(TSS)として定義できると述べた。タイムシェアリングは、当時まだ高価だったコンピュータ上の、複数のプロジェクト間で処理時間を分散することを目的として、IBMによって開発された。

IBMとTSSの歴史

1964年、IBMはタイムシェアリングではなくバッチ処理を採用したが、これは大学の顧客の不評を買った。1965年、IBMは再びタイムシェアリング方式を採用し、1台のコンピュータを複数の目的に利用できるようにした。そして1972年、IBMは、アドレス・リロケーション・ハードウェアを搭載したSystem 370を発表した。

Wrightは、仮想化とは、仮想から物理リソースへのマッピングを管理する抽象レイヤであると説明した。このレイヤによって、プログラムは、自らをハードウェアで直接実行されていると見なす。実際には、自分の代わりにハードウェアと対話してくれるほかのプログラム(カーネル)と対話しているだけだ。

仮想化、または仮想マシンには、さまざまな利用法があるとWrightは言う。仮想マシンは、セキュリティ、サンドボックス、ハニーポットなどの目的で、リソースの隔離に利用することができる。

仮想マシンの基本的なコンセプトは、OSを別のOS内で実行し、隔離された環境を実現することだ。別のOS内で実行されているOSは、親OSを見ることはできず、自らが親であると考える。よって、仮想OSにクラッシュなどの問題が発生した場合も、ホストコンピュータに影響を与えることなく終了する。同じコンピュータ上で複数の仮想OSを実行し、1台でいくつもの「コンピュータ」を利用できるようにする。このようなシステムとしてはUser-mode Linuxが最もよく知られており、コロケーション・プロバイダが仮想サーバを提供するためにしばしば利用している。顧客は自分で物理マシンを持つ必要はないので、ハードウェア・コストが非常に低く済む。

仮想化が目標とするのは、ホスト名、IPアドレス、/procファイルシステム(Unix系のシステムが、システムで実行されているプロセスに関する情報を格納するのに使用するディレクトリ)などを持つ完全な仮想マシンである。真の仮想マシンとは、自らが仮想であることに気付かない、と彼は言う。仮想マシンのOSが実行されているコンピュータは、実際にはコンピュータではなく、もう1つのOSなのだ。

Wrightは、仮想マシンをテストするには、2つの仮想マシンを互いの中で実行してみるとよいと言っている。これが成功すれば、完全な仮想化が実現されていることになる。ただし、このようなシステムは、実用化するには効率が悪すぎるだろう。

昼食後は、Linux AustraliaのDamian Conwayが、Perlバージョン6の新機能についてのプレゼンテーションを行った。

Webサイトをはじめ、インターネット上で広く利用されているスクリプト言語Perlの現在のバージョンは5だ。Conwayによれば、Perl 6は4年前から開発中で、あと2年、つまり2006年中ごろにリリースされる予定だという。

Conwayは、Perl 5はテストバージョンであり、Perl 6が本当のPerlになるだろうと語った。Perlをきちんと理解して開発するのには数年間かかったという。開発者たちは、何がうまくいって、何がうまくいかないのか、そして、何が直感的で、何が直感的でないのかを学んだ。Perl 6では、これらをすべて修正するという。

Perlのゴール:Unicodeのさらなる普及

Perl 6では、コード内でのUnicodeのネイティブサポートが実現されるという。Conwayは、Perl 6の目標の1つは、Unicodeをさらに普及させることだと語った。

Unicodeはマルチバイトの文字システムで、ラテン語系以外の言語を文字コードに取り込むことができる。現在利用できる文字は100余りだが、Unicodeでは数万文字を利用できる。

結果として、Perlの命令に利用できる文字も増える。たとえば、円記号は、Perl 6では2つの配列を結合する(交互に組み合わせる)のに利用される。各配列から変数を1つずつ取り、交互に並べていく操作だ。

Perl 5からPerl 6への変更点は多数に及ぶが、Perlらしさは失われていない。Conwayによれば、Perl 6は必要な改善だという。これは過去に犯した失敗を修正する機会であり、開発チームは、今回はPerlをよいものにするため、最大限の時間を費やしている。コミュニティは、言語に大きな修正を加えることをもう許さないだろうとConwayは言う。Perl 6は、20年間、30年間使い続けられるものでなければならない。

Perl開発チームが直面している課題の1つが、Perl 5との下位互換性だ。熟慮した結果、方法は1つしかないとわかったとConwayは言う。

それは、Perl 6にはPerl 5との下位互換性を持たせない、というものだった。改善を加えつつ下位互換性を実現する方法はなかったのだ。新しい機能やキーワードを利用するには、Perlのコードを更新する必要がある。

Perl 6はよりクリーンな言語であり、仕様もより論理的になっている。Conwayによれば、すべてのスカラー変数は「$」記号で識別され、「$」記号で識別されるのはスカラー変数だけである。さまざまな識別子(「$」、「@」、「%」など)を持つさまざまな変数をさまざまな方法で使うのではない。新バージョンのPerlでは、事実上、使用可能なすべての特殊文字が使用されている。標準のASCII以外の、Unicodeの空間の文字も使用されている(これらの文字はキーワードで代用することも可能だ)。

Perl 6には、ほかの言語で使われる場合に別の動作をする、リスクの高い関数用にtry()およびcatch()ルーチンが用意されている。Conwayの解説では、catch()は、Javaのようにtry()の後ではなく、内部に置かれるという。

ラップトップでのLinux

夕刻になって、Len BrownとRusty Lynchによる「Linux on Laptops」セッションが行われた。このセッションは、コミュニティでは「Birds of the Feather(BOF、類は友を呼ぶ)」セッションと呼ばれる、参加型のセッションだった。

Brownはまず、Linuxラップトップにおけるサスペンド/復帰の操作について解説した、S3ビデオカードを搭載したラップトップを除き、ほとんどのLinuxラップトップはうまくスリープ状態にすることができず、復帰できなくなることが多い。残念ながら、この問題を解決するには、ラップトップ専用のスリープモードのドライバが必要になるとBrownは言う。

ドッキングステーションのサポートについても取り上げられたが、これは事実上Linuxには存在せず、ワイヤレスNICサポートは、機能はするが、特に2200ipw(オンボードのワイヤレスカードで、現時点ではLinuxではサポートされていない)などの最新型のカードをサポートするにはまだ改良が必要だという。

電力管理のサポートも、Linuxに欠けている要素の1つだ。このテーマは詳細に扱われ、ラップトップのLCDの明るさを調整するなどのシンプルな機能だけでも、バッテリーの残量を確保するのに十分役立つ、という意見で一致した。