Wydany Wild Linker 0.9.0 — nowy, wysokowydajny linker napisany w Rust. Wersja jest dostępna na GitHubie. 23 maja roku 2026Projekt jest pozycjonowany jako narzędzie do łączenia, które przyspiesza iteracyjne tworzenie oprogramowania: autorzy docelowo dążą do stopniowego łączenia, choć nie zostało to jeszcze zaimplementowane w obecnej wersji. Kod jest rozpowszechniany na podstawie podwójnej licencji. Apache 2.0 / MIT.
Główną zmianą w Wild 0.9 jest obsługa API wtyczki linkera, interfejs wprowadzony w linkerze Gold, obsługiwany również przez GNU ld i Mold. Dla Wild otwiera to drogę do wtyczka łącząca LTO — optymalizacja czasu łączenia za pomocą wtyczki linkera. Twórcy wyraźnie zaznaczają, że jest to przydatne przede wszystkim w projektach C, C++ i projektach z kodem mieszanym, podczas gdy projekty w czystym Ruście zazwyczaj korzystają z LTO wewnętrznie. Obsługa tej funkcji nadal napotyka znane problemy, a łączenie za pomocą wtyczki może być powolne.
Znaczna część prac w wersji 0.9 była związana z przygotowaniami do przeniesienia Wild poza Linux/ELF. Logika specyficzna dla ELF została przeniesiona poza abstrakcje i rozpoczęto prace nad zapewnieniem obsługi tej funkcji. Mach-O и WebAssemblyMożliwości te nie są jeszcze gotowe do praktycznego wykorzystania, ale pierwsze elementy już się pojawiły: analiza składniowa Mach-O, przetwarzanie sekcji i segmentów, tablica symboli, podpis kodu, kod binarny FAT, a także wstępne wsparcie dla sekcji, symboli i relokacji WASM.
Kluczowe zmiany w Wild Linker 0.9:
Wsparcie dla wtyczek linkujących. Dodano obsługę interfejsów API wtyczek linkera, co jest niezbędne do obsługi wtyczek linkera w LTO oraz zgodności z niektórymi skryptami kompilacji GCC/GNU ld/Mold. Naprawiono również niektóre problemy związane z wywołaniami zwrotnymi wtyczek, w tym całe archiwum, ThinLTO, limit otwartych plików i usuwanie martwego kodu podczas LTO.
Znaczne rozszerzenie obsługi skryptów linkera. Zaimplementowano dyrektywy PROVIDE i PROVIDE_HIDDEN, parsowanie i wykonywanie ASSERT, obsługę MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, sufiksów K i M w literałach numerycznych, operatorów logicznych, bitowych i unarnych oraz dopasowywanie według nazw plików wejściowych. Dzięki temu Wild jest bliższy zgodności ze złożonymi skryptami linków, często spotykanymi w oprogramowaniu systemowym i projektach niskiego poziomu.
Ulepszenia dla RISC-V, AArch64, x86-64 i LoongArch64. Dodano rozluźnienie wywołań RISC-V, rozluźnienie HI20, R_RISCV_ALIGN, sprawdzanie konfliktów rozszerzeń ISA, dodatkowe relokacje AArch64, modyfikacje zakresu rozszerzeń dla AArch64, obsługę szeregu relokacji x86-64 z rozluźnieniami oraz wyjaśnienia dotyczące zakresu i wyrównania dla LoongArch64.
Nowe opcje zgodności. Dodano obsługę opcji --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags oraz formy bez spacji -o/path.
Generowanie obiektów poruszających się statycznie. Dodano obsługę tworzenia statycznych obiektów relokowalnych — pośrednich plików obiektów, które nadal mogą uczestniczyć w dalszym linkowaniu.
Poprawa wydajności bez koncentrowania się na „szybkim” wydaniu. Autorzy wyraźnie zaznaczają, że wersja 0.9 nie wprowadziła żadnych znaczących ulepszeń wydajności, ale nie zaobserwowano też pogorszenia. Lokalne optymalizacje obejmują szybką ścieżkę dla nieglobalnych matcherów w skryptach wersji, zmniejszenie liczby operacji atomowych, równoległe obliczanie adresów sekcji i symboli podczas skanowania relaksacyjnego oraz ograniczenie ponownego przetwarzania już rozwiązanych sekcji.
Wiele poprawek zapewniających zgodność. Naprawiono obsługę słabych niezdefiniowanych symboli, .ctors/.dtors, RELRO, skryptów wersji, SFrame, IFUNC, --version/-v, błędów niezdefiniowanych symboli, ostrzeżeń, relokacji debugowania, .eh_frame, SHT_SYMTAB_SHNDX, statycznego łączenia obiektów dynamicznych i szeregu scenariuszy ze skryptami linkera.
Dokumentacja i zarządzanie projektami. Dodano kodeks postępowania, politykę użytkowania LLM, dokumentację zarządzania, macierz obsługi skryptów linkera, instrukcje dotyczące używania parametru -fuse-ld=wild z GCC 16.1 oraz instalację za pośrednictwem Brew. Repozytorium zostało również przeniesione do osobnej organizacji GitHub o nazwie wild-linker.
W chwili, Dziki oficjalnie skupia się głównie na Linux i ELF. W pliku README projektu stwierdzono wsparcie x86-64, ARM64, RISC-V riscv64gc i początkowe wsparcie Następna strona na Linux; może budować statyczne pliki binarne, statyczne pliki PIE, dynamicznie linkowane pliki wykonywalne i pliki .so, współpracuje z informacjami debugowania, serwerem zadań GNU i niektórymi skryptami linkera. Linkowanie przyrostowe, bardziej złożone skrypty linkera, Mach-O i Windows są obecnie klasyfikowane jako niezrealizowane lub niedokończone możliwości.
W praktyce Wild 0.9 rozszerza kompatybilność z istniejącym ekosystemem kompilacji, wychodzi poza ELF i dodaje obsługę scenariuszy, które utrudniają korzystanie z linkera w dużych projektach C/C++ i projektach mieszanych. Dla programistów Rust Wild pozostaje interesujący jako potencjalna baza do przyszłego, przyrostowego linkowania, a dla programistów systemowych jako kolejny, szybki konkurent dla GNU ld, LLD i Mold.
Źródło: linux.org.ru
