Nedodržování standardů je bohužel na Internetu standardem. Před časem jsem četl krásný rozbor (myslím, že to bylo jedno RFC, ale nemůžu ho najít), že na světě neexistuje implementace RADIUSu odpovídající specifikaci.
Podobně jsem před časem testoval, co udělá SMTP server, když mu v DATA pošlu řádku teček. Ani jeden to nezpracoval podle standardu (podle standardu má umazat první tečku a zbytek řádky považovat za message, v praxi některý smazal polovinu teček, některý všechny, některý žádnou, ale ani jeden nedělal to, co má).
Běžně používané znáslinění BGP protokolu, kde se poslení číslo v seznamu AS nepovažuje za AS, ale počet opakování předchozího AS, před časem shodilo Internet na půlce světa, když někdo zadal serveru cestu přesně podle specifikace.
Nedělám si uluze, že exisuje jedna jedinná přesná implementace jedné jedinné specifikace.
A to proto, že specifikace popisuje algoritmus zpracování zpráv a strukturu dat povětšinou jako text. Ten každý pochopí jinak a problém, je na světě. Kolegu jednou s jeho implementací nějakýho protokolu vyhodili z certifikace (4 týdny, 1000USD) na jistou nálepku na krabičce proto, že špatně pochopil jednu větu ve specifikaci protokolu.
U internetových protokolů není ani žádná certifikační autorita, přes kterou by musel server projít a která by řekla, že to mají blbě...
No, je to děs. Standard je, když dostanu tabulku se seznamem chyb a převedu ji na enum, ale nikdo neřekne, jestli při špatným počtu parametrů příkazu mám použít E_INVALID_COMMAND nebo E_CHECKSUM_ERROR - kód příkazu je validní, CRC sedí, jenom nesedí počet parametrů. Vhodnější hodnota tam není a přidat vlastní pochopitelně nemůžu... A v tu ránu mám hned jako autor SW 50% jistotu, že je něco blbě.
To jsem střelil jako příklad, ale je faktem, že už jenom tohle - pět chybových kódů bez vysvětlení kontextu (tabulkou jméno-číslo) a 5000 možných chyb znamená docela velkou možnost nedorozumění. K tomu 50 příkazů s průměrně pěti parametry, popsanými vágně třemi slovy (když dobře),...
Nepochopíš význam jednoho bytu a je tam chyba. Krásně je to vidět na otrávení cache pomocí NXDOMAIN