Děkuji za pěkný vhled do práce na Bind-u, děkuji i za odvedenou práci. Vypadá to, že Bind 9.20 má opravdu co nabídnout, protože se nebojíte do toho řádně říznout a to pořádně do hloubky. Propastný rozdíl mezi verzí 16 a 20 je toho důkazem.
Mimochodem, jádro 2.2.0 vyšlo v lednu 1999, v lednu 2000 to bylo už 2.2.14. V letech 1999/2000 jsem s Linuxem začínal a první jádro, které jsem překládal, bylo právě 2.2.X. Ale to je jen maličkost.
To vypadá jako spousta práce, ale taky hezké výsledky. Díky za článek a vhled.
Dalo by se nějak zhodnotit, jak se projekt programuje? Kde jsou nástrahy? Kolik kódu je jak starého např. pomocí https://github.com/erikbern/git-of-theseus
A určitě otravná, ale zajímavá otázka - pomohl by v takovém projektu Rust? (Nemyslím to nijak ideologicky, nejde mi tu o nějakou hypotetickou lepší bezpečnost, ale spíš efektivitu vývoje.)
> Dalo by se nějak zhodnotit, jak se projekt programuje?
Přesně nevím, na co se ptáte. Programuje se jako každý větší starý komplexní vícevláknový program. Něco se programuje dobře něco špatně a něco je vyloženě peklo. Moderní nástroje to trochu ulehčují (ASAN, TSAN, UBSAN, různé statické analyzátory kódu).
> Kde jsou nástrahy?
Vícevláknové programování (synchronizace data a memory reclamation) je složité, ale většina chyb, kterou dnes máme je buď nějaká edge condition ve state machine DNS, nebo případně různé amplifikace, kdy na jeden příchozí packet se resolver snaží až moc a vygeneruje jich příliš odchozích kvůli různým přesměrováním, CNAME apod.
> Kolik kódu je jak starého např. pomocí https://github.com/erikbern/git-of-theseus
Tak ostatně tohle si asi můžete pustit nad repozitářem i sám. Jenom upozorním, že dřívější vývojový model byl nad CVS, pak už nad gitem, ale ve starém modelu, takže co se týče autorů kódu, tak je to relevantní až cca od března 2018.
> Ad Rust
Tím jsem se již nejednou zabývali, nějaké poznámky jsou tady: https://gitlab.isc.org/isc-projects/bind9/-/wikis/A-few-thoughts-on-Rust-in-BIND, ale v zásadě bychom museli jít modelem "všechno nebo nic", a vzhledem k tomu, že většina chyb, které v kódu jsou nejsou "memory-safety", tak ten přínos použití Rustu je diskutabilní.
Tady jsem ještě uložil ty grafy z git-of-theseus:
https://gitlab.isc.org/isc-projects/bind9/-/wikis/Git-Of-Theseus
Jak jsem již říkal, tak authors tam nedávám, protože to jednak nedává smysl, a jednak nemáme úplně přesně poznačené commity s automatickým refaktoringem, které také významně zkreslují výsledky.
Neuvažuje se o rozdělení Bind 9 na autoritativní server a kešující resolver? Protože provozovat správně obojí v jediné instanci je dost obtížné, ne-li nemožné (což platí obecně pro DNS serevry, ne jen pro Bind 9)?
Ne, neuvažujeme. Spíše půjdeme do budoucna tou cestou, aby bylo možné takové nasazení udělat bezpečněji. Je mnoho scénářů, kdy je nasazení rekurzivního a autoritativního serveru pomocí jedné konfigurace komfortnější a vede k lepším výsledkům než konfigurovat více serverů na více síťových rozhraní, aby bylo vůbec možné dosáhnout požadovaného výsledku.