В одном проекте, использующем OpenSSL, решили обновить версию.
Раньше была версия 1.0.2d.
Взял последнюю стабильную 1.1.1g от Апр 2020.
Собрал, установил. Стал компилировать свои исходники...
У меня челюсть отвисла. Они поменяли все!
Ну ладно выкинули старые ненадежные алгоритмы, это правильно.
Но они все структуры, которые раньше были в публичных заголовках, сделали непрозрачными!
Никакими дефайнами совместимость тут не настроить!
Было:
EVP_MD_CTX mdctx;
EVP_MD_CTX_init(&mdctx);
// работаем с mdctx...
EVP_MD_CTX_cleanup(&mdctx);
Теперь надо так:
EVP_MD_CTX *mdctx;
mdctx = EVP_MD_CTX_new();
// работаем с mdctx...
EVP_MD_CTX_free(mdctx);
Просто крик души.
Ну как так можно?
Вроде серьезная библиотека...
Или в опенсорсе это норм?
Здравствуйте, Zhendos, Вы писали:
Z>Везде ломают обратную совместимость время от времени,
Здесь сломали не обратную, а в обе стороны совместимость. При том вполне осознанно.
Надо весь исходный код, использующий вызовы OpenSSL, перелопачивать...
Z>при чем здесь opensource и серьезность библиотеки?
Очень даже причем.
В коммерческом продукте пользователи платят деньги и перестают платить, если их обижать.
А под серьезностью я имел в виду большое распространение библиотеки и, соответственно, большое сообщество пользователей.
В данном случае на сообщество плюнули и оно утерлось.
Ладно бы была какая-то нишевая библиотека у которой 3 пользователя.
Здравствуйте, qaz77, Вы писали:
Q>Здравствуйте, Zhendos, Вы писали:
Z>>Везде ломают обратную совместимость время от времени,
Q>Здесь сломали не обратную, а в обе стороны совместимость. При том вполне осознанно. Q>Надо весь исходный код, использующий вызовы OpenSSL, перелопачивать...
В обе стороны это если бы они в новой мажорной версии сломали
совместимость между скажем 1.1.1a и 1.1.1b,
а такого как я понимаю не произошло?
Z>>при чем здесь opensource и серьезность библиотеки?
Q>Очень даже причем. Q>В коммерческом продукте пользователи платят деньги и перестают платить, если их обижать.
НУ в сказочной стране может быть. А так возьмем например google map api для сайтов,
там не просто купил и пользуйся, там грубо говоря платишь за каждый вызов функции,
догадайтесь с одного раза ломали ли они API несовместимым образом?
Q>А под серьезностью я имел в виду большое распространение библиотеки и, соответственно, большое сообщество пользователей.
Ну это странная оценка действительно, есть же LTS релизы openssl,
в рамках их не ломают совместимость, а то что разные LTS релизы будут совместимы
никто не обещал.
Здравствуйте, Zhendos, Вы писали:
Z>В обе стороны это если бы они в новой мажорной версии сломали Z>совместимость между скажем 1.1.1a и 1.1.1b, Z>а такого как я понимаю не произошло?
Сломали совместимость между 1.0.* и 1.1.*
Это смена мажорной версии?
Сейчас у них альфа называется 3.0.0, но это связано со сменой лицензии, как я понял.
Но не про нее речь.
Z>Ну это странная оценка действительно, есть же LTS релизы openssl, Z>в рамках их не ломают совместимость, а то что разные LTS релизы будут совместимы Z>никто не обещал.
LTS для 1.0.2 кончается в этом году, 1.1.1 — до 23-го года.
Как бы тоже выжимают со старых версий.
Есть же масса других примеров С-библиотек, которые не создают такого геммороя: zlib, curl
Здравствуйте, qaz77, Вы писали:
Q>Есть же масса других примеров С-библиотек, которые не создают такого геммороя: zlib, curl
zlib уже 3 года как никто не трогает, да и до того несколько лет библиотека была в заморозке — разве что баги слегка фиксили. Т.е. секрет их безгеморройности — мертвость.
В curl не меняется основной интерфейс, но только за счет того, что он изначально убогий. А так за годы разработки внесена куча несовместимых изменений, начиная от введения новых функций и заканчивая удалением старых опций.
Здравствуйте, qaz77, Вы писали:
Q>Но они все структуры, которые раньше были в публичных заголовках, сделали непрозрачными! Q>Никакими дефайнами совместимость тут не настроить!
Ну почему — можно сначала весь свой код таким образом на указатели перевести ещё оставаясь на 1.0, а потом уже в рамках достигнутого переключиться на 1.1.
Так а чего они этим добились? Работают, в терминах ООП, через указатель на базовый класс?
Q>Вроде серьезная библиотека...
Погугли причины... наверняка они были и далеко не просто с бухты-барахты.
Здравствуйте, netch80, Вы писали:
N>Ну почему — можно сначала весь свой код таким образом на указатели перевести ещё оставаясь на 1.0, а потом уже в рамках достигнутого переключиться на 1.1. N>Так а чего они этим добились? Работают, в терминах ООП, через указатель на базовый класс?
В 1.0 работали напрямую с членами структур, а в 1.1 аналогичные действия — только через функции, которых нет в 1.0.
Притом для меня не стоит задача, чтобы код компилировался и там, и там.
Но для перехода на 1.1 надо перелопатить чертову кучу кода...
Вот, например, настройка Диффи-Хеллмана была раньше через поля: