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, а також уточнення по діапазону.

  • Нові параметри сумісності. З'явилася підтримка -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

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster