?

Log in

No account? Create an account

Previous Entry | Next Entry

Сила и мощь опенсорца

Довелось тут поковыряться в одной занятной опенсорсной софтине. Остался в шоке от её энтерпрайзности. Посудите сами: софтина напрямую работает со средствами безопасности: аутентификация, шифрование и всё такое, непосредственно торчит голой задницей в сеть, да ещё и в беспроводную, так что кто угодно с соседней улицы может дотянуться. Безумно популярная: думаю, не сильно ошибусь, если скажу, что она стоит и активно используется на порядка 75% линуксовых клиентских машин, 85% линукс-базед устройств, начиная с SOHO-роутеров и заканчивая умными кофеварками, и во всех линуксовых телефонах включая гуглофоны.

При этом у них нету официального багтрекера. Впрочем, похоже, и неофициального тоже. У них нету релизных веток, не говоря уже о стабильных LTS, только master и фиксированные теги релизов. Текущий релиз был зафиксирован более двух лет назад. Это означает, что в стабильную версию этого мега-продукта не вносилось багфиксов на протяжении более двух лет. И нет, не потому что он такой идеально вылизанный, а потому что нету соответствующего workflow. Что в свою очередь означает, что каждому отдельному дистрибутиво-строителю необходимо самостоятельно отслеживать уязвимости и баги и бекпортировать патчи. Впрочем, учитывая частоту релизов в последние время, ещё и фичи неплохо бы бекпортировать.
Месяц назад я отправил в их рассылку небольшой патч, улучшающий сборочные скрипты. Но похоже он просто бесследно утонул в потоке писем, проходящих через их единственную рассылку. Интенсивность там, надо сказать, бешеная: достигает нескольких десятков писем в... эммм, в месяц...

Пару слов о коде. Местами встречаются артефакты копипасты, местами просто странные махинации типа:

static int wpas_create_receive_sc(void *wpa_s, u32 channel,
                                  struct ieee802_1x_mka_sci *sci,
                                  enum validate_frames vf,
                                  enum confidentiality_offset co)
{
        return wpa_drv_create_receive_sc(wpa_s, channel, sci->addr, sci->port,
                                         conf_offset_val(co), vf);
}

Пояснение: на пути от логики, которая дёргает за ручку, до драйвера, который выполняет реальные действия, вызов проходит через как минимум три уровня абстракции. И вот, где-то посередине этого процесса происходит изменение порядка аргументов функций. И нет, это не так получилось из-за какого-то легаси - оно так было написано изначально лет 5 назад, с нуля.
Или вот это милое TODO, живёт с того же времени:

        /* FIXME: Secy creates txsa with default npn. If MKA detected Latest Key
         * npn is larger than txsa's npn, set it to txsa.
         */
        secy_get_transmit_next_pn(participant->kay, txsa);
        if (lpn > txsa->next_pn) {
                secy_set_transmit_next_pn(participant->kay, txsa);
                wpa_printf(MSG_INFO, "KaY: update lpn =0x%x", lpn);
        }

Да и вообще, у меня есть некоторые сомнения в адекватности работы этой подсистемы - пока не нашёл кода, отвечающего за поддержание соединения, такое ощущение, что оно там просто не доделано. Остаётся только надеяться, что это мне лишь повезло нарваться на очень невостребованную и потому не вылизанную подсистему.