Cctools 65 New

| Issue | Fix in cctools 65 | |-------|-------------------| | lipo incorrectly stripped arm64 from arm64e binaries | Proper architecture detection for arm64e (though arm64e was still early preview). | | strip -Sx could corrupt Swift metadata sections | __swift* sections now marked as non-strippable. | | otool -tV disassembly offset misalignment for Thumb code | Fixed Thumb/ARM mode switching in disassembler. | | install_name_tool -id failing for flat-namespace dylibs | Handles dylibs without an install name correctly. |

Following Apple’s notarization requirements, cctools 65 new introduces:

While open-source purists celebrated Darwin, cctools 65 hardened Apple’s legal posture. GNU binutils is GPLv3 (or later for newer versions), which prohibits tivoization and requires source disclosure for linked works. Apple’s cctools, however, remained under the APSL (Apple Public Source License) or a permissive license for the Mach-O specific parts. cctools 65 new

By version 65, Apple had rewritten enough of ld, as, and otool that they could argue it was a derived work exempt from the GPL’s copyleft. This allowed Apple to ship closed-source drivers and system frameworks without releasing the linker scripts or the proprietary ld optimizations for Objective-C dispatch tables. Thus, cctools 65 is the first version where Apple’s legal and engineering goals fully aligned: a performant, Mach-O-native linker that owed no legal debt to the GNU project.

The transition from previous versions (cctools 64.x) to cctools 65 new is not just a minor bump. It represents a major architectural shift designed to address modern development challenges: | Issue | Fix in cctools 65 |

Version 65 was first seeded in late 2024 beta releases and has now reached a stable production state, labeled cctools 65 new to emphasize its break from legacy methods.

One of the most notable additions in the cctools 65 timeframe was support for arm64_32 – a hybrid ABI used in watchOS (Apple Watch Series 4 and later, from watchOS 5 onward). It uses 64-bit instructions but 32-bit pointers, reducing memory footprint. Version 65 was first seeded in late 2024

Changes include: