Wild Linker 0.9

good-penguin.png

Состоялся релиз 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.

>>> Источник

©  Linux.org.ru