April 7, 2010
Introducing Funion
I defended my dissertation on March 26. So, I guess that means I’m Dr. Nathan now. I’m not sure what normal people do the week after their defense, but I’m doing sprint after sprint on personal projects. I start work in the middle of July and I hear that this company is known as a black hole. There’s just too many cool things internally to learn so I probably won’t have much time for personal projects for a good while. Thus, the first of my projects that’s ready for the world: Funion.
Funion
Funion (Fuse Union /fʌn:njən/) is a Haskell program that uses the HFuse binding to the FUSE library. It presents a filesystem which shows a unioned view of multiple directories.
Example
Consider the case where you have the following two directories, A and B.


But, A and B represent two instances of some common hierarchical scheme. So, unioning A and B, we get:

Get Funion
You can get Funion two ways: GitHub and Hackage
If you have cabal, you can just do:
cabal install funion
Installation
Funion requires: *nix, FUSE, and GHC (preferably the Haskell Platform).
If you have Ubuntu, install the Haskell Platform. Then, to install FUSE:
sudo apt-get install libfuse-dev
Now, you can just cabal install funion.
Usage
Create a mountpoint. Then use funion to union several dirs into that mountpoint:
mkdir mountpoint funion mountpoint /A /B
where /A and /B are teh directories to union.
Upcoming features
Currently Funion is readonly. The next version will allow file editing, and possibly file creation. If a file is created it will have a specific file system to be placed in. Or perhaps, there could be a round-robin file-writing scheme.
There is no logging as of now. The next version will have a logging mode.
FunionD: A daemon which will allow you to mount your funioned directories upon boot.