Windows版FUSE Dokan がオープンソースになったよ!!
Dokan(Windows版FUSE) が、昨日、オープンソース(LGPL)になりました!
http://decas-dev.net/2008/05/26/open-source-dokan-library-032-released/
FUSE とは、File system in User space の事で、通常はファイルシステムを作るには、カーネルモードで開発しなくてなならないのですが、ファイルシステムへのアクセスがあった際に、カーネルモードからユーザーモードにコールバックすることにより、ユーザーモードのアプリとして、ファイルシステムを作ることを可能にするライブラリのことです。FUSE があることにより、ファイルシステムの作成は劇的に楽になります。
Linux や MacOSX の FUSE はあるのですが、Windows 版の FUSE はオープンソース版が長いこと存在しませんでした。今や、ほとんどのOSのカーネルはオープンソースですが、Windows のカーネルは未だにクローズドソースであり、Windows 版の FUSE の開発は情報不足により非常に難しい作業でした。それを、淺川浩紀さんは、作り上げちゃいました!!すげ〜!一見簡単そうですが、これが、どれだけ難しいかは、取り組んでみるとわかります。
これにより、ここ数年、僕が作りたかったソフトが色々作れます!
というわけで、オープンソース記念として、Dokan を5点ほど改良しました。
1. Windows 2000 対応
なぜか、Dokan は Windows 2000 対応していないので、パッチを作りました。
http://accelart.jp/dokan/20080527/sys.patch
デバイスドライバだけのパッチですが、サービスなど、ユーザーモード側もコンパイルし直しが必要です。下記の mirror で Firefox が起動することを Windows 2000 で確認しました。
2. mirror に -noLockOnSource を追加
Dokan には mirror というサンプルがついています。あるフォルダと同じ内容のファイルシステムを作るサンプルです。しかし、完全にミラーしてしまうと、ミラー先で exe ファイルを実行した時、ミラー元に強いロックがかかってしまうため、exe ファイルの実行ができません。最初、ロックの問題ではなく、これは、Dokan 自体のバグかと勘違いしていました。というわけで、ミラー元にはロックをかけない、-noLockOnSource を作りました。
mirror.exe -noLockOnSource "C:\Program Files\Mozilla Firefox" S:
とやり、S:\firefox.exe で Firefox が起動することを確かめました。
http://accelart.jp/dokan/20080527/mirror.patch
3. Java ラッパ - JDokan
Dokan は C, .NET, Ruby から使えるようになっていますが、Java からも使えるようにしました。JDokanという名称で、ライセンスは LGPL です。
http://accelart.jp/dokan/20080527/JDokan.zip
4. MemoryFS
JDokan を使って、メモリ上にファイルシステムを作りました。RAM Diskのファイルシステム版です。mirror 同様、Firefox が MemoryFS から起動できることを確認しています。これは、JDokan.zipに含まれています。MITライセンス(ほぼ制限のないライセンス)です。
5. JSFlickrFS
ひょっとしたら、世界初の JavaScript で書かれたファイルシステムです。Flickr をファイルシステムとして読めるようにしました。Rhinoを使いました。これも、JDokan.zipに含まれています。MITライセンスです。
T:\france を開くと、Flickr から取得した画像のサムネイルが表示されます。