Відбувся реліз 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, а також уточнення по діапазону.
Нові параметри сумісності. З'явилася підтримка -dependency-file, -auxiliary, -exclude-libs, -enable-new-dtags, -disable-new-dtags, -trace, -nmagic, -compress-debug-sections, -pack-dynamic-relocs=relr, -use-android-relr-tags.
Генерація статично об'єктів, що переміщуються. Додано підтримку створення static relocatables — проміжних об'єктних файлів, які ще можуть брати участь у подальшому лінкуванні.
Поліпшення продуктивності без акценту на швидкий реліз. Автори прямо зазначають, що у 0.9 не було великої роботи над швидкістю, але деградації також не відбулося. Серед локальних оптимізацій — швидкий шлях для неглобових зіставників у version scripts, зменшення кількості атомарних операцій, паралельний розрахунок адрес секцій та символів при скануванні relaxations та скорочення повторної обробки вже дозволених секцій.
Багато виправлень сумісності. Виправлена обробка weak undefined symbols, .ctors/.dtors, RELRO, version scripts, SFrame, IFUNC, -version/-v, помилок невизначених символів, попереджень, debug relocations, . 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 та початкова підтримка LongArch64 на 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
