O informatyce, po swojemu, inaczej

Pędząc za informacją, sztuka zadawania pytań

Nowy rok, nowy ja, nowe wpisy. Mam nieodparte wrażenie, że mój język mówiony, jak i pisany zaczyna się robić martwy. Jednak nie zrażając się dzisiaj postanowiłem, że opowiem Ci jak zużyłem dużo czasu w poszukiwaniu rozwiązania.

Prolog

Uczestniczę w projekcie, który, ze względu na przypadający okres czasu w programowaniu posługujemy się przestarzałym, to może zbyt mocne słowo, nieaktualnym od niedawna API do OpenSSL. Dla osób, które nie korzystają, albo nie są rozeznani w temacie skrótowo – twórcy OpenSSL-a postanowili zerwać kompatybilność interfejsu dla swojej biblioteki. Po więcej informacji odsyłam tutaj, natomiast teraz szybka skrótowa informacja o tym jakie to ma konsekwencje w praktyce. Aby przeprowadzić w miarę bezbolesny deploy aplikacji pisanych w Qt pod Unixy korzysta się z popularnego rozwiązania nazywanego qtlinuxdeploy. Ich filozofią jest zachowywanie kompatybilności wstecznej o jeden LTS, co oznacza, że jeżeli chcesz użyć ich rozwiązania bez ingerencji w kod, to musisz go skompilować np. na Ubuntu 16 LTS i tam użyć qtlinuxdeploy, taką paczkę możesz bez obawy uruchomić na 16 i 18.

Niestety dla Ubuntu 16 obowiązuje OpenSSL ze starszą wersją API, co powoduje, że musimy jej używać w danym projekcie na chwilę obecną tak długo, jak długo funkcjonuje wsparcie dla Ubuntu 16 (czyli do 2021).

Teraz tutaj, dla fanów Qt, kilka ciekawostek, które warto wiedzieć, jeżeli chcecie tworzyć aplikacje na tablety z systemem Windows, i wykorzystywać klawiaturę ekranową, to potrzebna jest wersja Qt 5.12.x. Na cały projekt obowiązywał 5.9.5 LTS, więc sprzęt stał się swego rodzaju wyjątkiem do reguły.

Po regularnych aktualizacjach przy testowaniu zestawienia połączenia z serwisem dostałem komunikat:

QSslSocket::startServerEncryption: TLS initialization failed

Po długim poszukiwaniu odpowiedzi, jak wymusić w CMake’u, aby Qt korzystał z tej konkretnej wersji OpenSSL-a, batalii metodą prób i błędów, a także po dyskusji na forum znaleźliśmy wspólnie rozwiązanie.

Od 5.12.4 wymagany jest OpenSSL w wersji większej niż 1.1.0.

Problem, który tutaj się pojawił, to sztuka poszukiwania informacji. Cały czas poszukiwałem jak wymusić swoje rozwiązanie i w sumie cały czas o to pytałem, zamiast zajrzeć do dokumentacji, aczkolwiek bardziej do informacji, co się zmieniło w danej wersji, by znaleźć informacje o tej poprawce.

Zauważyłem też duży minus, z którym w końcu zderzyłem się w praktyce, a nie tylko w literaturze. Otóż w pewnym momencie, człowiek nie nadąża być ze wszystkim na bieżąco. W takich momentach jeszcze bardziej zachęcam Cię do nauki nie tylko konkretnej technologii, żeby być specjalistą w tej jednej wąskiej dziedzinie, ale oprócz tego w kilku innych rzeczach, bardziej uniwersalnych, mniej związanych bezpośrednio z treścią kodu, który wytwarzasz.