Mackey's Lab

博士を取るまでの備忘録

FUSE を利用したインターフェース作成

クラウドベースのストレージシステムを作成していると Client インタフェースをどのように実現するのかが重要となる。

これまでは C++ の Client API を提供し、ユーザ側で自由に実装してもらう(というのは建前で実際はユーザインタフェースを作成するのが面倒だった)ようにしていたが、いわゆるファイルシステムのようにアクセス出来るインターフェースがあった方が便利かなと思い FUSE を利用し実装することを決意。

FUSE とは File system in Userspace のことであり、FUSE を使用すると、ファイルシステムの内部について理解したり、カーネル・モジュールのプログラミングを学習したりしなくても、ユーザー空間のファイルシステムフレームワークを開発することができる。

(出典) FUSE を使用して独自のファイルシステムを開発する

FUSE の特徴は本家( FUSE: Filesystem in Userspace )のサイトに
・シンプルなライブラリAPI
・シンプルなインストール(パッチを当てたりカーネルの再コンパイルは必要ない)
・セキュアな実装
・非特権ユーザでも実行可能
Linux kernels 2.4.X and 2.6.X で動作
と記述されている。

そもそもは Linux 上でのみ動作するものであったようだが、Mac 上で動作する MacFUSE (現在は OSX FUSE)や Windows 上で動作する Dokan などの実装があるようである。

OSX FUSE は 2015年2月に2.7.5がリリースされており現在でも更新されているプロジェクトであるおことが分かる。
Home - FUSE for OS X

一方で Dokan の方は Windows8 でも Windows7 モードで動作するという情報はあるものの、2011年1月以来アップデートが来ていない。
Dokan

調べてみるとどうも Dokan プロジェクトはストップしたようで、代わりとして現在 Windows で動作する FUSE 的なものは Callback File Ssytem (CBFS) があるようだ。これはアクティブに更新されるものの残念ながらライセンス料が必要となってしまう。

Usermode filesystem for your Windows applications - Callback File System® (CBFS®)

 うう・・・だれかオープンソースプロジェクト Dokan を引き継いでいる人はいないのか?と調べたところ Dokan をフォークさせ dokanx というオープンソースプロジェクトを立ち上げている人を発見。
Commits · BenjaminKim/dokanx · GitHub

万が一プロジェクトが終わったとしても有志で引き継げるオープンソースプロジェクトはすばらしい!

さてさて 2015年現在でも Linux, MacOS, Windows のプラットホームにおいて FUSE はまだ現役で使えることが判明。というわけで私も FUSE を利用した Client インタフェースを作成することとしよう。

プラットホームは MacOS X (10.9) で OSX FUSE を利用しての実装。とりあえずダウンロード&インストールを完了させ、example ディレクトリ内にある hello プログラムを動作させることに成功。コード内容は非常にシンプルなのでなんかうまくできそう。