wtorek, 28 listopada 2017

Dlaczego dystrybucje wydawnicze i KDE to nieporozumienie

Tytuł to pewien skrót, albowiem poprawny winien brzmieć: dlaczego dystrybucje o wydawniczym modelu niedostosowanym do wydań oprogramowania KDE oraz bez repozytoriów typu backport, które są do owych wydań dostosowane, to nieporozumienie. Jak widzicie - nie tylko się nie zmieści, ale i nikt go nie przeczyta. Najpierw w skrócie o tym jak wyglądają tzw. wydawniczy model dystrybucji linuksa. Otóż po fazie testów jest publikowana wersja. Najczęściej faza testów trwa jakiś czas i wówczas - również najczęściej - całe oprogramowanie, jakie znajduje się w repozytorium zostaje zamrożone w swoich wersjach. W chwili wydania mamy zatem ściśle określone elementy w takiej dystrybucji, które swoją aktualność miały w chwili zamrożenia wydania. Oczywiście jeśli ten element nie uległ jakiejś zmianie, to w chwili wydania jest również aktualny. Jeśli jednak wyszła nowa wersja takiego oprogramowania, to najczęściej nie zostanie ona uwzględniona w wydaniu finalnym. Dodatkowo, najpopularniejsza spośród dystrybucji wydawniczych, jaką jest rodzina Ubuntu ma ściśle określone daty (a w zasadzie miesiące) wydań. Pojawia się zawsze w kwietniu i październiku. Oprogramowanie tam uwzględnione - często - pochodzi sprzed bodaj trzech miesięcy przed pojawieniem się takiego wydania i stanowi paczki źródłowe przejęte z Debian Sid. Niektóre dystrybucje wydawnicze udostępniają repozytoria z nowszymi wersjami oprogramowania, tzw. backports. Te repozytoria zawierają jednak zwykle wyłącznie część paczek, a nie wszystkie jakie są w niej zawarte. Jednocześnie przez cały okres życia takiego wydania, dana dystrybucja chwali się, że "wspiera" to wydanie. Pół biedy, gdy twórcy takiej dystrybucji wyraźnie stwierdzają czego owe wsparcie dotyczy. Dobrym przykładem może tu być Debian, który wyraźnie stwierdza, że w okresie funkcjonowania Debian Stable zapewnia jedynie poprawki bezpieczeństwa, a wersje oprogramowania nie zostają zmienione. Dużo częściej jednak twórcy dystrybucji posługują się wyłącznie nośnym PR-owym stwierdzeniem "zapewniamy wsparcie" i na tym poprzestają. Mało kto już doczyta się, że np. zauważone błędy należy zgłaszać w ten sposób, że jeśli dotyczą one paczkowania, to winny być one zgłoszone opiekunom tych paczek, jeśli natomiast błąd dotyczy samego oprogramowania, to winien być zgłoszony jego twórcom. Ogólnie mówiąc - jeśli znajdziemy błąd i np. po przeanalizowaniu informacji o tym jak dany program winien być skompilowany, zauważymy, że brakuje jakiejś zależności, to jest to błąd opiekunów paczki (to jedynie przykład). Jeśli jednak wszystko wskazuje na to, że paczka jest poprawnie zbudowana, to najczęściej błąd został popełniony przez twórców danej aplikacji, czy biblioteki. Jednocześnie musimy sobie zdać sprawę z tego, że praktycznie nie istnieje dystrybucja, która przejmowałaby kod źródłowy określonej aplikacji i zapewniała mu opiekę przez cały okres trwania danego wydania. Owe poprawki bezpieczeństwa najczęściej są zapewniane w ten sposób, że na istniejący kod nakłada się patch, który często (choć nie tylko) pochodzi od twórców aplikacji, bądź po prostu został zaimplementowany do rozwijanego kodu. Przejdźmy teraz do modelu wydawniczego oprogramowania skupionego pod szyldem KDE. Dla jasności, będę musiał coś zagmatwać. Otóż musimy pamiętać o tym, że oprogramowanie to nie jest samodzielne w tym sensie, że niemal zawsze wymaga jakiegoś elementu pochodzącego z frameworka Qt, który - choć z dużym udziałem programistów KDE - jest jednakże oddzielnie rozwijany. Na oprogramowanie KDE składają się zatem: - framework Qt 5, - framework KDE Framework 5, - środowisko graficzne Plasma 5, - aplikacje dostarczane w ramach KDE Applications, - pozostałe aplikacje rozwijane pod szyldem KDE (np. Caligra, Krita i wiele innych). Framework Qt 5 Biblioteki Qt nie istnieje jakiś z góry zadany standard wydawniczy. Od wydania 5.6 mamy jednak zawsze dwie linie wydawnicze: "zwykłą" (bieżącą, aktualną) oraz LTS. Owe "bieżące" zwykle mają około roczny okres wsparcia, wersje LTS - trzyletni. Nigdy nie jest z góry wiadome, która wersja uzyska status LTS (do tej pory mieliśmy dwa takie przypadki, choć wcześniejsze wydania też były wspierane dłużej niż przez rok). Okres wsparcia poszczególnych wydań "bieżących" oraz LTS może (i tak jest) częściowo zachodzić na siebie. Obecnie zatem mamy dwa wydania LTS: 5.6, którego okres wsparcia ukończy się w marcu 2019 oraz 5.9 ze wsparciem do maja 2020 r. Spośród dwu wydań, jakie były pomiędzy, Qt 5.7 nie ma już wsparcia, a wsparcie Qt 5.8 skończy się w styczniu 2018. Co ciekawe, wsparcie dla Qt 5.5 skończy się nieco później, bo w marcu przyszłego roku. Framework KF5 To jakby pierwsza "warstwa", która budowana jest na Qt 5 i rozszerza jego funkcje umożliwiając pracę środowiskom graficznym (głównie Plasma 5, jednakże co raz częściej inne środowiska budowane na Qt 5 sięgają po KF5) oraz aplikacjom KDE. Tutaj przyjęty model wydawniczy jest prosty. W pewnym uproszczeniu można powiedzieć, że istnieje jedno wydanie KF5. Pierwsze, pochodzące z lipca 2014 r. Każde następne wydanie jest wersją poprawkową, choć nie istnieje żadna reguła, która uniemożliwia wprowadzanie zmian w zakresie funkcjonalności KF5, czy też uniemożliwiająca "dodanie" jakiegoś frameworku do obecnie rozwijanych (tak było np. z Baloo, które z aplikacji stało się frameworkiem). Okres funkcjonowania danego wydania KF5 jest bardzo krótki i wynosi około miesiąca (nowe wydanie pojawia się obecnie w drugą sobotę każdego miesiąca). Niezmiernie rzadko zdarza się, by pomiędzy wydaniami pojawiła się jakaś poprawka (o ile pamiętam, a używam KF5 bodaj od wersji 5.0, albo 5.1, to sytuacja taka zaszła dwa razy wobec dwu jego elementów). W zasadzie nikt nigdy nie stwierdził oficjalnie, że któraś wersja KF5 jest wersją LTS, choć mówiło się tak przy okazji dwu wydań. Trudno jednak uzyskać potwierdzenie takiej informacji na stronach KDE. Plasma 5 Obecnie wykrystalizował się następujący model wydawniczy: - wydania LTS, - wydania bieżące. Podobnie jak w przypadku Qt 5 LTS, tak i w przypadku Plasma 5 nie jest z góry wiadome, które wydanie stanie się LTS, choć z odpowiednim wyprzedzeniem informacja taka jest podawana. Jak do tej pory zawsze pojawienie się wydania LTS Plasma 5 było związane z pojawieniem się Qt 5 LTS. Obecnie istnieje jedno wydanie Plasma 5 LTS i jest to wersja 5.8, której ostatnie wydanie poprawkowe będzie miało miejsce na początku kwietnia 2018. W tym czasie, od końca stycznia 2018 będzie już dostępne nowe wydanie Plasma 5 LTS o numerze 5.12, które uzyskało wsparcie do (przynajmniej tak winno być) września 2019 r. Oprócz wersji LTS istnieją jeszcze wydania "bieżące", które obecnie pojawiają się cztery razy do roku i mają wsparcie przez trzy miesiące (tj. w okresie trzech miesięcy od daty wydania otrzymują pięć poprawek). Terminy ukazywania się poprawek obu rodzajów wydań są ściśle określone i wyznacza je tzw. ciąg Fibonacciego. KDE Applications Obecnie od dłuższego już czasu zestaw aplikacji składający się na KDE Applications pojawia się trzy razy do roku, w ściśle określonych miesiącach: kwietniu, sierpniu oraz grudniu. Wsparcie ich oferowane jest tylko w ramach danego wydania i otrzymują one zawsze trzy wersje poprawkowe. Pozostałe aplikacje rozwijane w ramach KDE Te aplikacje nie mają żadnych reguł odnośnie przyjętego modelu wydawniczego. Mogą istnieć takie, w których przyjęty został jakiś model wydawniczy, mogą być zupełnie swobodnie rozwijane, a nowe wersje ukazują się wówczs, gdy tak zdecydują twórcy tego oprogramowania, zaś wersje poprawkowe - gdy istnieje taka potrzeba. Co oznacza wsparcie i wersje poprawkowe Poszczególne wydania wszystkich elementów składających się na oprogramowanie rozwijane w ramach KDE cechuje dwojaka natura. Otóż nadanie danemu elementowi jakiegoś numeru wersji oznacza zastabilizowanie jego funkcjonalności. Przez okres jego wsparcia nie pojawi się tu żadna nowa funkcja (wyjątek to Plasma 5.8 w zakresie wsparcia Waylanda). Nowe funkcje mogą, ale nie muszą zawitać w nowym wydaniu. W przypadku wszystkich innych z wyżej wymienionych grup, z wyjątkiem aplikacji, które nie składają się na KDE Applications, do nowego wydania mogą trafić jakieś nowe elementy (nowe "aplikacje"), ale mogą z niego zostać usunięte. Np. do Plasma 5.11 trafiło Plasma Vault, ale z KDE Applications 15.12 wypadną wszystkie nieprzeportowane do KF5/Qt5 a nadto Blogilo. W okresie swego "życia", wszystkie elementy uzyskują "wsparcie", które ogranicza się do wprowadzania poprawek dostrzeżonych błędów oraz w zakresie tłumaczeń. Należy zauważyć, że te błędy, których nie udało się naprawić w ramach danego wydania, w nowym wydaniu nie zostają "porzucone". Ich naprawą zajmą się nowe wydania. Dlatego można powiedzieć, że każde "wyższe" wydanie danego oprogramowania KDE jest wydaniem poprawkowym dla poprzedniego. Plasma 5.11 przyniosła nowy składnik (Plasma Vault), przyniosła zmiany w zakresie funkcjonalności (Ustawienia systemowe), ale również i można powiedzieć przede wszystkim, stanowiła wersję poprawkową dla Plasma 5.11. Podobnie dzieje się w przypadku aplikacji składających się na KDE Applications, a nawet w przypadku owych "pozostałych" aplikacji, zwłaszcza tych, które zostały już przeportowane do KF5. Zależności Bez piekła tym razem. Każdy składnik oprogramowania rozwijany w ramach KDE ma zwykle ustawioną minimalną wersję oprogramowania/bibliotek/frameworku, od którego zależy. Plasma 5.12 nie zbudujemy na KF5 w wersji niższej niż 5.39. KF5.39 nie zbudujemy na Qt wcześniejszej niż 5.9 itp. itd. Również poszczególne elementy w ramach KF5 są zależne od siebie, albowiem możliwość ich budowania jest uzależniona od tzw. Tier, w których są zgrupowane. Te z pierwszej grupy wymagają określonego extra-cmake-modules oraz określonej wersji Qt 5, te z Tier 2, wymagają określonej wersji z Tier 1, na której są budowane. Podobnie z Tier 3. Innymi słowy tworzy się pewna "piramida" zależności. Faktem jest natomiast, że np. nowa wersja środowiska nie musi wymagać najnowszej wersji KF5. Może się ją dać zbudować na wcześniejszej wersji. Nowa wersja a dostrzeżone błędy Jak widać z tego co wyżej, nowe wersje oprogramowania z KDE są jednocześnie wersjami poprawkowymi poprzednich. Te poprzednie ukończyły już okres swego wsparcia. Ogólnie sprowadza się to do stwierdzenia, że po okresie wsparcia nie możemy już liczyć na "naprawienie" błędu w ramach niewspieranej już wersji. Obecnie też - i słuszcznie - zgłaszając taki błąd w niewspieranej już wersji, po prostu zostanie się pouczonym o tym, że wyszło nowe wydanie i by sprawdzić, czy również błąd występuje. Dlaczego nie zrobi tego z reguły sam opiekun? Bowiem on nie ma tego samego systemu/środowiska/komputera, co ten, który błąd zgłasza. Ponownie wśród dystrybucji wydawniczych Z tego co napisałem wyżej można już wyciągnąć jakieś wnioski. Podstawowy jest taki, że oprogramowanie KDE to elementy dość skomplikowanej układanki. Wprawdzie - niekiedy - daje się zbudować jakiś jego element w opaciu o wcześniej wydane. Jeśli jednak nowsza wersja oparta jest o jakiś element, który utracił już wsparcie, to w jaki sposób owe wspacie Wam zostanie udzielone? Co z tego, że np. deweloperzy Kubuntu chwalą się wprowadzeniem do testów Plasma 5.11.3, skoro i tak oparte będzie ono o wersję KF5, która straciła już wsparcie? Jednocześnie nikt w owych dystrybucjach wydawniczych nie zapewni użytkownikowi wsparcia we własnym zakresie. Żaden znany mi zespół nie przejął kodu oprogramowania KDE. I słusznie, bowiem lepiej byłoby się już wdrożyć w ogóle w prace nad oprogramowaniem KDE w ramach tego projektu. Dodatkowo trudno też liczyć na wsparcie twórców oprogramowania, skoro oni rozwijają już coś nowszego. Zgłaszanie takich błędów co najwyżej doda im zbędnej pracy. Czy istnieje idealna dla KDE dystrybucja wydawnicza? Powiem inaczej - nie wiem. Nie interesuje mnie to zbytnio by przeglądać je wszystkie. Niemniej jednak można sobie wyobrazić, że taką dystrybucją byłaby wyłącznie taka, która skupia się na wydaniach LTS tak Plasmy, jak i Qt, a jednocześnie - właśnie w ramach owych np. backports - oferuje nowe wersje oprogramowania i KF5. Dystrybucje wydawnicze inaczej ułożone po prostu większego sensu nie mają. Mit regresji i braku stabilności Pomijam już szermowanie słowem "stabilność" i "możliwa regresja" na lewo i prawo przez zwolenników dystrybucji wydawniczych. Pomijam, że wynika to ze strachu przed nieznanym. Jeszcze częściej trudno jest w ogóle sprecyzować co znaczy "stabilność" w takim przypadku. Bez wdawania się w zbędne szczegóły po kilkuletnim już używaniu oprogramowania spod KDE z cyfrą 5, mogę stwierdzić tylko tyle: przypadki regresji sporadycznie się zdarzają. Najczęściej są one naprawiane dość szybko, w przypadku Plasma 5 otrzymując poprawki w ramach początkowego okresu wsparcia. Czy było ich wiele? Bodaj jedna, czy dwie. Dwie regresje, a nie zamierzona sytuacja. Niestety są jeszcze takie "regresje", które są wynikiem zamierzonym. Dla przykładu jakiś czas temu okna dialogowe drukowania w KDE zostały pozbawione zakładki "zaawansowane". Pozbawione zostały, albowiem miało to przejść do Qt. Niby przeszło, jednakże nie do końca. W zasadzie nawet bardziej "niby", albowiem zakładki tej jak nie było - tak nie ma. Błąd w Qt wisi od dłuższego już czasu i nic nie wskazuje na to, by ktoś się nad nim chciał pochylić. Natomiast - oprócz fazy testowej (która nie dotyczy zwykłych użytkowników; mówię tu o oprogramowaniu w wersjach przed oficjalnym wydaniem) - nie spostrzegłem od długiego czasu jakichś problemów ze stabilnością KDE. Ale cóż - już to wiele razy mówiłem - albo jestem urodzonym szczęściarzem i "u mnie działa", albo potrafię zadbać o swój system.