про ipv6
Моя нелюбовь к ipv6 больше возникла не из-за гитхабика, конечно, а из-за тех проблем, что я "покушал", когда работал с ipv6 в POSIX. Ну вот, к примеру, как выглядит мой список для сегодняшней десятиминутки ненависти:
1. IPv6 адрес. Его полная грамматика (применимо к SMTP) живет у меня тут: https://github.com/.../blob/master/src/ragel/smtp_ip.rl Использовать в качестве разделителей точки ИЛИ двоеточия - крайне херовая идея, хотя бы потому что двоеточие использовалось торадиционно для отделения порта от адреса. А теперь есть куча несовместимых способов, как записать IPv6 + port. Например, в квадратных скобках. Но вот в некоторых случаях эти квадратные скобки уже имеют некий смысл (привет, Postfix).
2. Happy Eyeballs и DNS резолвинг. Работать с этим в event-based модели крайне сложно, а в случае, когда нужно открывать множество соединений в роли клиента, так и вообще невозможно - нет, ну кому нафиг нужны по два коннекта на одну сессию.
3. Бывают системы, где IPv6 есть в Libc, но его нет в ядре и наоборот. Это вызывает чудные эффекты.
4. Бывают системы, где V6_V6ONLY по умолчанию 1, а бывают, где 0. И от этого ломается listening. А еще бывает systemd, который вообще (возможно, до каких-то пор) имеет опцию v6_v6only, которая не оказывала никакого эффекта на поведение демона.
5. IPv6 адрес не влезает в линейку кеша на актуальных платформах. IPv6 адрес практически нереально хранить в наивном радиксе - без path (а лучше level) compression деревья лукапа неэффективны в отличие от IPv4, где работает как наивный алгоритм, так и есть вообще варианты лукапа за константное время без деревьев. Думаю, эта проблема знакома и сетевикам. Почему было не сделать тупо 32 бита на сеть и 32 бита на адрес, сохранив все текущие алгоритмы, не очень понятно.
6. Бывает, что хост тебе возвращает N ipv4 адресов и M ipv6 адресов. Но нет никакого способа понять, какая связность у тебя есть в данный момент. Я до сих пор не знаю, как правильно решать эту проблему в случае, когда в секунду делаются десятки тысяч клиентских запросов, а не когда тебе нужно открыть кино-говно.ком в браузере, а ipv6, скажем, у тебя только формально присутствует.
Возможно, есть еще что-то, что я забыл упомянуть.