Macintosh developers gained a new Mac OS X software programming tool with the release of MacFUSE, an open-source Mac version of the FUSE file system module for Linux.
Amit Singh, engineering manager of the Macintosh Group at Google and author of “Mac OS X Internals: A Systems Approach,” developed MacFUSE and released it at the recent Macworld Expo in San Francisco early in January 2007.
MacFUSE, Singh said, makes it easy for even casual programmers to write their own file systems, which they can build into Mac OS X user programs. With MacFUSE, users will be able to treat remote computer drives and even Web-based services as mountable drives on a local computer, he said.
FUSE, which stands for “Filesystem in Userspace,” is an open-source software module that operates at the kernel level of Unix-based operating systems. It has also become officially part of Linux.
The FUSE module allows general users and application developers to create their own file systems without having to work directly with the kernel. FUSE acts as an intermediary, enabling developers to call its programming interfaces, which then communicate with the kernel.
Some examples of applications using virtual file systems through FUSE include GmailFS, which allows users to set up a Gmail account as a local disk, and SSHFS, which allows users to interact with files on a remote computer via SSH (Secure Shell).
Singh said Mac OS X users could also use MacFUSE to mount Windows hard drives.
“The biggest use people are finding is that theres no NTFS [NT File System] read/write in OS X. But there are NTFS drivers for Linux,” he said. “Using MacFUSE, its like using a local disk. If you can [connect via] SSH into that machine, you can make files on that machine look like theyre local and browse them in the Finder. … Its far more seamless than using a remote client—you just see the files.” Singh pointed out that Mac OS X users could even implement this and access any Windows drives they have created through Mac OS Xs Boot Camp.
Another application of MacFUSE is for use with Web services. “I think this is the biggest potential,” Singh said. “Users have a lot of interaction in the browser, but people are used to the 30-year-old desktop metaphor. … MacFUSE lets you unify all the Web services as though they were local files. Instead of dealing within the browser, then downloading to disk, you can just drag and drop in the Finder,” he said.
Most existing FUSE plug-ins should “just work,” Singh said, though he added that some may require some tweaking in order to move them from Linux to OS X.
“The possibilities are endless,” he said.
Singh said MacFUSE was a “homebrew” project developed in his “20 percent time,” the time set aside for Google engineers in which they can pursue their own projects. Google News, AdSense for Content and other public products grew out of such private projects.
The biggest challenges, Singh said, arose from making sure that MacFUSE was fully compatible with the existing FUSE standard. He pointed out there are a hundred file systems for the Linux FUSE implementation. “To comply with FUSE API on Linux was a technical challenge,” he said. “I worked hard just making sure everything worked.”
Singh said this work was only possible with the latest version of Mac OS X. “Only in Tiger [Mac OS X 10.4] did Apple have a stable API for file systems in OS X,” Singh said.
Assuring quality was also a concern for Singh. “You really cant afford to have bugs in kernel software. … That causes crashes,” he said. However, Singh said that didnt mean there wouldnt be bugs, “but people will have high expectations.” This, he said, led to the projects mantra of “release early, release often.”
Overall, Singh said he was pleased with the work. “Its one of the things Ive been missing on OS X for a long time,” he said. He added that hes received good comments on MacFUSE. “Reactions on blogs show me that people are very happy,” he said. “It looks like its taking off. …We hope Apple takes advantage of it.”
A video demonstration by Singh of MacFUSEs capabilities is available on Google Video.