# FSKit Module Installation Research Report ## Research Date: 2026-05-28 ## Researcher: MarkBase Team --- ## 1. Apple Official Documentation ### 1.1 FSKit API Documentation **Status**: ✅ Partially Available **Sources**: - **FSKit Framework**: macOS 15+ (Sequoia) introduction - **fskitd man page**: Available via `man fskitd` - **Apple Developer Documentation**: https://developer.apple.com/documentation/fskit (requires JavaScript) **Key Documentation**: #### fskitd Man Page ``` NAME fskitd – FSKit mount manager and mount support DESCRIPTION fskitd is the FSKit mount management and mount support daemon. It manages the FSKit mount life cycle and coordinating with other daemons. It also translates requests from the kernel LIFS file system to the user space file system servers backing volumes. fskitd is invoked by launchd(8) when volume creation is requested or when previously-created volumes are detected. FILES /System/Library/LaunchAgents/com.apple.fskitd.plist ``` ### 1.2 ExtensionKit Installation Guides **Status**: ❌ Limited Public Documentation **Key Findings**: - ExtensionKit is the underlying framework for FSKit Modules - FSKit Modules are **App Extensions** (`.appex`) - Extension Point: `com.apple.fskit.fsmodule` ### 1.3 App Extension vs System Extension Differences | Feature | App Extension | System Extension | |---------|---------------|------------------| | **Location** | `/System/Library/ExtensionKit/Extensions/` (Apple)
`/Library/Filesystems/` (Third-party) | `/Library/SystemExtensions/` | | **Installation** | Automatic discovery | Requires user approval via System Preferences | | **API** | ExtensionKit | System Extension API | | **Restart Required** | ❌ No | ❌ No (but may require logout) | | **Entitlements** | `com.apple.developer.fskit.fsmodule` | `com.apple.system-extension` | | **Sandbox** | ✅ Required | ✅ Required | | **User Approval** | ❌ Not required (for local filesystems) | ✅ Required | **Critical Finding**: FSKit Modules are **App Extensions**, NOT System Extensions! --- ## 2. Third-Party Implementations ### 2.1 rclone FSKit Implementation **Status**: ❌ Not Implemented **Evidence**: - rclone documentation shows FUSE mount support - No FSKit-specific documentation found - rclone uses macFUSE/FUSE-T, not native FSKit **Conclusion**: rclone does not have FSKit Module implementation. ### 2.2 Google Drive FSKit Implementation **Status**: ❌ Not Publicly Available **Evidence**: - Google Drive File Stream uses kernel extensions (deprecated) - No FSKit Module implementation found - Likely waiting for broader macOS adoption ### 2.3 Other Third-Party FSKit Modules **Status**: ❌ None Found **Search Results**: - GitHub search: "FSKit module macOS" → 0 repositories - GitHub search: "fskit fsmodule" → No public code - Stack Overflow: No FSKit tag **Conclusion**: MarkBaseFS is **one of the first third-party FSKit Modules** publicly documented. --- ## 3. Installation Mechanism ### 3.1 How macOS Discover FSKit Modules? **Discovery Mechanism**: 1. **ExtensionKit Framework**: - ExtensionKit daemon scans `/System/Library/ExtensionKit/Extensions/` - FSKit Modules are discovered by `EXExtensionPointIdentifier` = `com.apple.fskit.fsmodule` 2. **Local Filesystems**: - `/Library/Filesystems/` is scanned by fskitd - `.appex` bundles with correct Info.plist are registered 3. **Discovery Process**: ``` fskitd (daemon) → ExtensionKit → .appex bundles → Info.plist → EXExtensionPointIdentifier ``` ### 3.2 Does FSKit Daemon Automatically Discover New Modules? **Answer**: ✅ YES (for `/Library/Filesystems/`) **Evidence**: - fskitd man page: "invoked by launchd when volume creation is requested" - MarkBaseFS Module at `/Library/Filesystems/MarkBaseFS FSKit Module.appex` was discovered - No manual registration required **Process**: 1. Copy `.appex` to `/Library/Filesystems/` 2. fskitd automatically discovers it 3. Module becomes available for mounting ### 3.3 Does it Require macOS Restart? **Answer**: ❌ NO **Evidence**: - fskitd is launched by launchd on demand - fskit_agent is running as Background/Aqua session type - ExtensionKit framework supports dynamic discovery - Test: MarkBaseFS Module was discovered without restart **Launchd Services Running**: ``` PID: 99535 - /usr/libexec/fskitd Launch Agent: com.apple.fskit.fskit_agent (PID: -9, background) ``` --- ## 4. System Extension API ### 4.1 Is System Extension API Applicable to FSKit Modules? **Answer**: ❌ NO **Reason**: - FSKit Modules are **App Extensions**, not System Extensions - System Extension API is for: - DriverKit drivers - Network Extensions - Endpoint Security **Evidence**: - MarkBaseFS Module Info.plist: `CFBundlePackageType = XPC!` (App Extension) - Apple FSKit Modules: Same `XPC!` package type - Extension Point: `com.apple.fskit.fsmodule` (App Extension point) ### 4.2 System Extension API Use Cases | Type | Extension Point | API | |------|----------------|-----| | **DriverKit** | `com.apple.driverkit` | System Extension API | | **Network Extension** | `com.apple.network-extension` | System Extension API | | **Endpoint Security** | `com.apple.endpoint-security` | System Extension API | | **FSKit Module** | `com.apple.fskit.fsmodule` | ExtensionKit API | --- ## 5. Correct Installation Location ### 5.1 Apple FSKit Modules Location **Location**: `/System/Library/ExtensionKit/Extensions/` **Examples**: ``` /System/Library/ExtensionKit/Extensions/ ├── com.apple.fskit.exfat.appex ├── com.apple.fskit.ftp.appex ├── com.apple.fskit.msdos.appex └── FSKitModuleManagement.appex ``` ### 5.2 Third-Party FSKit Modules Location **Primary Location**: `/Library/Filesystems/` **Evidence**: - MarkBaseFS Module currently at `/Library/Filesystems/MarkBaseFS FSKit Module.appex` - Historical precedent: NetFSPlugins at `/Library/Filesystems/NetFSPlugins/` - This location is scanned by fskitd **Alternative Locations** (NOT recommended): - ❌ `/System/Library/ExtensionKit/Extensions/` → Reserved for Apple - ❌ `/Library/Application Support/com.apple.fskit/` → Does not exist - ❌ `/Library/SystemExtensions/` → Reserved for System Extensions ### 5.3 Location Comparison | Type | Location | Discovery | Permission Required | |------|----------|-----------|---------------------| | **Apple Modules** | `/System/Library/ExtensionKit/Extensions/` | ExtensionKit | Root (system) | | **Third-Party Modules** | `/Library/Filesystems/` | fskitd | Root (sudo) | --- ## 6. Entitlements Required ### 6.1 Apple FSKit Module Entitlements **Source**: `/System/Library/ExtensionKit/Extensions/com.apple.fskit.exfat.appex` **Entitlements**: ```xml com.apple.application-identifier com.apple.fskit.exfat com.apple.developer.fskit.fsmodule com.apple.security.app-sandbox ``` ### 6.2 MarkBaseFS Module Entitlements **Source**: `/Library/Filesystems/MarkBaseFS FSKit Module.appex` **Entitlements**: ```xml com.apple.application-identifier com.accusys.markbase.fskitmodule com.apple.developer.fskit.fsmodule com.apple.security.app-sandbox ``` ### 6.3 Entitlements Comparison | Entitlement | Apple FSKit | MarkBaseFS | Required | |-------------|-------------|------------|----------| | `com.apple.application-identifier` | ✅ Yes | ✅ Yes | ✅ Yes | | `com.apple.developer.fskit.fsmodule` | ✅ Yes | ✅ Yes | ✅ Yes (critical) | | `com.apple.security.app-sandbox` | ✅ Yes | ✅ Yes | ✅ Yes | ### 6.4 Code Signing Comparison | Feature | Apple FSKit | MarkBaseFS | |---------|-------------|------------| | **Certificate Authority** | Software Signing | Developer ID Application: Accusys,Inc (K3TDMD9Y6B) | | **Notarization** | Apple internal | ✅ Stapled ticket | | **Team Identifier** | not set | K3TDMD9Y6B | | **Runtime Version** | N/A | 26.5.0 | --- ## 7. Key Findings Summary ### 7.1 Architecture ``` FSKit Architecture: ┌─────────────────────────────────────────────────┐ │ macOS Kernel (LIFS file system) │ └─────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────┐ │ fskitd (mount manager daemon) │ │ - PID: 99535 │ │ - Manages mount lifecycle │ │ - Coordinates with other daemons │ └─────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────┐ │ fskit_agent (agent daemon) │ │ - Mach service: com.apple.fskit.fskit_agent │ │ - Background/Aqua session type │ └─────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────┐ │ ExtensionKit Framework │ │ - Discovery mechanism │ │ - Extension Point: com.apple.fskit.fsmodule │ └─────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────┐ │ FSKit Modules (.appex) │ │ - /System/Library/ExtensionKit/Extensions/ │ │ - /Library/Filesystems/ │ └─────────────────────────────────────────────────┘ ``` ### 7.2 Installation Process **Step-by-Step**: 1. **Build FSKit Module**: - Create `.appex` bundle with correct Info.plist - Set `EXExtensionPointIdentifier = com.apple.fskit.fsmodule` - Add entitlements: `com.apple.developer.fskit.fsmodule = true` 2. **Code Signing**: - Sign with Developer ID Application certificate - Enable Hardened Runtime (options runtime) - Submit for notarization - Staple ticket 3. **Installation**: ```bash sudo cp "MarkBaseFS FSKit Module.appex" /Library/Filesystems/ sudo chown root:wheel /Library/Filesystems/MarkBaseFS FSKit Module.appex ``` 4. **Discovery**: - fskitd automatically discovers module - No restart required - Module becomes available for mounting ### 7.3 Critical Requirements | Requirement | Status | |-------------|--------| | ✅ Correct Extension Point | `com.apple.fskit.fsmodule` | | ✅ Correct Entitlements | `com.apple.developer.fskit.fsmodule = true` | | ✅ App Sandbox | `com.apple.security.app-sandbox = true` | | ✅ Code Signing | Developer ID Application | | ✅ Notarization | Stapled ticket | | ✅ Correct Location | `/Library/Filesystems/` | | ✅ Root Ownership | `root:wheel` | --- ## 8. Recommendations for MarkBaseFS ### 8.1 Current Status ✅ MarkBaseFS Module is correctly installed at `/Library/Filesystems/MarkBaseFS FSKit Module.appex` ✅ Entitlements match Apple FSKit Modules ✅ Code signed with Developer ID Application ✅ Notarization ticket stapled ✅ Automatically discovered by fskitd ### 8.2 Installation Script Recommendation ```bash #!/bin/bash # MarkBaseFS FSKit Module Installation Script # 1. Build FSKit Module (already done) # xcodebuild -project MarkBaseFS.xcodeproj -scheme MarkBaseFS # 2. Code Sign (already done) # codesign --sign "Developer ID Application: Accusys,Inc (K3TDMD9Y6B)" \ # --deep --force --verify --verbose --options runtime \ # "MarkBaseFS FSKit Module.appex" # 3. Notarize (already done) # xcrun notarytool submit ... # xcrun stapler staple ... # 4. Install to correct location sudo cp -R "MarkBaseFS FSKit Module.appex" /Library/Filesystems/ sudo chown -R root:wheel "/Library/Filesystems/MarkBaseFS FSKit Module.appex" # 5. Verify installation ls -la /Library/Filesystems/ codesign -dvvv "/Library/Filesystems/MarkBaseFS FSKit Module.appex" # 6. Trigger discovery (optional, automatic) # killall fskitd # fskitd will restart and discover echo "MarkBaseFS FSKit Module installed successfully" ``` ### 8.3 Next Steps 1. ✅ Current installation is correct 2. Test mounting via Finder or `diskutil` 3. Performance validation (target: 600 MB/s) 4. Document mounting procedures for end users --- ## 9. Sources and Citations ### 9.1 System Sources - **fskitd man page**: `man fskitd` - **Apple FSKit Modules**: `/System/Library/ExtensionKit/Extensions/` - **MarkBaseFS Module**: `/Library/Filesystems/MarkBaseFS FSKit Module.appex` - **Launch Agent**: `/System/Library/LaunchAgents/com.apple.fskit.fskit_agent.plist` ### 9.2 Code Signing Evidence - **Apple FSKit**: `codesign -dvvv /System/Library/ExtensionKit/Extensions/com.apple.fskit.exfat.appex` - **MarkBaseFS**: `codesign -dvvv /Library/Filesystems/MarkBaseFS FSKit Module.appex` ### 9.3 Process Evidence - **fskitd**: `ps aux | grep fskit` → PID 99535 - **fskit_agent**: `launchctl list | grep fskit` → com.apple.fskit.fskit_agent ### 9.4 Documentation Sources - **Apple Developer**: https://developer.apple.com/documentation/fskit - **rclone Documentation**: https://rclone.org/docs/ - **MarkBaseFS README**: `/Users/accusys/markbase/MarkBaseFS/README.md` - **FSKit Backend Test**: `/Users/accusys/markbase/docs/fuse_poc/FSKit_BACKEND_TEST.md` --- ## 10. Conclusion **FSKit Module Installation is straightforward**: 1. ✅ Build `.appex` with correct Info.plist and entitlements 2. ✅ Code sign with Developer ID Application 3. ✅ Notarize and staple 4. ✅ Install to `/Library/Filesystems/` 5. ✅ fskitd automatically discovers module 6. ✅ No restart required **MarkBaseFS is correctly installed and should be functional**. **No System Extension API or approval process is required**. --- **Report Version**: 1.0 **Date**: 2026-05-28 **Status**: Research Complete ✅