Wild Linker 0.9

Состоялся релиз Wild Linker 0.9.0 — нового высокопроизводительного линковщика, написанного на Rust. Релиз отмечен на GitHub 23 мая 2026 года. Проект позиционируется как линковщик для ускорения итеративной разработки: в перспективе авторы хотят прийти к инкрементальной линковке, хотя в текущей версии она ещё не реализована. Код распространяется под двойной лицензией Apache 2.0 / MIT.
Главное изменение Wild 0.9 — поддержка Linker Plugin API, интерфейса, появившегося в Gold linker и также поддерживаемого GNU ld и Mold. Для Wild это открывает путь к linker-plugin LTO — оптимизации времени компоновки через подключаемый модуль линковщика. Разработчики отдельно уточняют, что это прежде всего полезно для проектов на C, C++ и смешанных кодовых баз, тогда как чистые Rust-проекты обычно делают LTO внутри компилятора. У поддержки пока есть известные проблемы, а линковка через плагин может быть медленной.
Значительная часть работ в 0.9 была связана с подготовкой к переносу Wild за пределы Linux/ELF. ELF-специфичная логика вынесена за абстракции, начата работа над поддержкой Mach-O и WebAssembly. Эти возможности пока не готовы для практического использования, но уже появились первые элементы: разбор Mach-O, обработка секций и сегментов, таблица символов, кодовая подпись, fat binary, а также начальная поддержка wasm-секций, символов и релокаций.
Основные изменения Wild Linker 0.9:
-
Поддержка linker plugins. Добавлена возможность работы с API плагинов линковщика, что нужно для linker-plugin LTO и совместимости с частью сценариев сборки из мира GCC/GNU ld/Mold. Также исправлены отдельные проблемы, связанные с callback-ами плагинов,
--whole-archive, ThinLTO, лимитом открытых файлов и удалением мёртвого кода при LTO. -
Серьёзное расширение поддержки linker scripts. Реализованы директивы
PROVIDEиPROVIDE_HIDDEN, разбор и выполнениеASSERT, поддержкаMEMORY,ORIGIN,LENGTH,LOADADDR,ALIGNOF,SEGMENT_START, суффиксовKиMв числовых литералах, логических, побитовых и унарных операторов, а также сопоставление по именам входных файлов. Это приближает Wild к совместимости со сложными скриптами линковки, которые часто встречаются в системном ПО и низкоуровневых проектах. -
Улучшения для RISC-V, AArch64, x86–64 и LoongArch64. Добавлены RISC-V call relaxation, HI20 relaxation,
R_RISCV_ALIGN, проверка конфликтующих расширений ISA, дополнительные релокации AArch64, range-extension thunks для AArch64, обработка ряда x86–64-релокаций с relaxations, а также уточнения по диапазонам и выравниванию для LoongArch64. -
Новые параметры совместимости. Появилась поддержка
--dependency-file,--auxiliary,--exclude-libs,--enable-new-dtags,--disable-new-dtags,--trace,--nmagic,--compress-debug-sections,--pack-dynamic-relocs=relr,--use-android-relr-tags, а также формы-o/pathбез пробела. -
Генерация статически перемещаемых объектов. Добавлена поддержка создания static relocatables — промежуточных объектных файлов, которые ещё могут участвовать в дальнейшей линковке.
-
Улучшения производительности без акцента на «быстрый» релиз. Авторы прямо отмечают, что в 0.9 не было крупной работы над скоростью, но деградации также не произошло. Среди локальных оптимизаций — быстрый путь для неглобовых сопоставителей в version scripts, уменьшение числа атомарных операций, параллельный расчёт адресов секций и символов при сканировании relaxations и сокращение повторной обработки уже разрешённых секций.
-
Много исправлений совместимости. Исправлена обработка weak undefined symbols,
.ctors/.dtors, RELRO, version scripts, SFrame, IFUNC,--version/-v, ошибок неопределённых символов, предупреждений, debug relocations,.eh_frame, SHT_SYMTAB_SHNDX, статической линковки dynamic object и ряда сценариев с linker scripts. -
Документация и управление проектом. Добавлены кодекс поведения, политика использования LLM, governance-документация, матрица поддержки linker scripts, инструкция по использованию
-fuse-ld=wildс GCC 16.1 и установка через Brew. Репозиторий также переехал в отдельную GitHub-организациюwild-linker.
На данный момент Wild официально ориентирован прежде всего на Linux и ELF. В README проекта заявлена поддержка x86–64, ARM64, RISC-V riscv64gc и начальная поддержка LoongArch64 на Linux; умеет собирать статические бинарники, static-PIE, динамически слинкованные исполняемые файлы и .so, работает с отладочной информацией, GNU jobserver и частью linker scripts. Инкрементальная линковка, более сложные linker scripts, Mach-O и Windows пока отнесены к нереализованным или незавершённым возможностям.
В практическом смысле Wild 0.9 — расширяет совместимость с существующей экосистемой сборки, начинает выходить за пределы ELF и получает поддержку сценариев, без которых линковщик трудно применять в крупных C/C++ и смешанных проектах. Для Rust-разработчиков Wild остаётся интересен как потенциальная база для будущей инкрементальной линковки, а для системных разработчиков — как ещё один быстрый конкурент GNU ld, LLD и Mold.
>>> Источник
