「The New, Standards Compliant C++ Library and Internationalization」では Cygnus/Red HatのGNU C++ライブラリをメンテナンスをしている Benjamin Kosnikが 今後のGNU C++ライブラリについて発表をした。セッションのタイトルにも あるとおり、次のGNU C++ライブラリの国際化についての話であるので、 日本語を扱うことの多い我々にとっては気になるところである。 C++の場合コンパイラとライブラリは密接な関係があるために、このセッション でもgcc-3の話題とからんだものとなった。実際gcc-3とともにlibstdc++-v3は リリースされる。libstdc++-v3はISO14882の仕様にそった実装がおこなわれる ので標準にそったプログラムをコンパイルするのに問題がなくなるはずである。 またライセンスはランタイムでの使用についての例外をもったGPLとなるので フリーなコードでもフリーでないコードでも利用できる。 組み込み向けから科学計算まで幅広く利用できるようにするためにlibstdc++-v3には 多くのオプションが用意され、様々な構成を選べることができるようになっている。 namespaceを積極的に採用しstd::を全般的に採用されることになる。 国際化のサポートに関しては予想通りunicode文字列の採用があげられる。glibc2.2と 共に使う場合はiconv --listで得られるエンコーディングを利用することが可能と なり、エンコーディングコンバータのテンプレートクラス std::codecvtなどが提供される。またロケールを サポートするためのクラスも用意される。 今後はC++デバッグのよりよいサポートやC++ブラウザ、よりC++を考慮した リンカの開発、g++はプリコンパイルヘッダのサポートなどが予定されている。 また、IBM/ICUのロケールライブラリでロケールを拡張できるような仕組も 考えられている。gcc-3は四月にリリースされる予定となっており、 gcc-3リリースまでの情報はhttp://gcc.gnu.org/gcc-3.0/criteria.html、 libstdc++に関する情報はhttp://gcc.gnu.org/libstdc++/で調べることができる。 次はMontaVista SoftwareのJohn Mehaffeyがしゃべる「High Availability」を 聞きにいった。今回のLWCEではキーノートなどでもエンタープライズにおけるLinux の利用という話が全面に押しだされており、そういう観点からいっても High Availabilityは重要なテーマの一つといえるだろう。同時間に 裏ではUltramonkeyを使ったHA/Load Balanceのセッションもあったわけだが、 私はKernel Trackのこちらのセッションを聞きにいくことにした。 このセッションも他のKernel関係のセッションのように かなり多くの人が聞きにきており、椅子は満席で立って聞いてる人や 床にすわりこんで聞いている人もたくさんいた。このセッションでは まず high availability(HA)とはどのようなものなのかの説明からはじまった。 HAといってもピンからキリまであり、スペースシャトルのような fault tolerantシステムなどの場合から、コンパクトPCIを利用したやや高価な ソリューション、Webサーバのようなクラスタリングだけで済むようなものまで 幅広い。このセッションではこれらのそれぞれについて適用範囲や特徴などの 説明がおこなわれた。現在Linuxで実現できているのはコンパクトPCIを利用した HAや、クラスタリングなどである。実際にHAを実現したい場合には、 ただ完璧を求めるだけでは高価なものになって仕方がないので、やりたいことと コストとのかねあいで、どのようなシステムにするかを考える必要がある。 HAを実現するために必要なコンポーネントは障害検出、障害分離、障害復旧、回復で ある。障害検出は heartbeatなど health monitoringをおこなうことで実現する。 heartbeat自体は http://www.linux-ha.org/で配布されている。 障害が検出されればそれをfail-overなどして分離したり、ホットスワップなどで 障害のおきた部分をいれかえることでHAを実現している。ディスクに関しては ミラーリングやジャーナリングなどがHAに関係してくるテクノロジーである。 後半はMontaVistaによるHAのソフトウェアアーキテクチャの紹介があった。 彼らのソフトウェアアーキテクチャの構成とコンパクトPCIをもちいたホット スワップできるハードウェアを使ってHAを実現することができる。 LinuxでHAを実現する理由については、Unix的OSであることに加えてAPIや ソースがオープンであるのでマルチベンダによるサポートがあること、 様々なレイヤでの様々なHAフレームワークがあること、現在HAに関する活動が 活発であることなどがあげられた。 Righteous Hacks and the Next New Thing or How the .org Community is Affecting the Business of Linux OpenSource DevelopmentLab / GNU Enterprise / Linux Greenhouse (インキュベータ) / Xieman / Progeny によるパネルディスカッション まとめられないっす(_o_) http://ukai.org/debian/events/lwce-ny-2001/2001-01-31.txt の最後 エンタープライズでのLinuxの利用もさることながら、携帯機器などの組み込みの分野 におけるEmbedded Linuxも本格的になりつつあるようである。そこで LinuxcareのDavid Kaiserによる「Creating a Completely Mobile Linux Device」と いうセッションを聞きにいくことにした。このセッションではDavid Kaiserが無線LAN カードを差したiPAQを片手にリモートでPCを操作してプレゼンテーションを おこなっていた。モバイルなLinuxデバイスとして、Linuxを利用したMP3プレイヤーの 話などが例としてあげられた。http://www.ccs.neu.edu/home/bchafy/mp3.html にこれに関する情報がある。携帯システムを作る時には、まずその目標と明確に することが重要だ。実現できる範囲でどこがゆずれないか、どこは手をぬいて いいかを見極めることが大事なのである。組み込みでも独自のソフトウェアを作るのは やはり時間がかかることなので、すでに利用できるものがあればそれをできるだけ 再利用した方が早くできあがることになる。Embedded Linuxを使うのならカーネル だけでなくてユーザランドも既にいろいろ作られているのだから、それを利用しない 手はないだろう。携帯機器を作る時には、モバイル環境における危険を考慮する ことも忘れてはいけない。モバイル環境における危険とはたとえば衝撃とか振動、 高温、高湿、静電気などである。 このセッションでは携帯機器の具体例としてiPAQの紹介があった。iPAQは Compaqが開発したStrongARMのハンドヘルドPCであり、arm-linuxが動作する。 開発ツールや情報などはwww.handhelds.orgで見つけることができる。 現在iPAQ向けのディストリビューションは2つあり、 一つはLinuxハッカーむけのfamiliar(http://www.andern.org/familiar)と 呼ばれるものでこれにはpythonやpygtk、blackboxウィンドウマネージャが 含まれており、wireless LANやsshをサポートしている。 もう一つはpocketlinux http://www.pocketlinux.com/ でこちらは kaffe JVMをつかっておりJavaやxmlによるアプリケーションフレームワークが 実装されている。 iPAQはまだ日本では販売されていないが販売されれば、使ってみたいデバイス の一つである。 Linuxの利用が増えるにつれ、正しく設定されていないサーバや 古くてセキュリティホールのあるサーバを利用しつづけてクラックされる 事例がめだってきている。インターネットは便利であるが、インターネットに つなぐ時にセキュリティのことを考えないわけにはいかない。そこで Linux Capital Groupで元Debian Project LeaderのBruce Perensによる 「Stack-Smashing Security Attacks」のセッションも聞きにいった。 このセッションではstackを破壊することでセキュリティをつくアタック、 いわゆるバッファオーバーフローを利用したアタックなどについての解説が おこなわれた。実際に簡単なbuffer overflowをおこすプログラムを例に、 アタックするプログラムはどういうものか、アタックはどのようにしておこなわれる のかが説明された。この例(GNU Public virus)ではたった360バイトの アタックプログラムで、ネットワークから任意のプログラムをとってきて 実行するものであった。クラッカーが侵入していろいろなことをするような プログラムをネットワーク上のどこかに設定していれば、このたった360バイトの コードでそのプログラムをターゲットのマシンに侵入させ実行させることができる。 このようなアタックを防ぐにはどうすればいいかについてのディスカッションが おこなわれた。まずは、そもそもCのような配列のチェックをおこなわないような プログラミング言語をつかわないことがよい。例えばJavaなら常に配列の サイズのチェックがおこなわれるので、このようなアタックがおこなわれる ことはないはずである。Cなどで書かないといけない場合は配列をあふれさせない ようなコーディングをこころがける必要がある。その他にもいくつかのアイディアが 紹介された。OSを変更してスタックを実行させないようにすることも可能であるが、 これですべての穴がふさがれるわけでもないし、GCCがはくコードが一部スタックで 実行するようなコードを出力することがあるので動かなくなるという問題もある。 libsafeなどのライブラリを使うという方法もある。ほかにはスタックの成長方向を 逆にすればこういうことはおこらないという話などもでたが、これは変更が 大きすぎるので現実的ではないだろう。他にTransmetaのコードモーフィングを 使うことでこのあたりをなんとかすることができないだろうか とか、データ用と リターン用のスタックを2つ用意すればこのような問題はおきにくいのではないか というやりとりがおこなわれた。