macFUSE Changelog

What's new in macFUSE 4.7.2 Pre-release

Apr 24, 2024
  • Add support for volume names and volume icon paths (mount options volname and iconpath) that contain commas or backslashes. Commas and backslashes need to be escaped by a preceding backslash character.
  • Improve volicon mount option shortcut handling
  • Add rudimentary support for incremental builds and clean up build scripts

New in macFUSE 4.7.1 Pre-release (Apr 15, 2024)

  • Work around infinite "Allow loading system extension" loop
  • To support new macOS features, macFUSE includes multiple variants of the macFUSE kernel extension. In some cases, the macOS kernel manager tries to load the wrong variant and prompts the user to allow loading it. Then after the necessary restart, the user is prompted again, for a different variant. This continues forever.
  • Starting with this release, all kernel extension variants use unique bundle identifiers. Addresses #1011.
  • Revert to semantic version number for kernel extension variants
  • Enable support for non-blocking I/O for FUSE file descriptor. For details see #536.
  • Use macOS 14.4 SDK instead of macOS 14.2 SDK to build macOS 14 kernel extension

New in macFUSE 4.7.0 Pre-release (Apr 9, 2024)

  • Be more verbose about error conditions when trying to load the macFUSE kernel extension at the end of the installation process.
  • In case a different version of the kernel extension is currently in use, display an "Unmount" button to unmount FUSE volumes right from the installer, so that the newly installed version of the kernel extension can be loaded.
  • Add kernel extension loader actions "check" and "unload".
  • Call load_macfuse with the -c or --check option to check whether the installed kernel extension is currently loaded. Returns ENOENT in case the kernel extension is not loaded and EINVAL in case a different version of the kernel extension is currently loaded.
  • To unload the kernel extension call load_macfuse with the -u or --unload option. Returns EBUSY in case the kernel extension cannot be unloaded.
  • Wake up all threads waiting for new FUSE messages when the volume is unmounted or marked as dead. For details see #974.

New in macFUSE 4.6.2 (Apr 9, 2024)

  • Perform FUSE_INIT handshake synchronously during mount(2) operation. When performing the handshake synchronously, we avoid hangs and we are able to error out of the mount process in case the handshake fails.
  • We used to perform the handshake asynchronously. This has drawbacks and introduced several challenges. Most importantly, there is no guarantee the handshake will ever be completed by the file system daemon. This could result in lingering mount points.
  • Performing the handshake synchronously makes initialization more robust. This addresses #653, #668, #793, #826, #856, #874 and #1003.
  • Clean up kernel extension code

New in macFUSE 4.6.2 Pre-release (Mar 17, 2024)

  • Perform FUSE_INIT handshake synchronously during mount(2) operation. When performing the handshake synchronously, we avoid hangs and we are able to error out of the mount process in case the handshake fails.
  • We used to perform the handshake asynchronously. This has drawbacks and introduced several challenges. Most importantly, there is no guarantee the handshake will ever be completed by the file system daemon. This could result in lingering mount points.
  • Performing the handshake synchronously makes initialization more robust. This addresses #653, #668, #793, #826, #856, #874 and #1003.
  • Clean up kernel extension code

New in macFUSE 4.6.1 (Mar 17, 2024)

  • Work around unintended modification time updates on Apple Silicon Macs running macOS 12 and later
  • When mapping I/O buffers to memory in the kernel extension, the desired memory protection level needs to be specified on Apple Silicon Macs. Mapping the buffer with the default protection level results in unnecessary writes and unintended modification time updates in the future. However, there is no public API for specifying the desired memory protection level on macOS 11.
  • As a result of this change, macFUSE ships with dedicated kernel extensions for macOS 12 and macOS 14 in addition to the macOS 11 kernel extension.
  • Add "Open Getting Started" button to the "System Extension Blocked" alert that is displayed when the user is prompted to allow loading the kernel extension. Clicking on "Open Getting Started" opens the Getting Started wiki document.
  • Remove ioctl FSCTLSETACLSTATE (extended security). Extended security (including support for ACLs) can be enabled at mount time by using the extended_security option.
  • Remove unimplemented ioctl FUSEDEVGETMOUNTERPID from headers
  • Clean up kernel extension code

New in macFUSE 4.6.1 Pre-release (Mar 6, 2024)

  • Work around unintended modification time updates on Apple Silicon Macs running macOS 12 and later
  • When mapping I/O buffers to memory in the kernel extension, the desired memory protection level needs to be specified on Apple Silicon Macs. Mapping the buffer with the default protection level results in unnecessary writes and unintended modification time updates in the future. However, there is no public API for specifying the desired memory protection level on macOS 11.
  • As a result of this change, macFUSE ships with dedicated kernel extensions for macOS 12 and macOS 14 in addition to the macOS 11 kernel extension.
  • Add "Open Getting Started" button to the "System Extension Blocked" alert that is displayed when the user is prompted to allow loading the kernel extension. Clicking on "Open Getting Started" opens the Getting Started wiki document.
  • Remove ioctl FSCTLSETACLSTATE (extended security). Extended security (including support for ACLs) can be enabled at mount time by using the extended_security option.
  • Remove unimplemented ioctl FUSEDEVGETMOUNTERPID from headers
  • Clean up kernel extension code

New in macFUSE 4.6.0 (Mar 6, 2024)

  • Add support for extended access modes. When the FUSE_CAP_ACCESS_EXTENDED capability bit is set, the following more granular access modes are passed to the access() callback in addition to the standard R_OK, W_OK and X_OK modes.
  • Add fair_locking mount option. By default, macFUSE uses an unfair locking mechanism to ensure file system consistency. This can lead to issues when the file system is processing an extreme amount of operations in parallel. In this case, some file system operations might be delayed too long for real-time tasks. The fair_locking option ensures that file system operations are processed fairly. Fair locking comes a little performance overhead compared to unfair locking, but it might be the better option when dealing with high pressure situations.
  • Address kernel panic on macOS 14 when a macFUSE volume is shared over SMB. For details see #982.

New in macFUSE 4.6.0 Pre-release (Jan 3, 2024)

  • Add support for extended access modes. When the FUSE_CAP_ACCESS_EXTENDED capability bit is set, the following more granular access modes are passed to the access() callback in addition to the standard R_OK, W_OK and X_OK modes.
  • Add fair_locking mount option. By default, macFUSE uses an unfair locking mechanism to ensure file system consistency. This can lead to issues when the file system is processing an extreme amount of operations in parallel. In this case, some file system operations might be delayed too long for real-time tasks. The fair_locking option ensures that file system operations are processed fairly. Fair locking comes a little performance overhead compared to unfair locking, but it might be the better option when dealing with high pressure situations.
  • Address kernel panic on macOS 14 when a macFUSE volume is shared over SMB. For details see #982.

New in macFUSE 4.5.0 (Jun 7, 2023)

  • Add experimental support for macOS 14
  • Add experimental support for Xcode 15
  • Add Getting Started link to "Completion" installer phase. The document contains detailed instructions on how to enable macFUSE on newer versions of macOS.

New in macFUSE 4.4.3 (Apr 18, 2023)

  • Work around unavailable VFS plugin. Starting with macOS 12, some users have been reporting that the VFS plugin is not available when they are trying to mount a volume, although the kernel extension is loaded. Starting with this release, the kernel extension loader works around this issue by trying to reload the kernel extension, in case the VFS plugin is not available.

New in macFUSE 4.4.2 (Feb 19, 2023)

  • Work around installer issue on macOS 13. macOS 13.2 seems to be unable to open the installer package soft link in the root of the distribution disk image. Using a hard link instead of a soft link resolves this issue. For details see #932.
  • Use macOS 13.1 SDK to instead of macOS 12.3 SDK to build macFUSE.

New in macFUSE 4.4.1 (Aug 23, 2022)

  • Fix issue that can render macFUSE volume unresponsive. In case a paging operation is triggered during a file system operation, macFUSE tries to acquire the node lock a second time which leads to a deadlock. The bug was introduced in version 4.3.1.

New in macFUSE 4.4.0 (Jun 19, 2022)

  • Add experimental support for macOS 13.
  • Add experimental support for Xcode 14.

New in macFUSE 4.3.1 Pre-release (May 4, 2022)

  • Fix issue that can trigger a kernel panic when unmounting a volume with read/write node locking enabled. With read/write node locking disabled (default), the kernel does not panic.

New in macFUSE 4.3.0 Pre-release (Apr 26, 2022)

  • Improve performance by adding support for read/write node locking. File systems should declare this capability, if they are thread safe with respect to file system operations involving the same node. Otherwise, file system operations (involving the same node) are processed serially. See Declaring File System Capabilities for details.
  • Fix minor memory leak in kernel extension
  • Work around pointers being censored in kernel logs. By default, macOS removes all kernel memory addresses from logs. Unfortunately, this complicates debugging threading and locking issues.
  • Remove obsolete conditionals M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK and M_OSXFUSE_ENABLE_BIG_LOCK from the kernel extension and clean up code
  • Update build scripts for Xcode 13

New in macFUSE 4.2.5 (Apr 26, 2022)

  • Fix race condition that can trigger a kernel panic in rare cases when using fuse_lowlevel_notify_inval_inode(), fuse_invalidate_path() or [GMUserFileSystem invalidateItemAtPath:error:]. See #878 for details.
  • Update build tools to use notarytool instead of altool for notarizing releases.
  • Use macOS 12.3 SDK to instead of macOS 12.1 SDK to build macFUSE.

New in macFUSE 4.2.4 (Dec 21, 2021)

  • Improve support for macOS 12. Starting with macOS 12, the process diskimagesiod needs to be able to access disk images in order for them to be mounted. Allow diskimagesiod to access the volume even if the allow_other mount option has not been specified.
  • Use macOS 12.1 SDK to instead of macOS 11.3 SDK to build macFUSE.

New in macFUSE 4.2.3 (Dec 21, 2021)

  • Fix auto_cache mount option on Apple Silicon. When auto_cache is enabled, we try to detect remote file changes in the getattr callback and invalidate the file's cache. In previous releases local file system operations could mask remote writes, resulting in the local cache not being invalidated. On Apple Silicon this could result in subsequent writes of stale cache data.

New in macFUSE 4.2.2 (Dec 21, 2021)

  • Add workaround to reduce unnecessary writes on Apple Silicon.
  • Declare support for 64-bit object IDs (VOL_CAP_FMT_64BIT_OBJECT_IDS)

New in macFUSE 4.2.1 (Oct 18, 2021)

  • Fix race condition that can result in mkdir(2) returning EINVAL when creating multiple directories recursively. See #832 for details.
  • Fix race condition when removing a directory or creating a symlink. See #824 for details.
  • Add workaround for an infinite write loop when unmapping a file from memory on Apple Silicon.
  • On Apple Silicon munmap(2) might trigger a write, regardless of whether the mapped file was modified or not. This unnecessary write would update the file's modification time, which in turn might cause security software to scan the file. If such a scanner maps the file to memory, the file's modification time will get updated again as soon as the scanner calls munmap(2). This triggers another scan cycle and so on.
  • Add workaround for a missing TARGET_OS_OSX macro in Xcode 13's sys/cdefs.h kernel header.
  • Improve support for non-latin languages by adding support for returning file names in the Unicode Normalization Form D (NFD) in the readdir callback.
  • Finder and other macOS system tools expect file names to be in the D form. Using the C form can result in unexpected behavior, e.g. file names not being displayed in Finder under certain conditions. See Unicode Normalization Forms for details.
  • Improve detection of remote file changes and prevent unnecessary writes.
  • Set minimum I/O size value (iosize mount option) to the platform's page size. On Apple Silicon the minimum I/O size is 16,384 bytes. On Intel it is 4,096 bytes. Using an I/O size value less than the platform's page size can cause hangs.
  • Perform synchronous writes when unmapping a file from memory. When the last munmap(2) completes, the file will have been written to the backing storage.

New in macFUSE 4.2.0 (Oct 18, 2021)

  • Add experimental support for macOS 12.
  • Restore support for macOS 10.9 to 10.11. In Xcode 12.5, Apple fixed an issue that caused macOS 10.11 and earlier versions of macOS to reject packages signed in macOS 11 or later. With this fix, support for macOS 10.9 to 10.11 could be restored. This release supports macOS 10.9 to macOS 12.
  • Add experimental support for Xcode 13
  • Update build scripts to add support for newer macOS SDKs and use macOS 11.3 SDK instead of the macOS 11.1 SDK to build macFUSE.
  • Add mount option norm_insensitive. When using the norm_insensitive option with a high-level file system, file names are normalized before performing a lookup. File names using different normalization forms will be treated as equal.
  • Fix bug in libfuse when calling the filler function in the readdir callback with non-zero offsets. The bug occurred when a filesystem client read a directory until the end, seeked using seekdir() to some valid non-zero position and called readdir(). A valid directory entry is expected, but NULL was returned instead.
  • Please note: On macOS, telldir() may return zero the first time it is called. This is the reason the readdir callback of the loopback reference file system used to call the filler function with a zero offset for the first directory entry and non-zero offsets for all subsequent directory entries. This is a bug. Starting with this release readdir will return an I/O error (EIO) in case filler is called with zero and non-zero offsets.

New in macFUSE 4.1.2 (May 17, 2021)

  • Add native Apple Silicon support to updater.

New in macFUSE 4.1.1 (May 16, 2021)

  • Fix an issue when mounting a volume that can, in rare cases, result in the file system process crashing. DADiskCreateFromVolumePath() might return NULL, so we need to make sure to guard against calling CFRelease()on NULL.
  • Fix "Double-quoted include in framework header" warning when using macFUSE.framework.
  • Fix race condition in preference pane that can result in the preference pane crashing when checking for available updates. This addresses issue #792.
  • Generate debug symbols for preference pane and add them to debug archive.

New in macFUSE 4.1.0 (May 16, 2021)

  • Add support for building macFUSE on Apple Silicon.
  • Add native Apple Silicon support to the updater and uninstaller. macFUSE does no longer require Rosetta 2 on Apple Silicon Macs.
  • Drop support for macOS 10.9, 10.10 and 10.11. Installer packages that are built on Apple Silicon Macs do not work on macOS versions before 10.12 due to the use of SHA-256 signatures instead of SHA-1 signatures.
  • Fix auto_cache file modification detection. In case auto_cache is enabled the kernel extension watches out for remote modification time changes. If a remote change is detected, the file's cache is invalidated. We need to make sure not to invalidate the file's cache in case the modification time changes due to local writes.
  • Remove file name length check in lookup. This improves support for non-latin languages. File names are passed in NFD form and might therefore be longer than their NFC representation. The NFC representation must not be longer than 255 bytes.
  • Add support for dark mode to installer plugin.

New in macFUSE 4.0.5 (Jan 4, 2021)

  • Restore binary compatibility with file systems, that were built using version 3 of the high-level Objective-C framework. This improves compatibility with legacy file systems.
  • Add workaround for loading system extensions on macOS 11. The function KextManagerLoadKextWithIdentifier() is broken on macOS 11 and might return an error even if the macFUSE system extension has been loaded successfully. We need to double-check if the extension has been loaded.
  • Add workaround for unloading system extensions on macOS 11. The function KextManagerUnloadKextWithIdentifier() is broken on macOS 11, claiming the load_macfuse process, that is running as root, does not have sufficient privileges to unload the extension.
  • Add Apple Silicon support to installer. The installer now runs natively on Apple Silicon.
  • Improve installer compatibility with macOS 11. On macOS 11 a restart is required before the macFUSE system extension can be loaded. There is no need to try loading the extension more than once in the context of the installer.
  • The license has changed. Starting with the 4.0.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. This includes the automated download or installation in the context of commercial software. Please contact Benjamin Fleischer.

New in macFUSE 4.0.4 (Nov 30, 2020)

  • Fix a renamex_np(2) issue when using the flag RENAME_SWAP. This improves the compatibility with Microsoft Office.
  • Add libosxfuse_i64.2.dylib symlink for legacy file systems that were build with version 2.
  • The license has changed. Starting with the 4.0.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. This includes the automated download or installation in the context of commercial software. Please contact Benjamin Fleischer.

New in macFUSE 4.0.3 Pre-release (Nov 21, 2020)

  • Fix a bug in macFUSE.framework that can result in volumes falsely claiming to support renamex_np(2) (VOL_CAP_INT_RENAME_SWAP and VOL_CAP_INT_RENAME_EXCL) even though support for the file system feature has not been enabled. File systems that are based on libfuse are not affected by the issue.
  • Fix an upstream bug in libfuse 2.9.9, that can result in readdir(2) returning EIO. See #729 for details.

New in macFUSE 4.0.2 Pre-release (Nov 9, 2020)

  • Fix kernel extension ambiguity on macOS 11. The kernel extension version number now contains the version of the kernel that the particular extension was built for.
  • Remove KextManagerLoadKextWithURL() workaround, that was introduced in version 3.11.1. The issue has been resolved in macOS 11.0.1.

New in macFUSE 4.0.1 Pre-release (Nov 2, 2020)

  • Force installation of preference pane if a legacy version of the preference pane is currently installed.
  • Enable dark mode support for preference pane on macOS 10.14 and macOS 10.15. See #550 for details.
  • Fix English localization of installer. See #737 for details.
  • Fix a bug that resulted in the preinstall and postinstall scripts missing from the installer package. The preinstall script is responsible for removing legacy versions of the package before installing the new release. See #736 for details.
  • Fix a bug that resulted in some Info.plist placeholders not being resolved at build-time for macfuse.fs.
  • Fix bug in the uninstaller (preference pane) that resulted in not all components being removed.
  • The license has changed. Starting with the 4.0.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. This includes the automated download or installation in the context of commercial software. Please contact Benjamin Fleischer.

New in macFUSE 4.0.0 Pre-release (Oct 30, 2020)

  • FUSE for macOS is now macFUSE.
  • Add support for Apple Silicon. The new release supports macOS 10.9 to macOS 11 (Intel and Apple Silicon).
  • Drop binary compatiblity with Google MacFUSE. The Google MacFUSE project was abandoned in 2009. Legacy file systems need to be recompiled for the new macFUSE release.
  • The user space library and framework have been renamed to reflect the name change and can now be found at /usr/local/lib/libfuse.2.dylib (headers in /usr/local/include/) and /Library/Frameworks/macFUSE.framework.
  • Add support for renamex_np(2) on macOS 10.12 and later (VOL_CAP_INT_RENAME_SWAP and VOL_CAP_INT_RENAME_EXCL).
  • Add new callbacks to libfuse
  • Add new callback to macFUSE.framework
  • Drop support for exchangedata(2) on macOS 11 (VOL_CAP_INT_EXCHANGEDATA).
  • Add support for renaming mounted volumes (VOL_CAP_INT_VOL_RENAME).
  • Add new callbacks to libfuse
  • Add new callback to macFUSE.framework
  • Clean up libfuse
  • Use DiskArbitration for unmounting volumes.
  • Remove deprecated non-portable function.
  • Add support for volume UUIDs (f_uuid). For each volume a UUID is generated at mount-time.
  • Drop support for deprecated "old style" mount process. Opening a /dev/macfuse device and passing the file descriptor to mount_macfuse is no longer supported ("old style"). mount_macfuse passes the file descriptor to the calling library over a socket ("new style", introduced in version 3.3.0).
  • Version the mount_macfuse socket interface used for returning the /dev/macfuse file descriptor to the calling library. When setting the environment variable _FUSE_COMMVERS to 2, the mount tool will pass the status of the mount(2) call back to the calling library over the _FUSE_COMMFD socket, before exiting.
  • Rename mount_macfuse environment variables _FUSE_CALL_BY_LIB (before MOUNT_OSXFUSE_CALL_BY_LIB) and _FUSE_DAEMON_PATH (before MOUNT_OSXFUSE_DAEMON_PATH).
  • Drop support for legacy ioctls FUSEDEVIOCGETHANDSHAKECOMPLETE (use _FUSE_COMMVERS=2 instead) and FUSEDEVIOCALTERVNODEFORINODE (use notification API instead).
  • The license has changed. Starting with the 4.0.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. This includes the automated download or installation in the context of commercial software. Please contact Benjamin Fleischer.

New in macFUSE 3.11.2 (Oct 5, 2020)

  • Improve macOS 11 compatibility by adding workaround for displaying user notifications. The function CFUserNotificationDisplayAlert() returns undocumented, backwards compatibility breaking response flags on macOS 11.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.11.1 (Oct 5, 2020)

  • Fix an issue on macOS 11, that can result in file system operations not being interruptible.
  • Improve macOS 11 compatibility by adding support for the new macOS version numbering scheme.
  • Improve macOS 11 compatibility by adding workarounds for the new KextManager implementation. The function KextManagerLoadKextWithURL() returns undocumented, backwards compatibility breaking status codes on macOS 11.
  • Improve macOS 11 compatibility by enabling the "Continue" button in the post install plugin, even if the kernel extension has not been loaded. On macOS 11 a restart might be required before the kernel extension can be loaded.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.11.0 (Jul 5, 2020)

  • Add experimental support for macOS 11.0 (Intel)
  • Fix an issue with the volicon module, that was introduced in version 3.10.4 and results in the volume icon not being visible. For details see #701.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.10.6 (Jun 9, 2020)

  • Fix an issue on macOS 10.15 that can result in terminated processes to turn into zombies, that still hold a lock to a file on the FUSE volume. As a result the volume cannot be unmounted.
  • Minor build script optimizations
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.10.5 (Jun 9, 2020)

  • Add support for Xcode 11.4 and 11.5
  • Delay ATTR_VOL_CAPABILITIES requests until the file system is fully initialized. This could lead to case-sensitive file systems being treated as case-insensitive, which in turn resulted in errors when changing the case of file names.
  • Fix a race condition when unmounting volumes. When mounting a volume the kernel issues a vfsop_getattr call to query the file system's attributes. At the same time the file system might be unmounted, causing the mount point data to be freed, although still being needed by the vfsop_getattr call.
  • Fix vnode lookup when invalidating cache. File IDs were cast to a 32 bit type in kernel space, which meant we lost the upper 32 bits of 64 bit file IDs. See #664 for details.
  • Use _DARWIN_FEATURE_64_BIT_INODE instead of _DARWIN_USE_64_BIT_INODEto check if support for 64 bit file IDs is enabled.
  • Remove external includes from libfuse to make the library independent from the rest of the code base.
  • Fix an error in the libfuse API documentation.
  • Update build script to generate dSYM files for debug builds.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.
  • Assets 6

New in macFUSE 3.10.4 (May 27, 2020)

  • Fix an incompatibility with third party kernel extensions, that were built using legacy versions of the macOS SDK. The incompatibility could result in undefined behavior, including kernel panics. See #652 for details.
  • Add support for installing FUSE for macOS without an active internet connection. When installing FUSE, Gatekeeper needs to verify the FUSE kernel extension is notarized. The notarization ticket is now stapled to the installer package. See #617 for details.
  • Add secure timestamp when signing the FUSE kernel extension in order to address a notarization warning.
  • Sign the installer plugin, that is responsible for getting user consent to load the FUSE kernel extension, to address a notarization warning.
  • Add support for build target variants to the build script. This allows building the same target, e.g. the kernel extension, multiple times during the overall build process without overwriting the previously built files.
  • Improve support for the asynchronous notarization workflow of the build script.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.10.3 (Dec 5, 2019)

  • Improve macOS 10.15 compatibility.
  • Fix an issue, that can trigger a kernel panic when mounting FUSE volumes with the local option and enabling Spotlight on the volume. For details see #624.
  • Improve performance of GETATTR file system operation for file systems based on the Objective-C FUSE framework.
  • Add support for 64 bit file system IDs (va_fsid64) on macOS 10.11 and later.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.10.2 (Jul 25, 2019)

  • Fixes a bug that can, in rare cases, trigger a kernel panic when reusing vnodes after renaming files.
  • The license has changed. Starting with the 3.10.0 release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.10.0 (Jul 25, 2019)

  • Add experimental support for macOS 10.15
  • The license has changed. Starting with this release, redistributions bundled with commercial software are not allowed without specific prior written permission. Please contact Benjamin Fleischer.

New in macFUSE 3.9.2 (Jun 17, 2019)

  • Always set sysctl tunables_initializedafter initializing the kernel extension's tunables to prevent FUSE from resetting them when mounting another volume. This fixes a bug introduced in version 3.9.1.
  • Initialize struct stat buffer in the fuse_lib_setattr_x() handler of libosxfuse. For details see osxfuse/fuse#14.

New in macFUSE 3.9.1 (Jun 17, 2019)

  • Ensure that the kernel extension's sysctl tunable, i.e. admin_group, are initialized before mounting the first file system. For details see #589.
  • Update ksurl for future releases of macOS, that support only x68_64 binaries. For details see #592.

New in macFUSE 3.9.0 (Jun 17, 2019)

  • Starting with this release, FUSE for macOS will be notarized by Apple and the release disk image signed, in addition to the installer itself.
  • The hardened runtime is enabled for all binaries shipping with FUSE for macOS. Please make sure to disable third party library validation when enabling the hardened runtime for your file system binary, if you are using any FUSE libraries or frameworks.
  • Add support for mount option noautonotify. If the mount option noautonotify is present, FUSE will not post file system change notifications automatically, in case remote changes are detected.
  • Invalidate file attributes after renaming files. An invalidate is required because the file's atime changes due to the rename. Without invalidating, stat(2) calls might return a wrong atime. For details see #568 and osxfuse/kext#12.
  • Drop Bridge Support for the FUSE framework.

New in macFUSE 3.8.3 (May 10, 2019)

  • Add support for reusing a vnode after renaming the corresponding file system object by updating the original vnode's parent and name after the rename is completed successfully. For details see #466, #553, and osxfuse/kext#11.
  • Work around a bug in ls when the volicon module is used. ls prints garbage data in case the extended attribute com.apple.FinderInfo is associated with the volume's root directory.
  • Fix bug in the build script to generate an autoinstaller rule for macOS 10.14

New in macFUSE 3.8.2 (Jul 18, 2018)

  • Add support for macOS 10.14 Beta 2
  • Minor code cleanup of kernel extension

New in macFUSE 3.8.0 (May 24, 2018)

  • Add support for DEBUG and DEVELOPMENT kernels. Previous versions of the FUSE kernel extension did only support RELEASE kernels
  • Add support for O_APPEND flag of open(2) when running in direct_io mode
  • Add high-level support for invalidating files
  • Fix file handle bug in exchangedata(2). Relying on vnode_update_identity() resulted in open file handles pointing to the wrong file after calling exchangedata(2)
  • Fix "vnode reclaim in progress" kernel panic
  • Purge vnode from namecache when a FUSE_NOTIFY_DELETE notification is received by the kernel extension and the file has been deleted and re-created in the meantime
  • Always use standard system font for about text in FUSE preference pane
  • To invalidate caches for a specific path and posting a file system event notifying subscribed processes, e.g. Finder, of remote file changes, call one of the following functions:
  • fuse_invalidate_path() for high-level FUSE file systems
  • -[GMUserFileSystem invalidateItemAtPath:error:] for Objective-C or Swift file systems
  • Do not post unnecessary file system events because they might trigger file system operations. Especially expensive readdir(3) calls should be avoided:
  • Do not post automatic file system events if we already know that we will not be able to detect remote changes reliably. Invalidating a vnode's cached attributes essentially means that we expect the attributes to have changed in user space.
  • Fix readdir(3) loop when using the high level volicon module. Addresses osxfuse/osxfuse#434.

New in macFUSE 3.8.0 Pre (May 22, 2018)

  • Add support for DEBUG and DEVELOPMENT kernels. Previous versions of the FUSE kernel extension did only support RELEASE kernels.
  • Add support for O_APPEND flag of open(2) when running in direct_io mode
  • Add high-level support for invalidating files
  • Fix file handle bug in exchangedata(2). Relying on vnode_update_identity() resulted in open file handles pointing to the wrong file after calling exchangedata(2).
  • Fix "vnode reclaim in progress" kernel panic.
  • Purge vnode from namecache when a FUSE_NOTIFY_DELETE notification is received by the kernel extension and the file has been deleted and re-created in the meantime.
  • Always use standard system font for about text in FUSE preference pane.
  • To invalidate caches for a specific path and posting a file system event notifying subscribed processes, e.g. Finder, of remove file changes call one of the following functions:
  • fuse_invalidate_path() for high-level FUSE file systems
  • -[GMUserFileSystem invalidateItemAtPath:error:] for Objective-C or Swift file systems
  • Do not post unnecessary file system events because they might trigger file system operations. Especially expensive readdir(3) calls should be avoided:
  • Do not post automatic file system events if we already know that we will not be able to detect remote changes reliably. Invalidating a vnode's cached attributes essentially means that we expect the attributes to have changed in user space.
  • Fix readdir(3) loop when using the high level volicon module. Addresses osxfuse/osxfuse#434.

New in macFUSE 3.7.1 (Sep 22, 2017)

  • Fix a bug in the high-level C API that resulted in the file system size being reported as 0 bytes when using file system modules.
  • Add support for building the mount helper with Xcode 9.
  • Add support for building the "Complete installation" installer plugin with Xcode 9.

New in macFUSE 3.7.0 (Sep 18, 2017)

  • Add support for file systems with more than UINT32_MAX blocks
  • Add support for posting file system events on OS X 10.11 and later
  • Add support for FUSE_NOTIFY_DELETE notifications
  • Fix kernel panic when processing FUSE_NOTIFY_INVAL_INODE notifications
  • Minor code cleanup of kernel extension

New in macFUSE 3.7.0 Pre (Sep 11, 2017)

  • Add support for file systems with more than UINT32_MAX blocks
  • Add support for posting file system events on OS X 10.11 and later
  • Add support for FUSE_NOTIFY_DELETE notifications
  • Fix kernel panic when processing FUSE_NOTIFY_INVAL_INODE notifications
  • Minor code cleanup of kernel extension

New in macFUSE 3.6.3 (Jul 19, 2017)

  • Fix volume icon fallback for file systems using the low-level FUSE API:
  • Modules are unsupported for low-level file systems, therefore falling back to the default volume icon resulted in unknown option iconpath=... errors. For details see osxfuse/osxfuse#394.

New in macFUSE 3.6.2 (Jul 17, 2017)

  • Minor cleanup of build scripts.
  • Add support for macOS 10.13 beta 3:
  • KextManagerLoadKextWithURL() now returns kOSKextReturnSystemPolicy instead of kOSKextReturnNotLoadable when trying to load a kernel extension that has not yet been allowed by the user.

New in macFUSE 3.6.2 Pre (Jul 12, 2017)

  • Add support for macOS 10.13 beta 3:
  • KextManagerLoadKextWithURL() now returns kOSKextReturnSystemPolicy instead of kOSKextReturnNotLoadable when trying to load a kernel extension that has not yet been allowed by the user.

New in macFUSE 3.6.1 Pre (Jul 10, 2017)

  • Fix a bug that prevented not-yet-alive volumes from being unmounted by calling fuse_unmount(). For details see osxfuse/osxfuse#332.
  • Fix FUSE device leak when serving multiple volumes from a single process by making sure FUSE device handles are being closed in case a volume is unmounted externally. For details see osxfuse/osxfuse#385.
  • Drop set-user-ID of mount helper before mounting a FUSE volume.
  • Display an alert in case loading the FUSE system extension has not been allowed, yet.
  • FUSE will display an alert containing instructions to allow the system extension and will post a notification letting the file system server know that the kernel extension could not be loaded.
  • Add retina version of logo in the FUSE Preference Pane. For details see osxfuse/osxfuse#388.
  • Add "Complete installation" installer section on macOS 10.13:
  • On macOS 10.13 users need to explicitly consent before new kernel extensions can be loaded. The installer plugin guides users through the steps required to allow loading the FUSE system extension before completing the installation.
  • Move volume icon to file system bundle:
  • FUSE will fall back to the default icon in case no volume icon was specified, when mounting the volume. In previous releases the fallback mechanism was only available to file systems linking against the FUSE framework.

New in macFUSE 3.6.0 (Jun 23, 2017)

  • Add experimental support for macOS 10.13. This fixes osxfuse/osxfuse#380.
  • Add experimental support for Xcode 9.0
  • Add experimental support for utime_omit_ok when building FUSE using the macOS 10.13 SDK. utime_omit_ok support is disabled in this release.
  • Fix an issue that can cause network file systems to be unmounted in case a file is removed and then re-created remotely.
  • If a file disappears "behind our back" the corresponding vnode is soft-revoked. If a new file appears with the same inode number we need to make sure not to reuse the revoked vnode. For details see osxfuse/kext#7.
  • Starting with version 3.6.0 official FUSE for macOS releases will be signed with the OpenPGP key 0x135F164B411BAA1F4A4BCD37617A3461802608A1.
  • After importing the key you can verify downloaded release files using the following commands:
  • $ gpg2 --verify osxfuse-3.6.0.sha256.sig
  • gpg: assuming signed data in 'osxfuse-3.6.0.sha256'
  • gpg: Signature made Tue Jun 13 00:14:24 2017 CEST
  • gpg: using RSA key 135F164B411BAA1F4A4BCD37617A3461802608A1
  • gpg: Good signature from "Benjamin Fleischer "
  • $ shasum -a 256 -c osxfuse-3.6.0.sha256
  • osxfuse-3.6.0.dmg: OK
  • osxfuse-3.6.0-debug.tbz: OK
  • This addresses osxfuse/osxfuse#376.
  • Minor code cleanup

New in macFUSE 3.6.0 Pre (Jun 15, 2017)

  • Add experimental support for macOS 10.13. This fixes osxfuse/osxfuse#380.
  • Add experimental support for Xcode 9.0.
  • Add experimental support for utime_omit_ok when building FUSE using the macOS 10.13 SDK. utime_omit_ok support is disabled in this release.
  • Fix an issue that can cause network file systems to be unmounted in case a file is removed and then re-created remotely. If a file disappears "behind our back" the corresponding vnode is soft-revoked. If a new file appears with the same inode number we need to make sure not to reuse the revoked vnode. For details see osxfuse/kext#7.
  • Starting with version 3.6.0 official FUSE for macOS releases will be signed with the OpenPGP key 0x135F164B411BAA1F4A4BCD37617A3461802608A1.
  • Minor code cleanup.

New in macFUSE 3.5.8 (Apr 24, 2017)

  • Fix return value of _PC_CASE_SENSITIVE pathconf(2) selector. Previous releases returned true even if the file system is case insensitive.

New in macFUSE 3.5.8 Pre (Apr 18, 2017)

  • Fix return value of _PC_CASE_SENSITIVE pathconf(2) selector. Previous releases returned true even if the file system is case insensitive.

New in macFUSE 3.5.7 Pre (Apr 15, 2017)

  • Fixed issues:
  • #365: Context with data file source for file/folder copy
  • #367: Media type files getting open callback on just folder browse question
  • #368: Problems with MAC OS 10.12.4 question
  • #369: Cocoa API for maximum file size returns incorrect value for FUSE filesystems
  • #370: ntfs-3g in 10.12.4 macOS
  • #371: itunes video safari
  • #372: Checking out support/osxfuse-3 branch fails

New in macFUSE 3.5.6 (Mar 22, 2017)

  • Fix race condition when using auto_xattr causing setxattr(2) to fail
  • The kernel's fallback mechanism for managing extended attributes is not thread-safe. To address the issue FUSE will no longer set the O_EXCL flag when creating Apple Double files. See osxfuse/osxfuse#354 for details.
  • Fix unresponsive 32 bit file systems on 64 bit Macs
  • FUSE uses a socket pair to pass the FUSE device file descriptor to the file system process. Control messages created using the CMSG macros in the Mac OS X 10.5 SDK are not properly aligned. This resulted in 32 bit file systems being unresponsive on 64 bit Macs.
  • Add support for preferences URL scheme. See osxfuse/prefpane#4 for details.
  • Fix macOS version check when installing FUSE for macOS

New in macFUSE 3.5.6 Pre (Mar 16, 2017)

  • Add support for preferences URL scheme. See osxfuse/prefpane#4 (https://github.com/osxfuse/osxfuse/issues/354) for details.
  • Fix macOS version check when installing FUSE for macOS.
  • Fix race condition when using auto_xattr causing setxattr(2) to fail:
  • The kernel's fallback mechanism for managing extended attributes is not thread-safe. To address the issue FUSE will no longer set the O_EXCL flag when creating Apple Double files. See osxfuse/osxfuse#354 for details.
  • Fix unresponsive 32 bit file systems on 64 bit Macs:
  • FUSE uses a socket pair to pass the FUSE device file descriptor to the file system process. Control messages created using the CMSG macros in the Mac OS X 10.5 SDK are not properly aligned. This resulted in 32 bit file systems being unresponsive on 64 bit Macs.

New in macFUSE 3.5.5 (Feb 6, 2017)

  • Add support for nanosecond time resolution. Creation, modification, … times of files can now be specified with nanosecond time resolution. This addresses osxfuse/osxfuse#346.
  • Improve compatibility with Finder
  • Do not block open(2) calls from syspolicyd (which is running as root) even if allow_root and allow_other are not set.
  • Improve compatibility with Finder
  • Do not block listxattr(2) calls by root even if allow_root and allow_other are not set. For details see fuse_vnop_getxattr().
  • Add support for building "release" target on macOS 10.12

New in macFUSE 3.5.5 Pre (Jan 31, 2017)

  • Add support for nanosecond time resolution. Closes osxfuse/osxfuse#346.
  • Improve compatibility with Finder
  • Do not block open(2) calls from syspolicyd (which is running as root) even if allow_root and allow_other are not set.
  • Improve compatibility with Finder
  • Do not block listxattr(2) calls by root even if allow_root and allow_other are not set. For details see fuse_vnop_getxattr().
  • Add support for building "release" target on macOS 10.12

New in macFUSE 3.5.4 (Dec 10, 2016)

  • Fall back to the setattr_x() callback if the file system does not implement the fsetattr_x() callback.
  • Fix bug in FUSE kernel extension that can trigger a kernel panic:
  • Release biglock in fuse_vnop_write() before calling uiomove(). Not doing so can trigger a kernel panic when using the direct_io mount-time option.
  • Fix rare file system deadlock when mounting a FUSE volume:
  • In rare cases mount(2) performs file system operations. Calling mount_osxfuse synchronously from libosxfuse could result file system deadlocks.

New in macFUSE 3.5.4 Beta (Dec 2, 2016)

  • Fix bug in FUSE kernel extension that can trigger a kernel panic
  • Release biglock in fuse_vnop_write() before calling uiomove(). Not doing so can trigger a kernel panic when using the direct_io mount-time option. For details see osxfuse/osxfuse#330.
  • Fix rare file system deadlock when mounting a FUSE volume
  • In rare cases mount(2) performs file system operations. Calling mount_osxfuse synchronously from libosxfuse could result file system deadlocks.
  • Fall back to the setattr_x() callback if the file system does not implement the fsetattr_x() callback.

New in macFUSE 3.5.3 (Oct 26, 2016)

  • Fix volume icon support on macOS 10.12
  • Fixes an incompatibility on macOS 10.12, resulting in the volume icon not being displayed in Finder, when using mount-time options volicon, local, and extended_security at the same time.
  • Shorten preference pane name from "FUSE for macOS" to "FUSE". Addresses osxfuse/osxfuse#317 and osxfuse/osxfuse#319.
  • Fix error when building the kernel extension loader with legacy SDKs
  • Starting with the Mac OS X 10.6 SDK libkern/OSKextLib.h tries to include System/libkern/OSReturn.h, which does not exist in the SDK. Apple fixed the issue in the OS X 10.11 SDK.
  • Fix generation of BridgeSupport files for Objective-C FUSE framework on Mac OS X 10.6. Addresses osxfuse/osxfuse#321.
  • Fix error when building FUSE mounter on Mac OS X 10.6. Addresses osxfuse/osxfuse#318.
  • Rename distribution package symlink
  • Append .pkg file extension to distribution package symlink in release disk image. This fixes osxfuse/osxfuse#322.
  • Improve readability of release disk image background

New in macFUSE 3.5.3 Pre (Oct 20, 2016)

  • Fix volume icon support on macOS 10.12
  • Fixes an incompatibility on macOS 10.12, resulting in the volume icon not being displayed in Finder, when using mount-time options volicon, local, and extended_security at the same time.
  • Shorten preference pane name from "FUSE for macOS" to "FUSE". Addresses osxfuse/osxfuse#317 and osxfuse/osxfuse#319.
  • Fix error when building the kernel extension loader with legacy SDKs
  • Starting with the Mac OS X 10.6 SDK libkern/OSKextLib.h tries to include System/libkern/OSReturn.h, which does not exist in the SDK. Apple fixed the issue in the OS X 10.11 SDK.
  • Fix generation of BridgeSupport files for Objective-C FUSE framework on Mac OS X 10.6. Addresses osxfuse/osxfuse#321.
  • Fix error when building FUSE mounter on Mac OS X 10.6. Addresses osxfuse/osxfuse#318.
  • Rename distribution package symlink
  • Append .pkg file extension to distribution package symlink in release disk image. This fixes osxfuse/osxfuse#322.
  • Improve readability of release disk image background

New in macFUSE 3.5.1 Pre (Sep 19, 2016)

  • Let mount_osxfuse load the FUSE kernel extension
  • When mounting a FUSE volume, libosxfuse used to be responsible for loading the kernel extension by calling load_osxfuse. Starting with this release mount_osxfuse will call load_osxfuse. This allows us to further decouple libosxfuse from the FUSE kernel extension.
  • Fix kernel extension loader error handling
  • libosxfuse is no longer linked against CoreFoundation.framework

New in macFUSE 3.5.0 (Sep 12, 2016)

  • Revise mount status detection in Objective-C FUSE framework to remove dependency on the deprecated function fuse_device_fd_np().
  • Minor optimizations and code cleanup.
  • Improve macOS 10.12 support by creating nonexistent mount points:
  • In macOS 10.12 the permissions of the root-owned /Volumes directory have changed from 1777 (rwxrwxrwt) to 1755 (rwxr-xr-t). As a result admin privileges are required to create mount points in /Volumes.
  • In order to allow non-admin users to mount FUSE volumes in /Volumes FUSE will create non-existent mount points automatically.
  • Deprecate non-portable libosxfuse functions:
  • File system binaries using these functions, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release.
  • Pass open flags to Objective-C FUSE framework based file systems:
  • The GMUserFileSystemOperations delegate method createFileAtPath:attributes:userData:error: has been deprecated in favor of the new method createFileAtPath:attributes:flags:userData:error:, that allows passing open flags to the file system delegate. See open(2) for details.
  • File systems implementing the old delegate method, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release.
  • Add support for querying file system operation context information for Objective-C FUSE framework based file systems:
  • The context of the current file system operation is only valid during a file system delegate callback.
  • Update Objective-C FUSE framework availability macros:
  • File system binaries built with version 3.5 of the Objective-C FUSE framework are not compatible with previous framework versions unless the following preprocessor macro is defined before importing the framework header.

New in macFUSE 3.5.0 Pre (Sep 7, 2016)

  • Improve macOS 10.12 support by creating nonexistent mount points
  • In macOS 10.12 the permissions of the root-owned /Volumes directory have changed from 1777 (rwxrwxrwt) to 1755 (rwxr-xr-t). As a result admin privileges are required to create mount points in /Volumes.
  • In order to allow non-admin users to mount FUSE volumes in /Volumes FUSE will create non-existent mount points automatically.
  • Deprecate non-portable libosxfuse functions
  • File system binaries using these functions, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release. The following functions have been deprecated:
  • fuse_os_version_major_np()
  • fuse_device_fd_np()
  • fuse_mountpoint_for_fs_np()
  • Revise mount status detection in Objective-C FUSE framework to remove dependency on the deprecated function fuse_device_fd_np()
  • Pass open flags to Objective-C FUSE framework based file systems
  • The GMUserFileSystemOperations delegate method createFileAtPath:attributes:userData:error: has been deprecated in favor of the new method createFileAtPath:attributes:flags:userData:error:, that allows passing open flags to the file system delegate. See open(2) for details.
  • File systems implementing the old delegate method, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release.
  • Add support for querying file system operation context information for Objective-C FUSE framework based file systems
  • The context of the current file system operation is only valid during a file system delegate callback. The NSDictionary returned by +[GMUserFileSystem currentContext] contains the following keys:
  • kGMUserFileSystemContextUserIDKey
  • kGMUserFileSystemContextGroupIDKey
  • kGMUserFileSystemContextProcessIDKey
  • See GMUserFileSystem.h for details.
  • Update Objective-C FUSE framework availability macros
  • File system binaries built with version 3.5 of the Objective-C FUSE framework are not compatible with previous framework versions unless the following preprocessor macro is defined before importing the framework header.
  • #define GM_VERSION_MIN_REQUIRED GM_OSXFUSE_2
  • Minor optimizations and code cleanup

New in macFUSE 3.4.2 Pre (Aug 9, 2016)

  • Update libosxfuse from version 2.9.6 to 2.9.7:
  • Fix ambigious condition
  • Wait until daemon child process is ready
  • Fix ".." path handling for delete lookups:
  • Make sure to call fuse_vget_i() only after performing a FUSE_LOOKUP request. Calling it after a FUSE_GETATTR request will lead to a kernel panic.
  • Resolves osxfuse/osxfuse#298
  • Lock parent directory when removing entry:
  • When removing a directory entry HFS and NFS lock the vnode that is to be removed and its parent directory vnode. However, Apple's fallback implementation for non-thread-safe 32 bit file systems only locks the directory entry vnode.
  • The osxfuse locking mechanism is inspired by Apple's fallback implementation. While it is not strictly required to lock the parent directory vnode as well, it seems to be good practice to do so.
  • Addresses osxfuse/osxfuse#299

New in macFUSE 3.4.1 Pre (Jul 25, 2016)

  • Remove obsolete task working set cache handling
  • When mounting a volume with the noubc option the kernel extension used to set the noexec flag for the mount in order to also disable the task working set page cache on disk. However, since the task working set mechanism has been removed in Mac OS X 10.5 the noexec flag is no longer needed.
  • Ignore vnode name cache hits when creating a file
  • See osxfuse/kext#4 for details.
  • Always set O_EXCL for FUSE_CREATE requests
  • The macOS kernel expects all create calls to return EEXIST in case the file already exists, regardless of whether O_EXCL was specified or not.
  • Resolves osxfuse/osxfuse#209
  • Add mount-time option excl_create
  • If the mount-time option excl_create is specified, the O_EXCL flag will only be set for "truly" exclusive creates, i.e. create calls for which the initiator explicitly set the O_EXCL flag. This allows distributed file systems to determine whether or not to acquire a potentially costly lock to prevent remote create races. Nonetheless, the file system still needs to make sure that there are no local create races.
  • Fix mount-time option parsing
  • Fixes the following error when using the daemon_timeout mount-time option in combination with a volume name containing the word "union".
  • mount_osxfuse: invalid value for argument daemon_timeout
  • Don't kill the file system on short reads
  • A FUSE user space server receives file system requests from the FUSE device by allocating some memory and calling read(2). Obviously, the request must fit into that buffer. If it doesn't, we used to kill the file system.
  • Linux FUSE handles short reads differently. Instead of killing the file system it returns EIO or E2BIG (in case of FUSE_SETXATTR requests). This change aims to replicate the Linux behavior on macOS.
  • Addresses osxfuse/osxfuse#293
  • Remove callbacks for interrupted tickets
  • Make sure to remove a ticket's callback when marking it as answered. Otherwise the ticket will be retained by the callback queue until the volume is unmounted.
  • Minor optimizations and code cleanup
  • Switch to secure website URL

New in macFUSE 3.4.0 Pre (Jun 16, 2016)

  • Change name to FUSE for macOS
  • Add experimental support for macOS 10.12 and Xcode 8
  • Disable Objective-C garbage collection for FUSE preference pane
  • Using garbage collection is no longer supported on macOS 10.12. However, on Mac OS X 10.6 and 10.7 all 64-bit preference panes are required to use garbage collection. 32-bit preference panes may use manual reference counting.
  • As a result the System Preferences application will need to relaunch on Mac OS X 10.6 and 10.7 in 32-bit mode to run the FUSE preference pane. For details see Apple's Preference Pane Programming Guide.
  • Modernize FUSE kernel extension Xcode project
  • Clean up license

New in macFUSE 3.3.3 Pre (Jun 4, 2016)

  • Fix invisible volume on OS X 10.8 and earlier:
  • Wait for FUSE volume to be initialized instead of faking vnop_getattr for the volume's root vnode. Faking attributes results in Finder not showing the mounted volume on OS X 10.8 and earlier.

New in macFUSE 3.3.2 Pre (May 26, 2016)

  • Optimize vnop_readdir mode VNODE_READDIR_EXTENDED in kernel extension:
  • Our user space buffer for VNODE_READDIR_EXTENDED needs to be smaller since re-packing will expand each struct fuse_dirent.
  • The worse case (when the name length is 8) corresponds to a struct direntry size of 40 bytes (8-byte aligned) and a struct fuse_dirent size of 32 bytes (8-byte aligned). So having a buffer that is 4/5 the size will prevent us from reading more than we can pack.

New in macFUSE 3.3.1 Pre (May 23, 2016)

  • Fix a bug in autoinstaller that resulted in autoinstaller being unable to detect if FUSE for OS X is installed. This addresses issue osxfuse/osxfuse#284.
  • Minor code clean up.

New in macFUSE 3.3.0 Pre (May 22, 2016)

  • Update libosxfuse to from version 2.9,5 to 2.9.6
  • Update MacFUSE compatibility layer to from version 2.7.4 to 2.7.5
  • Use weak linking to make OSXFUSE.framework backward compatible
  • When a symbol in a framework is defined as weakly linked, the symbol does not have to be present at runtime. This allows taking advantage of new features while still supporting older versions of the framework.
  • To build a file system that still supports osxfuse 2.x define the following preprocessor macro before importing the framework.
  • #define GM_VERSION_MIN_REQUIRED 20000
  • Make sure to check for the existence of weakly linked symbols before using them, otherwise the file system might crash.
  • Bump number of osxfuse devices to 64. This addresses osxfuse/osxfuse#277.
  • Lower minimum file system block size to 128 bytes. This addresses Finder showing wrong sizes through statfs.
  • Increase maximum file system block size from MAXPHYS (128 KiB) to MAXBSIZE (1 MiB)
  • Clean up vnop_exchange operation in kernel extension
  • Use vnode_update_identity() instead of fuse_kludge_exchange() for updating the vnodes' names and parents. This renders fuse_kludge_exchange() obsolete.
  • Implement new style mount process
  • When mounting a FUSE volume on Linux, fusermount opens the FUSE device and passes the file descriptor back to libfuse.
  • However, on OS X libosxfuse used to be responsible for locating a free FUSE device, opening it, and then passing the file descriptor to mount_osxfuse. For this to work libosxfuse needs to be aware of low level implementation details like the number of registered FUSE devices.
  • In order to decouple libosxfuse from the FUSE kernel extension the mount process has been revised to match FUSE on Linux. mount_osxfuse will locate a free FUSE device, open it, and then pass the file descriptor back to libosxfuse.
  • Update mount_osxfuse environment variables
  • Remove unused MOUNT_FUSEFS_SAFE
  • Rename MOUNT_FUSEFS_CALL_BY_LIB MOUNT_OSXFUSE_CALL_BY_LIB
  • Refactor kernel extension loader
  • Remove unused FUSEDEVIOCSETIMPLEMENTEDBITS ioctl

New in macFUSE 3.2.0 Pre (Feb 15, 2016)

  • Update libosxfuse to version 2.9.5:
  • Fix possible memory leak
  • Minor under-the-hood clean up
  • Disable CUSE support in libosxfuse:
  • The osxfuse kernel extension does not support the CUSE protocol.
  • Send interrupt request on daemon timeout:
  • Send an interrupt request to give the file system daemon a chance to handle the timeout. If the daemon does not respond to the interrupt request within daemon_timeout seconds, the file system will be marked dead. Previous version of osxfuse deadened the volume right away without giving the daemon proper warning.
  • Be more verbose in case vnop_readdir fails:
  • Finder and ls have the nasty habit of ignoring errors returned by vnode operation readdir. This might result in files missing from directory listings or directories appearing empty, even though they are not. One way to trigger this issue is returning a file name longer than 255 bytes in the the FUSE_READDIR callback. Starting with this release readdir errors are logged in system.log.

New in macFUSE 3.1.0 Pre (Jan 18, 2016)

  • Do no longer use the first free slot when registering osxfuse character devices. In practice there are kernel internal devices that use absolute index values, which will stomp on free-slot based assignments that happen before them. Slot 12 is considered a safe starting index for Mac OS X 10.5 to 10.7, 24 for OS X 10.8 and later. See bsd/kern/bsd_stubs.c for details.
  • Update MacFUSE compatibility layer from FUSE version 2.7.3 to 2.7.4.
  • Add instructions for using Homebrew instead of MacPorts to install the required third-party build tools autoconf, automaker, libtool, and gettext.
  • Improve compatibility with Finder on OS X 10.11:
  • Unless allow_root or allow_other is set we limit vnode operations to the user that mounted the file system. Starting with OS X 10.11 DesktopServicesHelper, which is running as root, calls access(2) on behalf of Finder when trying to delete a directory. Blocking this request results in Finder aborting the delete process. Therefore we are no longer enforcing allow_root or allow_other for vnop_access.
  • Fix mount-init-unmount race condition:
  • The volume might be unmounted before we are able to complete the asynchronous FUSE_INIT process. This could result in a "trying to interlock destroyed mutex" kernel panic.
  • Fix mount-init-abi race condition:
  • Wait until the FUSE session is initialized before generating user space requests. We do not know which ABI version to use until the initialization process is complete.
  • Update pkg-config files:
  • Remove -pthread option from Libs line in osxfuse.pc and macfuse.pc as it is not required on OS X and causes issues when using clang. See osxfuse/osxfuse#256 for details.
  • Remove Libs.private line from osxfuse.pc. libosxfuse does not support static linking.

New in macFUSE 2.8.2 (Oct 26, 2015)

  • Fixes:
  • Improved compatibility with Finder. Starting with OS X 10.9 syspolicyd (which is running as root) calls getxattr(2) when opening items in Finder. Blocking these calls results in Finder displaying an error message. Therefore we are no longer blocking getxattr(2) calls by root even if allow_root or allow_other is not set.
  • Tracked as issue #162: "Preview sets quarantine attribute on all files it opens on an SSHFS volume."
  • Fixed select(2) for FUSE devices on OS X 10.11. The issue was caused by a kernel private struct that has changed between OS X 10.10 and 10.11.

New in macFUSE 2.8.1 (Sep 25, 2015)

  • New Features:
  • Added support for Xcode 7.1
  • Fixes:
  • Improved compatibility with Finder on OS X 10.11. Starting with OS X 10.11 DesktopServicesHelper, which is running as root, calls stat(2) on behalf of Finder when trying to delete a directory. Blocking this request would result in Finder aborting the delete process.

New in macFUSE 2.8.0 (Jun 15, 2015)

  • New Features:
  • Added experimental support for OS X El Capitan
  • Added support for Xcode 6.3, 6.4 and 7.0

New in macFUSE 2.7.5 (Feb 7, 2015)

  • Changes - Minor build script optimizations
  • Fixes - Fixed an attribute caching bug when mounting a volume with a very high attribute timeout (mount-time option attr_timout). Tracked as issue #192: "With attr_timeout all files are empty at first read"

New in macFUSE 2.7.4 (Jan 8, 2015)

  • Fixes:
  • Restored compatibility with G5-powered (PPC64) Macs running Mac OS X 10.5. Tracked as issues #121: "Doesn't work in PPC Leopard server!?" and #186: "Fixes for building and running on Leopard"
  • Fixed an issue that can cause hangs in case a FUSE file system truncates write requests without returning an error code. Tracked as issues #187: "Truncated direct_io writes cause uninterruptible hangs" and #2: "Fixes hangs on truncated writes"
  • Addressed an inconsistency in OSXFUSE.framework. File systems build on top of the Objective-C framework do no longer ignore the NSFileSize attribute for directories returned by the attributesOfItemAtPath:userData:error: callback. Tracked as issue #3: "Set st_size for directories too"

New in macFUSE 2.7.3 (Dec 2, 2014)

  • New Features:
  • Added support for Xcode 6.2
  • Fixes:
  • Fixed race condition that can cause data corruption in case the unified buffer cache (UBC) is disabled.
  • If a file vnode is being looked up while another thread is extending the file, the lookup thread might override the file's new extended size. As a result the write operation might fail with EINVAL or the file's content might become corrupted.
  • Tracked as issue #179: "Data corruption in files with size not aligned to 4K"

New in macFUSE 2.7.2 (Oct 20, 2014)

  • New Features:
  • Added basic support for downgrading the upcoming FUSE for OS X 3.x to version 2.7.2 without having to uninstall version 3.x first.

New in macFUSE 2.7.1 (Sep 24, 2014)

  • New Features:
  • Added support for Xcode 6.1
  • Added support for case insensitive file systems based on OSXFUSE.framework. By default all FUSE volumes are treated as case sensitive. See LoopbackFS commit 089a847 for details. Please note that disabling support for case sensitive names does not make a FUSE volume case insensitive. It only tells the system that the volume should be treated as such.
  • Fixes:
  • Fixed an incompatibility with Comodo Antivirus. In rare cases Comodo Antivirus might trigger a kernel panic when a FUSE daemon becomes unresponsive and the volume is being unmounted.

New in macFUSE 2.7.0 (Jul 2, 2014)

  • New Features:
  • Added experimental support for OS X Yosemite
  • Added support for Xcode 6.0
  • Fixes:
  • Re-enabled Objective-C garbage collection support for preference pane. 64-bit preference panes are required to support Objective-C garbage collection on Mac OS X 10.6. This fixes issue #131 "upgraded to 2.6.4 - pref pane is 32-bit all of a sudden" reported by @tessus

New in macFUSE 2.7.0 Dev (Jun 10, 2014)

  • New Features:
  • Added experimental support for OS X Yosemite
  • Added support for Xcode 6.0
  • Fixes:
  • Re-enabled Objective-C garbage collection support for preference pane. 64-bit preference panes are required to support Objective-C garbage collection on Mac OS X 10.6. This fixes issue #131 "upgraded to 2.6.4 - pref pane is 32-bit all of a sudden" reported by @tessus

New in macFUSE 2.6.4 (Apr 2, 2014)

  • New Features:
  • Added support for case insensitive FUSE file systems. The macro FUSE_ENABLE_CASE_INSENSITIVE can be used in the FUSE init callback to mark the volume as case insensitive. See loopback.c (commit d9a5986) for details.
  • Please note that FUSE_ENABLE_CASE_INSENSITIVE does not make the FUSE volume case insensitive. It only tells the system that the volume should be treated as such.
  • Changes:
  • Added support for Xcode 5.1
  • Xcode 5.1 does no longer support Objective-C Garbage Collection. Therefore Garbage Collection support has been disabled for OSXFUSE.framework. As a result the framework is now incompatible with applications using Objective-C Garbage Collection.

New in macFUSE 2.6.3 (Mar 31, 2014)

  • New Features:
  • Added support for Xcode 5.1
  • Added support for case insensitive FUSE file systems. The macro FUSE_ENABLE_CASE_INSENSITIVE can be used in the FUSE init callback to mark the volume as case insensitive. See loopback.c (commit d9a5986) for details.
  • Please note that FUSE_ENABLE_CASE_INSENSITIVE does not make the FUSE volume case insensitive. It only tells the system that the volume should be treated as such.
  • Changes:
  • Xcode 5.1 does no longer support Objective-C Garbage Collection. Therefore Garbage Collection support has been disabled for OSXFUSE.framework. As a result the framework is now incompatible with applications using Objective-C Garbage Collection.
  • Minor code cleanup in the Objective-C FUSE framework.

New in macFUSE 2.6.2 (Nov 25, 2013)

  • New Features:
  • Improved support for Xcode 5.0.1 and newer
  • Fixes:
  • Fixed a bug in the Objective-C framework, that could cause a file system crash when creating a directory fails, i.e. when the file system delegate returns an error in createDirectoryAtPath:attributes:error:. Tracked as issue #96: "Invalid input parameter for createDirectoryAtPath:attributes:error:"
  • Addressed issue #74: "cannot copy file system bundle to destination." by using /bin/cp instead of cp from ${PATH}
  • When uninstalling, check whether the FUSE for OS X preference pane has actually been installed before trying to uninstall it.
  • Replaced Package Maker app with pkgbuild(1). The Package Maker app has been deprecated since Xcode 4.6 and has been removed from the Auxiliary Tools package for Xcode.
  • Added missing fuse.pc symlink for build target homebrew. It is needed for compatibility with Linux FUSE file systems and points to osxfuse.pc.

New in macFUSE 2.6.2 Dev (Nov 14, 2013)

  • New Features:
  • Improved support for Xcode 5.0.1 and newer
  • Fixes:
  • Fixed a bug in the Objective-C framework, that could cause a file system crash when creating a directory fails, i.e. when the file system delegate returns an error in createDirectoryAtPath:attributes:error:. Tracked as issue #96: "Invalid input parameter for createDirectoryAtPath:attributes:error:"
  • Addressed issue #74: "cannot copy file system bundle to destination." by using /bin/cp instead of cp from ${PATH}
  • When uninstalling, check whether the FUSE for OS X preference pane has actually been installed before trying to uninstall it.
  • Replaced Package Maker app with pkgbuild(1). The Package Maker app has been deprecated since Xcode 4.6 and has been removed from the Auxiliary Tools package for Xcode.
  • Added missing fuse.pc symlink for build target homebrew. It is needed for compatibility with Linux FUSE file systems and points to osxfuse.pc.

New in macFUSE 2.6.1 (Aug 21, 2013)

  • New Features:
  • Improved support for OS X 10.9
  • Smarter discovery of the "Developer ID Application" and "Developer ID Installer" signing certificates in the user's keychain when building FUSE for OS X. Use the following build script options to specify different certificates:
  • Added support for building and installing FUSE for OS X on Mac OS X 10.6 to 10.8 using Homebrew, a package manager for OS X. Tracked as issue #1: "allow to define install prefix manually" and pull request #21318: "osxfuse 2.6.1"
  • Please note that as of writing this the pull request is still being reviewed. Until it is accepted, osxfuse can be installed by running the following command:
  • brew install https://raw.github.com/bfleischer/homebrew/osxfuse/Library/Formula/osxfuse.rb
  • Fixes:
  • Fixed a bug in the build script, that resulted in the FUSE for OS X 2.6.0 installer package not being singned.
  • Fixed various issues with option parsing in the build script.

New in macFUSE 2.6.1 Dev (Aug 12, 2013)

  • New Features:
  • Improved support for OS X 10.9
  • Smarter discovery of the "Developer ID Application" and "Developer ID Installer" signing certificates in the user's keychain when building FUSE for OS X.
  • Added support for building and installing FUSE for OS X on Mac OS X 10.6 to 10.8 using Homebrew, a package manager for OS X. Tracked as issue #1: "allow to define install prefix manually" and pull request #21318: "osxfuse 2.6.1". Please note that as of writing this the pull request is still being reviewed. Until it is accepted, osxfuse can be installed by running the following command: brew install https://raw.github.com/bfleischer/homebrew/osxfuse/Library/Formula/osxfuse.rb
  • Fixes:
  • Fixed a bug in the build script, that resulted in the FUSE for OS X 2.6.0 installer package not being singned.
  • Fixed various issues with option parsing in the build script.

New in macFUSE 2.6.0 (Aug 12, 2013)

  • New Features:
  • Added experimental support for OS X 10.9 (Developer Preview Build 13A476u). Tracked as issue #88: "OSXFUSE refuses to install on OS X 10.9 Mavericks"
  • Added support for Xcode 4.6 on OS X 10.7 and 10.8.
  • Added support for Xcode 5.0 and Apple LLVM 5.0 on OS X 10.8.

New in macFUSE 2.5.6 (May 10, 2013)

  • New Features:
  • Added support for fcntl F_FULLFSYNC. See issue #79: "Calling fcntl(..., F_FULLFSYNC) on osxfuse volume returns "Invalid argument" error"
  • Fixes:
  • Addressed an issue, that could in rare cases lead to a file system deadlock and cause a kernel panic when using mount-time option nosyncwrites. The issue could be triggered by flushing the kernel's file cache.
  • Fixed a bug, that could trigger a kernel panic when creating a new file on a distributed file system failed. Only FUSE file system implementing the FUSE_CREATE call were affected by this issue. Tracked as issue #84: "kernel panic related to fuse_ipc.h"
  • Plugged a memory leak, that occurred when looking up a file or directory fails because it does not exist. The issue is fixed by properly releasing the otherwise leaked ticket in fuse_vnop_lookup.
  • Plugged a memory leak, that occurred when setting an extended attribute failed because of its size. The leak was caused by not releasing the ticket in case fdisp_make_vp_canfail failed.
  • Fixed a race condition, that could in rare cases trigger a "Data access" kernel panic when writing to a file.

New in macFUSE 2.5.5 (Apr 1, 2013)

  • Fixed a race condition, that can trigger a kernel panic when unmounting a FUSE volume. Tracked as issue #77: "Kernel Panic iMac27 10.8.2 - Wuala & Osx Fuse"
  • Fixed a bug, that can cause a kernel panic when function fuse_purge_np is called from the user space file system implementation. Reported by meg75: "Is there an osxfuse equivalent for the fuse call fuse_lowlevel_notify_inval_entry"

New in macFUSE 2.5.3 Dev (Oct 26, 2012)

  • New Features:
  • Added support for Retina volume icons.
  • Fixes:
  • Fixed a race condition introduced in OSXFUSE 2.5.2, that can result in unmounting a FUSE volume taking up to several minutes in some cases. Reported by Daniel Iwan: "Unmounting issues in v2.5.2"
  • Fixed a bug, that can cause FUSE file systems to crash when reclaiming a vnode after making a hard link to the corresponding file. Error message returned by FUSE server: Assertion failed: (node->nlookup >= nlookup)
Tracked as issue #55: "OSXFUSE crashes/unmounts during rsync backup on encrypted directory (encfs)"
  • Fixed a bug, that prevents file nodes from being freed by the FUSE server when the corresponding vnodes are being reclaimed by OS X. This could result in higher than normal memory usage in case a great number of files is being created on a FUSE volume.
  • Addressed an issue, that can trigger an "unknown option" error when using mount time option volicon in combination with option modules
  • Fixed a bug in detecting whether a custom volume icon has been specified when mounting a FUSE file system through OSXFUSE.framework. In some cases this issue prevented file systems from mounting.
  • Fixed a bug, that can trigger a kernel panic on Mac OS X 10.5 (PowerPC) when entering a vnode into the name cache or purging it from the cache.

New in macFUSE 2.5.2 (Sep 20, 2012)

  • Fixes:
  • Fixed an issue, that can trigger a kernel panic in case decrementing the iocount of a vnode results in the vnode being reclaimed. Reported by Daniel Iwan: "Panic on Lion with OSXFUSE 2.5.1"
  • Fixed a bug, that can cause reading from a FUSE device to block although system call select signaled that the read would be non-blocking.
  • Addressed an issue, that can trigger a segmentation fault in the user space file system process when unmounting a FUSE volume. No further messages are sent to the server after the session has been destroyed by sending message FUSE_DESTROY.
  • Unmounting a FUSE volume does no longer signal VQ_DEAD, which should only be signaled in case the file system died unexpectedly.
  • Fix a bug in file system operation SETATTR, that resulted in a file's type not being passed to the FUSE server. Patch by Anatol Pomozov.
  • Changes:
  • Various code improvements resulting in cleaner code. Most of these patches were authored by Anatol Pomozov.

New in macFUSE 2.5.2 Dev (Sep 14, 2012)

  • Fixes:
  • Fixed an issue, that can trigger a kernel panic in case decrementing the iocount of a vnode results in the vnode being reclaimed. Reported by Daniel Iwan: "Panic on Lion with OSXFUSE 2.5.1"
  • Fixed a bug, that can cause reading from a FUSE device to block although system call select signaled that the read would be non-blocking.
  • Addressed an issue, that can trigger a segmentation fault in the user space file system process when unmounting a FUSE volume. No further messages are sent to the server after the session has been destroyed by sending message FUSE_DESTROY.
  • Unmounting a FUSE volume does no longer signal VQ_DEAD, which should only be signaled in case the file system died unexpectedly.
  • Fix a bug in file system operation SETATTR, that resulted in a file's type not being passed to the FUSE server. Patch by Anatol Pomozov.
  • Changes:
  • Various code improvements resulting in cleaner code. Most of these patches were authored by Anatol Pomozov.

New in macFUSE 2.5.1 Dev (Aug 11, 2012)

  • New Features:
  • Added support for Xcode 4.5
  • Fixes:
  • Addressed compatibility issues when building OSXFUSE on OS X 10.8.
  • Fixed a memory management bug in handling of FUSE FSYNC requests, that can trigger a kernel panic when unmounting FUSE volumes. Tracked as issue #48: "Mountain Lion kernel panics with 2.5.0 (unmounting or shutting down VM)"
  • Fixed a bug, that can trigger a kernel panic when performing various file system operations. Tracked as issue #49: "Mountain Lion kernel panics with 2.5.0 (OSXFUSE: Attempted to lock max-locked recursive lock)".

New in macFUSE 2.5.0 (Aug 2, 2012)

  • New Features:
  • Full support for OS X 10.8.
  • Full support for Xcode 4.4 on OS X 10.7 and 10.8. See README.md for more information on building OSXFUSE.
  • Implemented FUSE device operation select. Using system call select allows waiting for FUSE requests sent from the kernel extension to a user space FUSE daemon in a very efficient manner while handling other events in the same thread. Patch by Thomas Nordin.
  • Fixes:
  • Fixed a bug, that could trigger a kernel panic when performing file system operations on a dying FUSE volume. Reported by Andreas Guðmundsson: "panic in fuse_vnop_mmap".
  • Fixed an issue where user space FUSE file systems, that are being unmounted, do not receive reclaim messages before receiving message FUSE_DESTROY. Patch by Anatol Pomozov.
  • Fixed a bug, that can trigger a kernel panic when reading or writing files on a FUSE volume. Tracked as issue #35: "Kernel panic on osx 10.7".
  • Fixed an issue that can prevent a multi-threaded FUSE file systems from terminating when receiving singal SIGINT (Ctrl+C). Based on a patch by Anatol Pomozov.
  • Addressed an issue, that could result in unexpected behavior of Objective-C FUSE file systems using OSXFUSE.framework. This issue was caused by using a non thread safe file manager instance. Tracked as issue #37: "ObjC framework should avoid [NSFileManager defaultManager]"
  • Fixed a bug, that prevented user root from accessing files on a FUSE volume despite mount-time option allow_root being set. The issue is caused by an inconsistent permission check in file system operation access. Patch by Anatol Pomozov.
  • Fixed an issue, that triggered a kernel panic on OS X 10.8 in case of a failed mount attempt of a FUSE volume. Tracked as issue #38: "sshfs-2.4.1 / osxfuse-2.4.2 kernel panic when a remote directory is mounted twice", issue #43: Mountain Lion kernal panic and issue #44: "Mountain Lion kernel panics".
  • Addressed an issue that can trigger a kernel panic in tight mount/umount cycles on Mac OS X 10.5 and later. Bug reported by Zach Marquez: "Kernel panic in tight mount/unmount loop"
  • Changes:
  • Various under-the-hood improvements and code cleanups.

New in macFUSE 2.4.2 (Jun 10, 2012)

  • Addressed an issue where FUSE file system binaries cannot be executed due to the access permissions for directory /usr/local/lib having been altered by a third party. Issue reported by Peter Stegemann.
  • Fixed a bug, that prevented non-blocking reads from a FUSE device /dev/osxfuse[0-9]+. Bug reported by Nafid Haque: "How to do a non-blocking read".

New in macFUSE 2.4.0 (May 30, 2012)

  • New Features:
  • Added experimental support for OS X 10.8.
  • Added support for Xcode 4.3. The following additional packages need to be installed in order to build OSXUFSE using Xcode 4.3: Command Line Tools for Xcode, Auxiliary Tools for Xcode, Autotools, and Libtool. See README.md for more information.
  • Fixes:
  • Resolved an issue, that could trigger a vnode reclaim in progress kernel panic on Mac OS X 10.5. Tracked as issue #16: "vnode reclaim in progress - NTFS".
  • Fixed a bug in the implementation of the exchange file system operation, that could cause data loss or corruption on Mac OS X 10.7 or later.
  • Resolved several issues, that were caused by using the build-time macro __FreeBSD__ when building libosxfuse bindings for various languages. Tracked as issues #17: "osxfuse.pc contains -D__FreeBSD__=10" and #25: "sys/statfs.h included but unnecessary".
  • Fixed an issue, that could result in FUSE command line options being ignored or overwritten when mounting a FUSE volume on 64-bit Macs.
  • Fixed an issue, that could cause OS X to run out of I/O buffer space and become unresponsive in rare cases.
  • Fixed several issues, that could trigger a kernel panic when interrupting file system operations on a FUSE volume.
  • Fixed a bug, that was responsible for crashing the Plan 9 FUSE file system (9pfuse) when writing on the mounted FUSE volume. Tracked as issue #28: "Bad length passed to client process in write operation".
  • Fixed a bug in the updater tool, that caused developer releases not appearing as an update option.
  • Changes:
  • Use the FUSE for OS X logo as fallback volume icon, in case a file system linked against OSXFUSE.framework does not supply a custom volume icon (option volicon). Tracked as issue #27: "Include default volume icon as framework resource".
  • Include DWARF version 2 debug information for libosxfuse and libmacfuse to make debugging FUSE file systems easier. The debug symbol bundles are stored in OSXFUSE.framework/Resources/Debug.
  • Various under-the-hood improvements like enabling support for hidden files on FUSE volumes and case-sensitive file systems.

New in macFUSE 2.3.9 (Feb 20, 2012)

  • New Features:
  • Added support for building PowerPC file systems on Mac OS X 10.6 and 10.7, if an appropriate version of Xcode is installed (e.g. Xcode 3.2.6). Tracked as issue #12: "OSXFUSE 2.3.4 has no ppc compiled in".
  • Fixes:
  • Fixed a race condition, that would lead to a file system deadlock. The deadlock could be triggered by a read/write operation in fuse_internal_strategy on a file, that another thread had just created (but not opened, yet).
  • Fixed a deadlock in fuse_vnop_mmap that affected certain file systems (i. e. MooseFS). It could by triggered by the file operation VNOP_MMAP which tries to authorize the action on the vnode corresponding to the file. In case the authorization is not already cached VNOP_GETATTR is called which caused the deadlock.
  • Fixed an issue that could trigger a vnode reclaim in progress kernel panic on 32-bit kernels of Mac OS X 10.6 and later. Tracked as issue #16: "vnode reclaim in progress - NTFS".
  • Fixed an issue where Finder would report a wrong file size for files on sparse FUSE file systems.
  • Fixed an issue that caused Finder on Mac OS X 10.6 and later to not display updated free/used space values for FUSE volumes. This is done by enabling capability VOL_CAP_FMT_FAST_STATFS by default and implementing the mount-time option slow_statfs. This option is interesting for network file systems where calls to statfs are expensive.
  • Changes:
  • Set VFS I/O attributes for mount point when mounting a FUSE file system. This overrides system default values with the actual I/O size used by OSXFUSE resulting in very significant speed improvements. Based on a patch by Debabrata Banerjee.

New in macFUSE 2.3.8 (Dec 19, 2011)

  • New Features:
  • Added support for Xcode 4.2.
  • Fixes:
  • Fixed a race condition, that affected only 64-bit kernels and would lead to a file system deadlock. The deadlock could be triggered by trying to remove a non-empty directory. The system daemon fseventsd would eventually lock the whole file system while the "remove" operation is in progress and go to sleep indefinitely, triggering a deadlock. (Reported by Daniel Iwan)
  • Fixed a race condition, that affected only 64-bit kernels and would lead to a file system deadlock. The deadlock could be triggered by a LOOKUP operation that locks the whole file systems and goes to sleep, waiting for other file system operations to complete.
  • Fixed a race condition, that would lead to a file system deadlock. The deadlock could be triggered by a thread trying to open a file, that another thread had just created (but not opened, yet). (Thanks to Erik Larsson)
  • Changes:
  • Due to the fact that gcc-4.2 has been discontinued with the release of Xcode 4.2, default to llvm-gcc-4.2 instead for Mac OS X 10.6 and 10.7 builds.
  • The file system locking mechanism, that had been introduced to make osxfusefs thread-safe, is now used under 32-bit kernels and 64-bit kernels. It takes the place of the fallback locking mechanism for non-thread-safe file systems of the 32-bit kernel.