Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Internet a sítě

Wine 11.19 si odpovědi DNS ukládá do vyrovnávací paměti

Vývojové vydání Wine 11.19 vyšlo 2. října 2026 a do knihovny dnsapi přidalo vlastní vyrovnávací paměť pro dotazy DNS. Platnost záznamu se řídí nejkratší hodnotou TTL v odpovědi a paměť zaniká spolu s procesem, který ji naplnil. Ve stejném vydání skončilo pětisekundové čekání při startu Wine, na které si uživatelé stěžovali od září.

· 15 zhlédnutí

Plocha Wine se spuštěným správcem archivů, Poznámkovým blokem a hrou WineMine
Wine spouští programy psané pro Windows ve vlastní ploše; na snímku španělsky lokalizovaný 7-Zip, Poznámkový blok a WineMine. Foto: Alejandro.lavarello, Wikimedia Commons (volné dílo)

Wine je vrstva, která nechá programy psané pro Windows běžet na Linuxu a macOS. Ke knihovnám, které přitom napodobuje, patří i dnsapi – tedy to, čím si program pro Windows překládá doménové jméno na adresu. Do vývojového vydání 11.19 z 2. října 2026 si tahle knihovna odpovědi nepamatovala: každý dotaz se vyřizoval znovu od začátku.

Tři přihrádky a nejkratší TTL z odpovědi

Commit dnsapi: Add a cache od Hanse Leidekkera přidal 30. září 264 řádků a 37 jich odebral. Funkce DnsQuery_UTF8 hledá jméno ve třech krocích za sebou – nejdřív v souboru hosts, pak u serveru DNS, a když ani ten neuspěje, přes NetBIOS. Nově má každý z těch tří kroků vlastní přihrádku v paměti.

Záznam se v ní najde podle trojice: zdroj, typ záznamu a jméno, u kterého se nerozlišují velká a malá písmena. Jak dlouho platí, určí nejmenší hodnota TTL ze všech záznamů v odpovědi. Když si program odpověď vyzvedne z paměti, Wine jí TTL sníží o čas, který mezitím uplynul, takže volající nedostane hodnotu, která by tvrdila víc, než kolik záznamu zbývá.

Prošlé položky se promazávají po zápisu, ale nejvýš jednou za šedesát sekund. Ukládají se jen úspěšné odpovědi – chyba ani odmítnutí v paměti nezůstanou. Program, který potřebuje čerstvý údaj, si paměť obejde příznakem DNS_QUERY_BYPASS_CACHE. A protože celá struktura žije uvnitř knihovny a uvolňuje se při jejím odpojení od procesu, nedělí se o ni dva programy: každý má svou vlastní.

Pět sekund, které si Wine bralo při každém startu

Druhá změna je vidět bez měřicího nástroje. Chybu 60322 nahlásil 11. září Ivo Ivanov: wineboot při startu zjišťuje kanonické jméno počítače a volání getaddrinfo() se u toho zasekne zhruba na pět sekund. Na macOS končí jméno stroje v doméně .local z výroby a takový dotaz vyřizuje jedině mDNS, tedy Bonjour. Jsou-li vypnuté všechny sdílecí služby, mDNSResponder na jméno přestane odpovídat a dotaz běží do vypršení lhůty.

V logu z macOS Tahoe stojí dotaz v čase 6989,941 a odpověď v 6994,937, na Manjaru s Avahi a vypnutým IPv6 to je 19918,143 a 19923,257. Rozdíl je necelých pět sekund v prvním případě a něco přes pět ve druhém; obojí je prostý odečet dvou časových značek z přiloženého výpisu. Leidekker potvrdil, že stejné chování dostane i na svém stroji, jakmile vypne i vzdálené přihlášení – Bonjour pak sice dál běží, ale na dotaz dns-sd -Q už nic nevrátí.

První oprava rozbila krátká jména

Leidekker napřed zkusil mDNS obejít tím, že se getaddrinfo() zavolá s příznaky AI_CANONNAME | AI_DNS_ONLY. Jenže ty příznaky přeskočí i soubor hosts, a Ivanov při zkoušení narazil na dvě věci. Krátká jména, která na běžném desktopu nikam jinam než do hosts nevedou, se přestala překládat. A když server DNS nebyl dosažitelný, Wine při startu stálo – na macOS kolem sta sekund, na Linuxu kolem čtrnácti.

Leidekker proto nejdřív naučil dnsapi číst soubor hosts sám (commit z 23. září). Záznam odtud dostane TTL 557 890 sekund, tedy 6,46 dne po vydělení počtem sekund ve dni, a resetuje se, jakmile se soubor změní. Jméno z NetBIOSu má 1 200 sekund. Teprve pak přibyly do wineboot ty dva příznaky; chyba je zavřená s poznámkou, že ji opravil commit 4cf90548, který mění jediný řádek.

Funkce DnsGetCacheDataTable přestala být prázdná

S pamětí dostalo smysl i rozhraní, kterým se na její obsah dá ve Windows zeptat. DnsGetCacheDataTable do teď jen zapsalo do logu, že je to zástupná funkce, a vrátilo FALSE. Od 30. září vrací seznam položek se jménem a typem záznamu; pole pro délku dat a příznaky zůstávají nulová. Test v dlls/dnsapi/tests/cache.c se kvůli tomu přepsal – napřed se položí dotaz na winehq.org, aby bylo co vypisovat, a značka todo_wine u obou kontrol zmizela.

Zbytek vydání

Oficiální přehled novinek jmenuje vedle paměti DNS ještě svislý text v GDIPlus, tabulky znaků srovnané na Unicode 18.0.0 a úpravy parseru VBScriptu. Opravených chyb je 23. Mezi značkami wine-11.18 a wine-11.19 vypisuje rozhraní GitLabu 353 commitů.

Jednu změnu ten přehled neuvádí a upozornil na ni až Phoronix: ovladač winewayland doplnil protokol color-management-v1 pro barevný prostor Vulkanu, což má zpřesnit barvy her a aplikací běžících na Waylandu. V repozitáři jde o commit z 2. října od Etaashe Mathamsettyho a v seznamu hlavních novinek opravdu není.

Vývojová vydání Wine chodí po dvou týdnech. Podle Phoronixu se stabilní dvanáctka chystá na začátek roku 2027, takže příštích pár vydání bude spíš o uklízení než o nových schopnostech.

Zdroje: poznámky k vydání Wine 11.19, chyba 60322 ve WineHQ Bugzille a Phoronix.

Internet a sítě

Linux Wine DNS macOS

← zpět na výpis