WDK,KMDF,WDF,WDK

現在、Windowsデバイスドライバー開発は、DDKからWDKへと変わっている。そこで、新しいデバイスドライバーの作り方として登場したのがWDFである。Microsoft社はこれをWDMにかわるWDFドライバーと称して、いかにも新しいアーキティクチャーが登場したかのように説明しているが、私には、WDMと同じものの様に見える。
そのためか、ちまたでは、WDMは時代遅れな古い形式で、WDFが新形式のデバイスドライバーだと単純に誤解している方々が多いようだ。しかし、よくよく調べてみれば、何も変わっていない。従来のデバイスドライバー開発で、効率の低下と品質のばらつきの原因となっていた冗長なコードの実装を、C言語のライブラリーとして整理したにすぎない。つまりは、フレームワークを提供することで、開発効率の改善と、品質の確保を目指した、ということである。
かつて、次なるDDKは、C++のクラスライブラーになるという噂があったが、結果としては、そうならなかった様である。それを先にやったのが、BlueWater SystemsのWinDKだ。かつて私も、これの技術サポートをした事がある。残念ながら製品としては無くなってしまったが、これは名作だったと思う。WinDKは、WDFのアプローチと同じように冗長なコードを整理した。(WinDKの方が先、Mictosoft社はこれを真似たのだろう)。WinDKのとても優れているところは、バランス感覚。冗長なコードをC++のクラスライブラリーとして、フレームワークに整理したのだが、大抵の場合、C++オブジェクト指向を始めるとどうしてもマニアックに抽象化をやりすぎてしまう。そこをぐっとこらえて、必要最低限にとどめ、あくまでも、開発効率の向上に徹している。目的はオブジェクト指向に戯れることではないためだ。この辺りのさじ加減が素晴らしい。
さて、話を戻して、WDK,WDFにより、如何にもデバイスドライバーが短期間で、簡単に開発できるという少々大げさな事をいう方々もいるが、かならずしも正確ではない。安易にこれを丸ごと信じてしまうと大火傷を負うこと間違いない。
先にも述べた通り、デバイスドライバーのアーキティクチャーは、WDMから基本的に変わっていない。WDFは、それを多少整理して纏めただけにすぎない。フレームワークが全てを自動的にやってくれるわけではない。フレームワークの利用にあたっては、WDMの仕組みを十分に理解していることが前提だ。おそらく教科書のサンプルのような簡単なものであれば、スッキリ、簡単にできたと思うかもしれないが、実際の、現実のデバイスドライバー開発はそんな簡単なものは何処にもない。いかにも机上の空論である。
かつて似たようなな例があった。それは、MFCだ。当初、MFCを使うと、いかにも簡単にWindowsプログラミングができると勘違いした結果、WIN32プログラミングに全く知識のない連中を開発に大量投入し、結果、バグだらけ、動作も極めて不安定な手続き指向的なトンデモプログラムを大量に生み出した。結果これが、周囲は勿論の事、後の代々まで祟り、最後には、WIN32プログラミングが解るマットーなプログラマーがこれの尻ふきをさせられる事となったのだ。「不出来なプログラムを憎み、プログラマーを憎んではならない。」などというジョークが流行ったものだ。
まだ、アプリケーションなら、多少のごまかしもきくだろう。臭いものに蓋もできるだろう。だが、カーネルモードで、OSと供に動くデバイスドライバーの場合、とても怖くてそんな事はできない。まったくもって作り直ししかないという結果になる事間違いない。
WDFの利用は知識と経験がある者にとっては、開発効率と品質を改善する解決策となりえるであろう。だが、そうでない者にとっては、魔法の杖とはならない事をきちんと理解すべきである。

Hiroyuki Shimizu/CodeGear,Inc.

Windows Embedded Compact 7

今週末、ようやく日本でも 、Compact 7の説明会があった。ずいぶんと待ったことか。以下に、要点を簡単にまとめた。

● OS要件:

# XPでも、Vistaでも、 7 でも動作可能。

● ソフトウェア要件:

# 従来の Windows Embedded CE R3 は、Visual Studio 2005 であったが、Compact 7 では、Visual Studio 2008 となる。
# 従来の Platform Builder では、日本語版と、英語版が存在していたのが悩みの種であったが、今回からは英語版のみとなる。カタログもスッキリと英語で記述、統一できるはずだ。因みに、Platform Builder は、本来、インターナショナルであり、特に日本語版は必要ない、単に、操作メニューが日本語であるだけだ。できあがるOSは、ビルド時の設定を変更するだけで、世界中、どの言語版にもできる。これが CEの優れているところ。
# Microsoft社によれば、Visual Studio 2008 は、日本語版、英語版、どちらでも動作することを確認しているとのこと。

● オプション:

# Expression Blend と、Silverlightにより、安易にリッチなユーザーインターフェースを作成できる。特に、Expression Blendを使うことで、プログラマーではなく、グラフィック・デザーナーの手によるデザイン作業が可能だ。
# Silverlightは最終的には、ネイティブ C++ コードを出力するので、アプリケーションの実装速度は、Javaのようなマネージコードより高速で、メモリーも効率的に使え、リソースが限定されている組み込みシステムには向いている。また、従来からの WIN32アプリケーションも継続して利用可能であるため、従来からの開発リソースや技術者のスキルが無駄にならない。実用性のある製品造りは単に、流行を追って、新しいものばかりにすれば良いという訳ではないので、この辺りの現実的な判断が嬉しい。

当日は、DVDが配布されたが、以下よりダウンロードすることも可能。
http://www.microsoft.com/windowsembedded/ja-jp/products/windowsce/compact7.mspx

Hiroyuki Shimizu/CodeGear,Inc.

WebKit

AndroidiPhoneも見た目が良いのはWebKitのため?、ならば要するにWebKitが乗ればよいのか?、と単純な発想を思いつく、Windows CEWebKitを乗せてしまえばいいんじゃない!、などと考え、ちょっと調べてみた。既にそれがあるらしい。
Windows CE版のWebKitが登場 海上忍 2008/08/29

この記事を読むと、やたらとメモリーを大食いするらしい。それもどうかと思うが...

Windows CE Port of WebKit

ここには、動画もある。
WebKit browser debuts for Windows Mobile and CE

そういえば、過去にこんな記事もありました。
Windows Mobileに「全力投球」を決めたMicrosoftの厳しい戦い

Hiroyuki Shimizu/CodeGear,Inc.

Having thought about Android

Androidは魅力的だと思う。だがコアがLinuxというのはどうも納得がいかない。特に、組み込みに使うとなると。がしかし、技術的に優れているものが、常に、世の主流とはならないことは、何度も経験している。
私が初めてOSと呼ぶものに出会ったのは、CP/Mだ。これは、BIOSと呼ばれる部分と、BDOSと呼ばれる部分から構成されていて、このBIOSを変更すれば、CPUが8080あるいは、Z80である限り、大抵のハードウェアに見事に移植できた。現在のPCのBIOSの原点である。このBIOSソースコードを見た時、実に匠に良くできていて、感動した事を覚えている。その後、CPUが16ビット化した時、CP/M86が登場した。と同時に、MS-DOSが登場した。初期のMS-DOSは、まさに、CP/Mの模造品であり、そんなに良いものには見えなかった。私はてっきり、次の主流は、CP/M86だと信じて疑わなかった。現に、その後、コンカレントCP/Mどか、CDOSとか、おもしろいものが次々と出ていた。がしかし、私の予想は全く外れ、結局、MS-DOSとなった。その後の流れは皆さんご存知の通りである。CP/Mの作者は事故で亡くなってしまい。MS-DOSの作者は大金持ちとなり、今も生きている。
また、その後に出会ったOS-9にも魅了された。OS-9は、UNIXよりも、MS-DOSよりも優れていて、かつエレガント、だが結局、これも世の主流とはならなかった、つい最近までは一部の熱心な支持者により、SHと組み合わせて、カーナビのOSに使われていたが、これも今は、Windows CEに置き換えられている。そう考えると、納得のいかないものでも、やがて、良いものに化けてしまう可能性が常にある。もっと頭を柔軟ししなければと思うこの頃である。最近の風潮では、OSは何でもよい、主はサービスだと言われている。物造りに拘りを感じていた世代としては、少々寂しい思いを感じる。だがそう感傷に浸っている場合ではない。
Hiroyuki Shimizu/CodeGear,Inc.

Windows CE Vs Android

どうも猫も杓子もAndroidといった感がある。一過性の流行か、それともこのまま続く流れか。純粋にビジネスの話しはともかく、組み込み技術者から見た場合どうだろう。
見た目の良いユーザーインターフェースが実現できるWebKit、アプリケーションの流通をしやすくするDalvik VMなどがうけて、盛んにスマートフォンに採用されている。確かにこの辺りは、Androidの魅力だろう。だが、その中身を詳しく知ると、コアは、Linux、組み込みLinux が廃れてしまったように、これは組み込みシステムには向かない。純粋にOSとして見た場合、Windows CEより遥かに時代遅れのように感じらてならない。友人が、LinuxのUSBドライバーを書いた時に語った感想では、ハードウェアに近いOSの下層部分がきちんと整理されておらず、ポータビリティーも低い、なんだかんだといっても、やはりWindows(Windows CEを含む)は良くできているとのこと、Linuxでドライバーを書くとなると、かなり泥まみれになる覚悟が必要だそうだ。
だが、スマートフォンの利用者にとって見れば、そのような中身の事情など全く知らないし、どうでも良い、要は、電話として使えて、面白ければよい。事実、Androidの設計者たちは、OSはどうでも良く、たまたまLinuxであっただけとの事である。Linuxの欠点を嫌って、本当にコアの部分だけを使ったという話しも聞いたことがある。この辺りは意外と冷めており、商売に徹している感がある。
スマートフォンに限って言えば、Microsoftはとても苦戦している。また、Compact 7 もまだ出てこない。では、Windows CEはもうだめか、そんなことはない。Windows CEはそもそも、組み込みシステムのために、Windowsから再設計されたRTOSである。スマートフォン専用OSではない。十分に時間を掛けて、性能課題も克服された、完成されたOSだ。ここがLinuxベースのOSとは違うところだ。OS自体がコンポーネント構造になっていることから、モジュールの取捨選択が安易で、スケーラビリティが高い。電話意外にも非常に用途が広い。今後はわからないが、今のところ、Androidが電話意外で成果を出した話しはまだない。流行りに惑わされず、冷静に端末の目的を考えれば、現時点では、Windows CEを強く勧める。
Hiroyuki Shimizu/CodeGear,Inc.

Windows CEはなんでもできる魔法の箱です。

何でもすぐに簡単にできます。とは言えないが。少なくとも最初から色々な開発リソースが揃っていることだけは確だ。これらを最初から開発したり、別途購入したりするのは結構大変である。ただし、Windows CEを用いても、製品として完成させるためには、スレッド・プライオリティの見直しや、OAL周辺のパフォーマンスチューニング等、組み込みシステムの最適化に必要な作業は開発者の腕に託される。私がかねがね感じていることなのだが、Windows CEの開発現場では、実はこの組み込みシステムとしての最適化をしないがために、システム全体がバランスよく仕上がっていないと思われる事例が少なくない。その結果として、「Windows CEってだめだよね。」と評価されてしまう。これはたいへん残念なことだ。これまで語ってきたことの締めくくりとして最後に、当然のことだが、Windows CEを採用したとしても、開発者に組み込みシステム構築のスキルが必要であることはITRONでの開発と同様で変わりはない。寧ろ、高度の通信機能やマルティメディア機能と組み込みシステムとしての性能を共存させるWindows CEの開発者には、より専門的な技量が求められることになると考える。この点には十分ご留意されることをお願いいたい。
Hiroyuki Shimizu/CodeGear,Inc.