Dlaczego nazwy pakietów zawierają numery wersji?

15

Podczas pracy z Ubuntu i innymi dystrybucjami opartymi na Debianie zauważyłem, że pakiety w repozytoriach oprogramowania często zawierają główny numer wersji.

Na przykład,

  • Apache: apache2
  • Kocur: tomcat7
  • PHP: php5
  • Wino: wine1.4
  • MySQL: mysql-server-5.5

Zauważam jednak, że nie ma apache1dostępnego pakietu, i podobny dla reszty. Jeśli nazwa pakietu zmienia się wraz z aktualizacjami oprogramowania, czy nie przeszkadza to w realizacji jednego z głównych celów zarządzania pakietami (łatwych aktualizacji)?

Jeśli jutro pojawi się Apache 3, czy będę musiał apache3ręcznie zainstalować pakiet, jeśli chcę dokonać aktualizacji? '

Tom Marthenal
źródło

Odpowiedzi:

26

Pakiety są nazywane w ten sposób, w których istnieje (lub była) potrzeba ułatwienia przejścia między dwiema głównymi wersjami pakietu, a czas potrzebny na to jest długi. W okresie przejściowym dostępne są zarówno nowe, jak i stare wersje, przy założeniu, że w przyszłości zostaną wycofane starsze wersje.

Czasami okres przejściowy ma miejsce podczas używanej wersji systemu. W przypadku niektórych pakietów zdarza się tak często, że można spodziewać się przejściowych wersji pakietów w każdej nowej wersji systemu. Narzędzia do tworzenia oprogramowania często należą do tej kategorii, ponieważ aktualizacja do nowych narzędzi według tego samego harmonogramu co wydania systemu może nie być praktyczna. Zależność mojej firmy od konkretnych wersji GCC, Autoconf i Perl może być w cyklu 5-letnim, podczas gdy mój system operacyjny może być w 3-letnim cyklu aktualizacji. W związku z tym łatwiej jest mi adoptować nowe systemy operacyjne, jeśli zawierają one moje starsze wersje niektórych pakietów oprócz tego, co było aktualne w czasie tworzenia nowego systemu operacyjnego.

Innym razem te główne zmiany wersji miały miejsce dawno temu, a teraz wszyscy korzystają z bieżącej wersji. Tak jest na przykład w przypadku Apache. Zmiana z wersji 1.3 na 2.0 była znacznie większa z punktu widzenia kompatybilności niż jakakolwiek zmiana wersji 2.x, więc kiedy wszyscy wyłączyli wersję 1.3, nie było już potrzeby oferowania wielu wersji Apache w ramach danej wersji systemu operacyjnego. Ale kiedy już wszyscy będą korzystać z apache2pakietu, nie ma zbyt dobrego argumentu za przemianowaniem go z powrotem na just apache. Spowodowałoby to niepotrzebne problemy z aktualizacją. Poza tym tam, gdzie w przeszłości istniała odczuwalna potrzeba tymczasowego zapewnienia dwóch równoległych wersji, potrzeba ta prawdopodobnie powtórzy się w przyszłości.

Ta praktyka nazywania pakietów zwykle ma miejsce tylko w przypadku bibliotek lub ważnych pakietów podstawowych. Aby uzyskać więcej peryferyjnych pakietów, należy po prostu zaktualizować do obecnej wersji.

Biblioteki są traktowane w ten sposób częściej niż aplikacje, ponieważ z natury zależą od nich inne pakiety. Im bardziej popularna jest biblioteka, tym bardziej niepraktyczne jest wymaganie, aby każdy inny pakiet zależny od niego był przebudowywany i ponownie łączony z nią wyłącznie w celu umożliwienia stopniowej aktualizacji biblioteki do nowej głównej wersji bez tego okresu przejściowego.

Często, gdy aplikacja jest traktowana w ten sposób, dzieje się tak, ponieważ zawiera element biblioteki. Na przykład Apache to nie tylko serwer WWW, ale także zapewnia programistyczny interfejs API dla wtyczek. ( mod_fooi takie.) Jeśli ktoś ma stary mod_somethinglink do ABI wtyczki Apache 1.3 i nie uaktualnił go do używania nowszego API 2.0, wygodnie jest, jeśli Twój system operacyjny nadal oferuje stary Apache 1.3, dopóki wszyscy twórcy wtyczek nie będą mieli szansy zaktualizować swoje wtyczki.

Warren Young
źródło
3

Z tego, co widziałem, przyczyny tego są następujące:

  • Pomóż migrować w głównych wersjach pakietów: kiedy PHP 5 zostało wydane, być może trzeba było zainstalować PHP 4. Pozwala to na wybór między wersjami (przynajmniej do czasu, gdy starsza wersja stanie się przestarzała).

  • Kontynuuj dostarczanie aktualizacji do starszej wersji oprogramowania (np. Po wydaniu Apache 3, może być konieczne załatanie Apache 2) bez aktualizacji do nowszej wersji głównej.

Np. Jądro Linuksa ma (na dzień dzisiejszy) stabilne wersje 3.5, 3.4.7, 3.2.24, 2.6.35.13 itd. .... Jeśli używasz 2.6.35 w systemie i chcesz go utrzymać - do tej pory, ale nie aktualizuj tego jądra, możesz zainstalować odpowiedni pakiet.

Renan
źródło