Przejdź do głównej treści

Strategia wersjonowania Qiskit SDK

Numery wersji Qiskit są zgodne z konwencją Semantic Versioning. Numer wersji składa się z trzech głównych komponentów: wersji głównej (major), pomocniczej (minor) i poprawkowej (patch). Na przykład w numerze wersji X.Y.Z, X to wersja główna, Y to wersja pomocnicza, a Z to wersja poprawkowa.

Przełomowe zmiany API są zarezerwowane dla wydań głównych (major). Minimalny okres między wydaniami głównymi wynosi jeden rok. Wersje pomocnicze (minor) wprowadzają nowe funkcje i poprawki błędów bez naruszania zgodności API i są okresowo (obecnie co trzy miesiące) publikowane wyłącznie dla bieżącej wersji głównej. Wersje poprawkowe (patch) dostarczają poprawki błędów zidentyfikowanych w najnowszej wersji pomocniczej każdej aktywnie obsługiwanej serii wydań (tj. wersji głównej). Jednocześnie obsługujemy co najwyżej dwie serie wydań, co ma miejsce wyłącznie w okresie nakładania się następującym po wydaniu nowej wersji głównej – opisanym dokładniej poniżej.

Harmonogram wydań

Poniżej zamieszczono orientacyjny harmonogram wydań:

Orientacyjny harmonogram wydań Qiskit

Aktualny harmonogram wydań znajdziesz w liście kamieni milowych projektu Qiskit na GitHubie, która zawsze odzwierciedla bieżący plan wydań.

Po opublikowaniu nowej wersji głównej poprzednia wersja główna jest obsługiwana przez co najmniej sześć miesięcy wyłącznie z poprawkami błędów oraz przez rok w zakresie poprawek bezpieczeństwa. W tym czasie dla tej wersji głównej publikowane są tylko wersje poprawkowe. Ostateczna wersja poprawkowa jest publikowana w momencie zakończenia wsparcia – to wydanie dokumentuje również koniec wsparcia dla danej serii głównej. Dłuższe okno wsparcia dla poprzedniej wersji głównej jest potrzebne, aby konsumenci Qiskit i ich użytkownicy mieli czas na migrację kodu. Biblioteki zależne od Qiskit nie powinny podnosić minimalnej wymaganej wersji Qiskit do nowej wersji głównej zaraz po jej wydaniu, ponieważ baza użytkowników biblioteki potrzebuje czasu na migrację do nowych zmian API. Wydłużone okno wsparcia dla poprzedniej głównej wersji Qiskit daje projektom zależnym czas na zapewnienie zgodności z następną wersją główną. Projekty zależne mogą obsługiwać jednocześnie dwie serie wydań, umożliwiając użytkownikom ścieżkę migracji.

Na potrzeby wersjonowania semantycznego publiczne API Qiskit obejmuje każdy udokumentowany moduł, klasę, funkcję lub metodę, która nie jest oznaczona jako prywatna (poprzedzona podkreśleniem _). Mogą jednak istnieć wyraźne wyjątki dla konkretnych udokumentowanych API. W takich przypadkach API będą wyraźnie udokumentowane jako niestanowiące jeszcze stabilnych interfejsów, a przy każdym użyciu tych niestabilnych interfejsów będzie aktywnie emitowane ostrzeżenie widoczne dla użytkownika. Ponadto w pewnych sytuacjach interfejs oznaczony jako prywatny jest uznawany za część publicznego API. Zwykle dotyczy to tylko dwóch przypadków: definicji abstrakcyjnego interfejsu , w której podklasy mają nadpisywać/implementować prywatną metodę jako część implementacji interfejsu, lub zaawansowanych metod niskopoziomowych o stabilnych interfejsach, które nie są jednak uważane za bezpieczne w użyciu, gdyż to na użytkowniku spoczywa obowiązek przestrzegania niezwykłości klasy/bezpieczeństwa (kanonicznym przykładem jest metoda QuantumCircuit._append).

Obsługiwane wersje Pythona, minimalna obsługiwana wersja Rusta (do budowania Qiskit ze źródeł) oraz zależności od pakietów Pythona (w tym minimalne obsługiwane wersje zależności) używane przez Qiskit nie są objęte gwarancjami wstecznej zgodności i mogą ulec zmianie w dowolnym wydaniu. Minimalne wymagania dotyczące używania lub budowania Qiskit (w tym dodawania nowych zależności) będą podnoszone tylko w wydaniach pomocniczych lub głównych, jednak poprawki mogą obejmować wsparcie dla nowych wersji Pythona lub innych zależności. Minimalna wersja zależności jest zazwyczaj podnoszona tylko wtedy, gdy starsze wersje zależności wychodzą z wsparcia lub gdy utrzymanie zgodności z najnowszym wydaniem zależności i starszą wersją jest niemożliwe.

Strategia aktualizacji

Gdy zostaje wydana nowa wersja główna, zalecana ścieżka aktualizacji polega na przejściu najpierw do najnowszej wersji pomocniczej na poprzedniej wersji głównej. Tuż przed nową wersją główną zostanie opublikowana ostateczna wersja pomocnicza. To ostateczne wydanie pomocnicze X.Y+1.0.0 jest równoważne X.Y.0, ale zawiera ostrzeżenia i informacje o przestarzałości dotyczące zmian API wprowadzonych w nowej serii głównej.

Na przykład bezpośrednio przed wydaniem 1.0.0 zostanie opublikowana wersja 0.46.0. Wydanie 0.46.0 będzie równoważne wydaniu 0.45.0, ale z dodatkowymi ostrzeżeniami o przestarzałości dokumentującymi zmiany API wprowadzone w wersji 1.0.0. Wzorzec ten będzie stosowany przy wszystkich przyszłych wydaniach głównych.

Użytkownicy Qiskit powinni najpierw zaktualizować się do tej ostatecznej wersji pomocniczej , aby zobaczyć wszelkie ostrzeżenia o przestarzałości i dostosować swoje użycie Qiskit przed próbą przejścia na potencjalnie przełomowe wydanie. Poprzednia wersja główna będzie obsługiwana przez co najmniej sześć miesięcy, aby zapewnić wystarczający czas na aktualizację. Typowym sposobem zarządzania tym procesem jest przypięcie wersji maksymalnej, aby uniknąć używania serii następnej wersji głównej do momentu potwierdzenia zgodności. Na przykład wpisanie qiskit<2 w pliku wymagań, gdy bieżąca główna wersja Qiskit to 1, gwarantuje używanie wersji Qiskit bez przełomowych zmian API.

Ograniczenie wersji do wartości mniejszej niż następna wersja główna zapewnia, że zobaczysz wszelkie ostrzeżenia o przestarzałości przed wydaniem głównym. Bez tego ograniczenia pip domyślnie instaluje najnowszą dostępną wersję.

Format serializacji QPY jest wstecznie zgodny, dzięki czemu nowe wydanie Qiskit zawsze może wczytać plik QPY wygenerowany przez wcześniejsze wydanie. Jednak format nie jest zgodny w przód, więc co do zasady nie jest możliwe wczytanie plików QPY wygenerowanych przez nowszą wersję Qiskit za pomocą starszego wydania. Aby ułatwić użytkownikom migrację między wydaniami głównymi, funkcja qiskit.qpy.dump() zawsze obsługuje co najmniej jedną nakładającą się wersję między wydaniem X.0.0 a X-1.Y.0 (gdzie Y to ostatnia wersja pomocnicza tej serii). Parametr qiskit.qpy.dump(..., version=...) umożliwia zapisywanie plików w formacie QPY, które mogą być wczytywane przez obie wersje główne z nowszego wydania. Więcej szczegółów znajdziesz w RFC 0020.

Wersje wstępne

Dla każdego wydania pomocniczego i głównego Qiskit publikuje wersje wstępne zgodne ze standardem PEP440. Zazwyczaj są to kandydaci do wydania w formie X.Y.0rc1. Wydania rc mają sfinalizowane API i służą do testowania planowanego wydania.

Należy pamiętać, że gdy publikowany jest jeden z sufiksów wersji wstępnej PEP440 (takich jak a, b lub pre), nie ma on takich samych gwarancji jak wydanie rc i jest jedynie wydaniem podglądowym. API może się zmienić między tymi wersjami wstępnymi a ostatecznym wydaniem z danym numerem wersji. Na przykład 1.0.0pre1 może mieć inne ostateczne API niż 1.0.0.

Wersje końcowe

Jeśli w opakowaniu wydania wystąpią problemy, może zostać opublikowana wersja końcowa (post-release) w celu ich naprawienia. Będą one miały formę X.Y.Z.1, gdzie czwarta liczba całkowita oznacza, że jest to pierwsze wydanie końcowe wydania X.Y.Z. Na przykład wydanie qiskit-terra (historyczna nazwa pakietu Qiskit) 0.25.2 miało pewien problem z publikacją pakietu sdist i zostało opublikowane wydanie końcowe 0.25.2.1 naprawiające ten problem. Kod był identyczny, a wersja 0.25.2.1 naprawiła jedynie problem z pakowaniem.

Jak współtwórcy mogą oznaczać przestarzałości

Zapoznaj się z przewodnikiem dotyczącym przestarzałości w repozytorium Qiskit SDK, aby dowiedzieć się, jak dodawać oznaczenia przestarzałości do kodu źródłowego.