MacFUSE (Tuxera) Changelog

What's new in MacFUSE (Tuxera) 2.0

Dec 9, 2008
  • 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. [Experimental]
  • Support for Snow Leopard. You can now install and use MacFUSE on the latest Snow Leopard developer seed. [Highly Experimental]
  • 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. [Experimental]
  • 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. [Experimental]
  • 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. [Experimental]
  • 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 [f]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.

New in MacFUSE (Tuxera) 1.7.1 (Jul 1, 2008)

  • Bugfix: Fixed a kernel issue that could cause resource forks larger than 128KB to be truncated when accessed through the Finder.
  • Bugfix: Fixed a kernel issue where the file system could fail to "catch up" on a file's size when the size changed unbeknownst to MacFUSE (say, on a remote server.)
  • Fix: Changed a kernel policy that could prevent generation of certain fsevents. Although generally harmless in Leopard 10.5.2 and below, this could confuse higher layers of system software in 10.5.3. (The issue manifested as problematic file saves.)
  • Fix: 10.4: Fixed a compilation artifact issue where the MacFUSE 1.5 kernel extension could fail to load on PowerPC 10.4.x systems with an "unknown cmd field" error from kextload.
  • Fix: Packaging: The IFPkgFlagInstalledSize field is handled better in the package.
  • MacFUSE.framework Changes
  • Support for a position parameter in extended attributes delegate methods. The old methods are deprecated, although they will still be called (for now) if the file system does not implement the newer methods.

New in MacFUSE (Tuxera) 1.5.1 (May 10, 2008)

  • Bugfix: Fixed bug where the Finder would sometimes report zero KB free in a newly mounted MacFUSE volume.
  • Bugfix: Fixed a signal-related bug that prevented a process from calling fuse_main() more than once (for example, if the process wanted to remount a volume after it had been unmounted.)
  • Bugfix: Fixed an exit(3) call that should have been _exit(3). Could cause tear-down issues for certain file systems.
  • Feature: If a user file system becomes dead or unreachable (for example, if the daemon crashed), MacFUSE will report -1 as the file system subtype (the f_fssubtype field of struct statfs64 and the f_reserved1 field of struct statfs.) The MacFUSE file system property list files now identify subtype -1 as the "dead" file system.
  • Feature: 10.5: Experimental support for select(2) on the user-kernel device. Must be explicitly enabled at kernel extension compile time through M_MACFUSE_ENABLE_DSELECT.
  • Feature: 10.5: Added support for file flags (see chflags(2)). Currently, a user file system can only provide these flags for reading. Support for setting these flags will come in the next release.
  • Update: 10.5: User-space library now based on FUSE library version 2.7.3.
  • Packaging: 10.5: MacFUSE for Tiger (the ready-to-install package) can now also be compiled on Leopard.
  • 10.5: Support for garbage collection.
  • 10.5: Includes BridgeSupport data.
  • Improved mount failure handling and notifications.
  • Improved documentation in header file; explicitly called out the keys that are supported in various delegate methods that use NSDictionary.
  • Support for typeCode and creatorCode in GMFinderInfo class.
  • Explicit constants to use as keys for notification dictionary, etc.
  • Added read support for the st_flags field of struct stat.
  • Fixed bug where the st_ctimespec field of struct stat was being set to NSFileCreationDate. The framework now sets st_ctimespec to equal st_mtimespec; the NSFileCreationDate is not currently supported.
  • Improved resolutions of times used by AttributesOfItemAtPath:error and setAttributes:ofItemAtPath:error:.
  • Added code for calling createSymbolicLinkAtPath: and linkItemAtPath:.
  • Added support for mode_t in mkdir. Tightened up NSFilePosixPermissions code in mkdir, chmod, and create.
  • 10.4: Improved create support when using custom icons (synthesized AppleDouble files) on 10.4.