Hatena::ブログ(Diary)

yukobaのブログ このページをアンテナに追加 RSSフィード Twitter

2008年05月27日 Windows版FUSE Dokan がオープンソースになったよ!!

WindowsFUSE Dokan がオープンソースになったよ!!

English blog

Dokan(Windows版FUSE) が、昨日、オープンソース(LGPL)になりました!

http://decas-dev.net/2008/05/26/open-source-dokan-library-032-released/

FUSE とは、File system in User space の事で、通常はファイルシステムを作るには、カーネルモードで開発しなくてなならないのですが、ファイルシステムへのアクセスがあった際に、カーネルモードからユーザーモードにコールバックすることにより、ユーザーモードのアプリとして、ファイルシステムを作ることを可能にするライブラリのことです。FUSE があることにより、ファイルシステムの作成は劇的に楽になります。

LinuxMacOSX の FUSE はあるのですが、Windows 版の FUSE はオープンソース版が長いこと存在しませんでした。今や、ほとんどのOSのカーネルはオープンソースですが、Windows のカーネルは未だにクローズソースであり、Windows 版の FUSE の開発は情報不足により非常に難しい作業でした。それを、淺川浩紀さんは、作り上げちゃいました!!すげ〜!一見簡単そうですが、これが、どれだけ難しいかは、取り組んでみるとわかります。

これにより、ここ数年、僕が作りたかったソフトが色々作れます!

というわけで、オープンソース記念として、Dokan を5点ほど改良しました。

1. Windows 2000 対応

なぜか、Dokan は Windows 2000 対応していないので、パッチを作りました。

http://accelart.jp/dokan/20080527/sys.patch

デバイスドライバだけのパッチですが、サービスなど、ユーザーモード側もコンパイルし直しが必要です。下記の mirrorFirefox が起動することを 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ライセンスです。

mount.bat を実行します。

f:id:yukoba:20080528082649p:image

f:id:yukoba:20080528082650p:image

3つフォルダが作られます。

f:id:yukoba:20080528082651p:image

T:\france を開くと、Flickr から取得した画像サムネイルが表示されます。

f:id:yukoba:20080528082652p:image