Commit 5ecfb55
Remove the System Extension subsystem
Twenty thousand lines that no shipping path could reach, and a release
artifact no installed component could locate.
Activation was never attempted. Both OSSystemExtensionManager.submitRequest
call sites were unreachable, because ServerCoordinator gated everything on
systemExtensionBundleConfig, which nothing in Sources ever set. The whole of
Sources/SystemExtension/ was unreachable even from its own executable: its
IOKitDeviceClaimer, XPCIPCHandler and ComprehensiveStatusMonitor were
shadowed by same-named stubs in USBIPDCore, and no module imported it.
StatusCommand's 600-line report sat behind a guard that always took the
early return.
None of it could have worked. OSSystemExtensionRequest resolves extensions
inside the calling process's own bundle and requires that bundle to live in
/Applications; a Homebrew-installed Mach-O is neither. The claiming strategy
underneath — setting IOMatchCategory and IOProbeScore from userspace and
calling IOServiceRequestProbe — was measured not to unbind anything, and is
not how a DriverKit extension matches in any case.
What replaces it is what was already doing the work: DeviceOwnershipInspector
refuses to bind a device whose interfaces macOS holds and names the owner,
and IOKit refuses USBInterfaceOpen on an interface another driver owns.
DeviceClaimManager survives as the seam a real implementation would slot
into; UserspaceDeviceClaimManager satisfies it honestly.
Deleted: Sources/USBIPDCore/SystemExtension/ (16,775 lines),
Sources/SystemExtension/ (3,670), Common/SystemExtensionErrors.swift,
DefaultUSBDeviceCommunicator (a superseded duplicate of the Implementation
still carrying a hard claim gate), USBRequestHandler.validateDeviceAccess
and its protocol requirement (no callers), the ServerCoordinator and
ServerConfig branches, and two test files covering only the dead detector.
The USBIPDSystemExtension product and target go with them.
Sources/SystemExtension/Info.plist, its entitlements, and the README
explaining why the subsystem failed are preserved under
Documentation/development/system-extension-archive/ — they record the
identifier and entitlement decisions a future DriverKit extension needs.
23,838 lines removed. Tests drop from 443 to 429, exactly the 14 covering
the deleted detector and installer. Verified against a Raspberry Pi Debug
Probe on a release build: control transfer passes, a control transfer still
completes in 0.003s while a read blocks for 60, probe-rs still reaches chip
detection, and bind still refuses a HID keyboard naming AppleUserHIDDevice.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017rmyikdjWveP99ZUCDLY891 parent 9b5fbd5 commit 5ecfb55
49 files changed
Lines changed: 55 additions & 23635 deletions
File tree
- Documentation/development/system-extension-archive
- Sources
- Common
- SystemExtension
- IOKit
- IPC
- Monitoring
- USBIPDCLI
- USBIPDCore
- Device
- Protocol
- SystemExtension
- BundleCreation
- BundleDetection
- CodeSigning
- Installation
- Tests/USBIPDCoreTests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
File renamed without changes.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | 25 | | |
29 | 26 | | |
30 | 27 | | |
| |||
43 | 40 | | |
44 | 41 | | |
45 | 42 | | |
46 | | - | |
47 | 43 | | |
48 | 44 | | |
49 | 45 | | |
| |||
53 | 49 | | |
54 | 50 | | |
55 | 51 | | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | 52 | | |
69 | 53 | | |
70 | 54 | | |
| |||
This file was deleted.
0 commit comments