MacFUSE

A FUSE-Compliant File System Implementation Mechanism for Mac OS X
Download

MacFUSE Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Freeware
  • Price:
  • FREE
  • Publisher Name:
  • Google
  • Publisher web site:
  • http://google.com
  • Operating Systems:
  • Mac OS X 10.4 or later
  • File Size:
  • 3.3 MB

MacFUSE Tags


MacFUSE Description

A FUSE-Compliant File System Implementation Mechanism for Mac OS X MacFUSE is a interesting tool that implements a mechanism that makes it possible to implement a fully functional file system in a user-space program on Mac OS X (10.4 and above). It aims to be API-compliant with the FUSE (File-system in USErspace) mechanism that originated on Linux. Therefore, many existing FUSE file systems become readily usable on Mac OS X. The core of MacFUSE is in a dynamically loadable kernel extension.How FUSE-compliant is MacFUSE? Well, enough so that many popular FUSE file systems can work after being easily compiled on Mac OS X -- often out of the box.Examples of file systems that work have been tested (to varying degrees) include sshfs, ntfs-3g (read/write NTFS), ftpfs (read/write FTP), wdfs (WebDAV), cryptofs, encfs, bindfs, unionfs, beaglefs (yes, including the entire Beagle paraphernalia), and so on.Besides making many existing FUSE file systems available on Mac OS X, MacFUSE opens up a whole new set of opportunities for Macintosh developers, who can now put intuitive and innovative interfaces around all kinds of information.Note: The beta version is available through the stable application. What's New in This Release: Feature: · MacFUSE Preference Pane. Makes it easy and straightforward to keep up-to-date with MacFUSE releases, with the user in full control. · 64-Bit Support. The entire MacFUSE software stack: the kernel extension, the MacFUSE user-space C library, and the Objective-C framework now also come in 64-bit versions. You must be running Leopard or above for this. Naturally, you also need 64-bit hardware to make use of these capabilities. · Support for Snow Leopard. You can now install and use MacFUSE on the latest Snow Leopard developer seed. · Enhanced DTrace support. MacFUSE.framework now contains USDT probes that will be helpful to those developing file systems in Objective-C. For example, look at the updated LoopbackFS example file system: the logging code from it has been removed because better tracing information can be had using DTrace. Consequently, the file system code is shorter and easier to read. · Xcode project templates. MacFUSE now comes with project templates for helping developers get started even faster on their new file systems. You can now even create a file system with the proverbial "zero lines of code". · Debugging symbol bundles included for MacFUSE Objective-C and C libraries. Developers can now do source-level debugging within the Objective-C and C libraries even with the official MacFUSE builds. Look for dSYM bundles in the Resources/Debug/ subdirectory within MacFUSE.framework. · Support for 64-bit inode numbers in the user-space library on Leopard and above. Developers can now choose to use 64-bit inode numbers in their file systems. To do so, a developer would have to compile their file system with -D__DARWIN_64_BIT_INO_T=1 as part of CFLAGS. Then, instead of linking against libfuse, they would have to link against libfuse_ino64--that is, -lfuse_ino64 instead of -lfuse. · New option auto_cache. When you enable this option, MacFUSE will automatically purge the buffer cache and/or attributes of files based on changes it detects in modification times. By default, if MacFUSE detects a change in a file's size during getattr(), it will purge that file's buffer cache. When auto_cache is enabled, MacFUSE will additionally detect modification time changes during getattr() and open(). Relevant knote messages are also generated. All this is subject to the attribute timeout. (That is, up to one purge per attribute timeout window.) As long as your file system's getattr() returns up-to-date size and modification time information, this should work as intended. For file systems that wish the kernel to keep up with "remote" changes, this should obviate the need for explicit purging through fuse_purge_np(). · New user-space library function fuse_purge_np(); can be used by a user-space file system daemon to purge a given file's buffer cache, tell the kernel that the file's size has changed, invalidate the file's in-kernel attributes cache, and generate an appropriate kernel event (kevent) that can be received through kqueue(). Note that the auto_cache option described above should make explicit use of this function unnecessary in most cases. · New user-space library function fuse_knote_np(); can be used by a user-space file system daemon to generate arbitrary kernel events (kevent) for a given file. Note that the auto_cache option described above should make explicit use of this function unnecessary in most cases. · Support for multiple concurrent file systems in a single process; enhancements to the user-space library should allow developers to run multiple instances of either a given file system or even different file systems without having to create a separate process for each instance. Moreover, each instance can be managed (mounted, accessed, unmounted) independently. · New callback exchange; provides support for exchanging data between two files. (See exchangedata(2).) · New callback getxtimes; provides support for reading backup and creation times. (See ATTR_CMN_BKUPTIME and ATTR_CMN_CRTIME in getattrlist(2).) · New callback chflags; provides support for setting file flags. (See chflags(2).) · New callback setbkuptime; provides support for setting backup time. · New callback setcrtime; provides support for setting creation time. · New callbacks setattr_x and fsetattr_x; provides support for setting many attributes in a single call. Not only Mac OS X has a large number of settable attributes, heavy file system metadata activity, which is quite common and can occur behind the scenes, can generate a really large number of calls to set one or more attributes. In line with the "keeping things simple" philosophy, the MacFUSE API fans out a kernel-level setattr call into individual calls such as chmod, chown, utimens, truncate, ftruncate, and the newly introduced chflags, setbkuptime, and setcrtime. Depending on your user-space file system, you may really wish that you could handle all this in one call instead of receiving numerous back-to-back calls. setattr_x and fsetattr_x let you do that. NOTE that if you implement these calls, you will NOT receive ANY of the other "set" calls even if you do implement the latter. In other words, you will only receive setattr_x and fsetattr_x; the chmod, chown, utimens, truncate, ftruncate, chflags, setcrtime, and setbkuptime callbacks will never be called. (You must therefore handle everything at once.) Use this callback only if you know you need to use it. See the reference file system source (loopbackc) to see an example of how to use setattr_x. · Backward compatibility (both binary and source levels) despite new callbacks; existing file system binaries linked against older MacFUSE versions should continue to work; file systems can choose to opt out of all the aforementioned new callbacks. Update: · Better version of the loopback reference file system; implements newly introduced callbacks and provides higher fidelity with the native file system. Packaging: · The user-space library is now installed with proper "current" and "compatibility" version numbers; it is also installed with an appropriate file name such as libfuse.2.7.3.dylib instead of the constant name libfuse.0.0.0.dylib. To maintain compatibility with existing binaries, a new symbolic link libfuse.0.dylib is included for the time being. · A streamlined install/update mechanism is now part of MacFUSE. The mechanism greatly simplifies and improves install/update experience both for end users and for developers who use MacFUSE in their software. There is a single "unified" MacFUSE package that contains binaries for all supported platforms. Building: · A new build/packaging mechanism is now part of the MacFUSE source tree. This is relevant only to those who experiment with MacFUSE internals. Bugfix: · Fixed a bug that could cause a getattr call to report the older size after a write call if the former came before the server could finish the write. · Fixed a bug that could cause the call for setting the modification time for a file system object to be ignored under certain circumstances.


MacFUSE Related Software