Домой Новости Железо Wild Linker 0.9

Wild Linker 0.9

Вышел высокопроизводительный линковщик Wild Linker 0.9.0 на Rust с поддержкой плагинов и новых архитектур

Пингвин-талисман проекта Wild Linker
Wild Linker 0.9 Источник: linux.org.ru

Состоялся официальный релиз 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:

  • Поддержка плагинов компоновщика. Добавлен интерфейс для работы с 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, дополнительные релокации и range-extension thunks для платформы AArch64, обработка спектра x86–64-релокаций с оптимизациями, а также уточнены диапазоны и правила выравнивания для 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 без пробела.

  • Генерация статически перемещаемых объектов. Появилась возможность создания static relocatables — промежуточных объектных файлов, способных принимать участие в последующих этапах компоновки.

  • Оптимизации производительности. Создатели отмечают, что в версии 0.9 не проводилось глобального рефакторинга ради рекордной скорости сборки, однако общая производительность осталась на прежнем высоком уровне без деградации. Среди локальных улучшений стоит выделить ускоренный путь обработки неглобальных сопоставителей в version scripts, сокращение количества ресурсоёмких атомарных операций, параллельный расчёт адресов секций и символов во время сканирования relaxations, а также уменьшение числа повторных проходов по уже разрешённым секциям.

  • Исправления ошибок и повышение стабильности. Устранена масса проблем, связанных с обработкой слабых неопределённых символов (weak undefined symbols), секций .ctors и .dtors, механизма RELRO, version scripts, отладочных форматов SFrame и SHT_SYMTAB_SHNDX, процедур IFUNC, ключей —version/-v, предупреждений компоновщика, debug relocations, .eh_frame, статической линковкой динамических объектов, а также специфических сценариев использования linker scripts.

  • Документация и инфраструктура проекта. Разработчики добавили кодекс поведения, политику взаимодействия с LLM, документацию по управлению проектом (governance), матрицу поддержки скриптов линковки, руководство по интеграции параметра -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 и частью скриптов линковки. Функция инкрементальной компоновки, поддержка сложных скриптов, а также полноценная работа с Mach-O и Windows пока остаются в статусе незавершённых задач.

В практическом плане выпуск Wild Linker 0.9 существенно расширяет совместимость утилиты с существующими промышленными сборочными цепочками, делает первый шаг за пределы стандартной ELF-экосистемы и внедряет поддержку сценариев, без которых эффективное применение альтернативного линковщика в крупных проектах на C/C++ было затруднено. Для разработчиков на языке Rust проект по-прежнему представляет большой интерес как надёжный фундамент для будущей инкрементальной сборки, а для инженеров-системщиков — как перспективный и высокопроизводительный конкурент классических решений вроде GNU ld, LLD и Mold.

Источник: https://www.linux.org.ru