Czy powinny być publiczne wersje oprogramowania 0.x.x?

4
Riddle napisał(a):
Seken napisał(a):

Nie wiem czy zrobiles to specjalnie czy moze moje intencje byly niejasne, ale to pytanie bylo w gruncie rzeczy retoryczne. Watek nie tyczy sie tego, ze "wykryto critical vulna w mojej libce 0.x czy powinienem go fixowac niszczac kompatybilnosc wsteczna". Jezeli wydales wersje 0.x to owszem, nikomu niczego nie obiecujesz, ale tez nie widze powodu zeby cos usuwac "bo tak". Taka zwykla, ludzka uprzejmosc. Jezeli sasiadka zapuka po szczypte soli masz pelne prawo powiedziec jej, ze nie pozyczysz i zeby poszla sobie do sklepu. Pozostaje sie zastanowic czy kwestie prawne (czy w tym przypadku standardy wersjonowania) to wszystko co nas interesuje i to juz pozostawiam Tobie do oceny.

No bardzo ładnie, tylko że gdybym te wersje 0.x.x trzymał u siebie lokalnie, i wydał 1.0.0, to nikt by nie przyszedłi i nie powiedział "Wiesz co, powinieneś też wydać te wersje 0.x.x które masz". Więc wersje 0.x.x powinny być publicznie dostępne, czy nie?

Ten wątek jest podzielony, widzę że większość ludzi ma przekonanie:

  • Jeśli ich nie ma, to powinno ich nie być
  • Jeśli są, to powinny być

Nie widzicie na prawdę że te odpowiedzi są niespójne?

Czy Ty naprawde nie widzisz, ze to jest clue tego Twojego wydumanego problemu? Jezeli wydawales wersje po kolei to znaczy, ze ludzie mogli wykorzystywac starsze wersje. Jezeli "wchodzisz na rynek" z wersja 1.0.0 to logiczne jest, ze nie sa mi potrzebne wersje wczesniejsze. Stad nie rozumiem co jest takiego dziwnego w tym przekonaniu, celem udostepniania paczek jest to zeby inni z nich korzystali, prawda?

1
Seken napisał(a):

Czy Ty naprawde nie widzisz, ze to jest clue tego Twojego wydumanego problemu? Jezeli wydawales wersje po kolei to znaczy, ze ludzie mogli wykorzystywac starsze wersje. Jezeli "wchodzisz na rynek" z wersja 1.0.0 to logiczne jest, ze nie sa mi potrzebne wersje wczesniejsze. Stad nie rozumiem co jest takiego dziwnego w tym przekonaniu, celem udostepniania paczek jest to zeby inni z nich korzystali, prawda?

No, jeśli ktoś instaluje wersję 0.x.x i myśli że wszystko będzie git do końca świata, to chyba jednak coś jest nie tak z nim?

6
Riddle napisał(a):

No bardzo ładnie, tylko że gdybym te wersje 0.x.x trzymał u siebie lokalnie, i wydał 1.0.0, to nikt by nie przyszedłi i nie powiedział "Wiesz co, powinieneś też wydać te wersje 0.x.x które masz". Więc wersje 0.x.x powinny być publicznie dostępne, czy nie?

Ten wątek jest podzielony, widzę że większość ludzi ma przekonanie:

  • Jeśli ich nie ma, to powinno ich nie być
  • Jeśli są, to powinny być

Nie widzicie na prawdę że te odpowiedzi są niespójne?

nie są niespójne. są 100% logiczne.

jeśli zacząłeś wydawanie swojej biblioteki zaczynając od magicznej wersji 1.0.0, a potem wydajesz wersje 0.x.y to jaki jest sens używania tych wersji 0.x.y jeśli lepsze wersje 1.0.0+ są już dostępne? nie ma sensu.
jeśli zacząłeś wydawanie swojej biblioteki zaczynając poniżej magicznej wersji 1.0.0 i ktoś już wtedy zaczął tego używać to nie jest w porządku zmuszanie go do migracji na 1.0.0+ poprzez psucie mu builda.

jeśli wydałeś już wersję 1.0.0+ to nie ma sensu wydawania 0.x.y. jeśli jednak wydasz wtedy te wersje 0.x.y to i tak nie powinieneś ich usuwać. po prostu - wydałeś coś oficjalnie to nie usuwaj. tyle i tylko tyle.

1
Wibowit napisał(a):

bo są potrzebne do zbudowania apek korzystających z niewspieranych wersji bibliotek.

Świetnie, pielęgnujmy bugi, dziury i dług techniczny. A potem narzekanie, że w pracy nie ma rozwoju, bo wszędzie Java 1.2. :D
Jakie mam szczęście, że jestem z daleka od tego rezerwatu.

jeśli mam jakąś apkę, która działa od 5 lat nieruszana i potrzebuję zrobić w niej małą zmianę to do zbudowania jej od nowa mogę potrzebować ściągnąć wszystkie zależności od nowa (bo np. mam nowego kompa i nie mam jeszcze cache na dysku). jeśli te zależności będą usunięte u źródła to co mam wtedy zrobić? upgrade całej apki, żeby móc coś zmienić?

Takie coś nie powinno nastąpić, aktualizacja zależności powinna być robiona na bieżąco. W tej sytuacji gdy tylko pojawi się informacja, że dana zależność będzie usuwana, i trzeba zmigrować.

Seken napisał(a):

Wersja jest niewspierana? Okej zrob deprecated, daj mi 100 warningow do buildu czy cokolwiek. Niefajnie jest natomiast kiedy w poniedzialek rano chce sobie dokonczyc taska, a tu sie okazuje ze musze upgradowac biblioteke, a po drodze jeszcze x rzeczy sie skaszanilo.

No więc najpierw robi się deprecated, a po jakimś czasie usuwa. W kilka tygodni każdy powinien ogarnąć sprawę - a jak nie, to już jest jego problem.

obscurity napisał(a):

Rozumiem że usuwasz go nie tylko z repozytorium ale czyścisz też historię gita.

Jeśli uwalam paczkę, to i repozytorium gita archiwizuję.

W ogóle w normalnym świecie, poza php nie ma tematu. Raz opublikowanych paczek nie da się usunąć w żadnym szanującym się repozytorium paczek. Nie ma dylematu

A jakież to są te szanujące się repozytoria paczek w takim razie? Jest jakieś Jedyne Słuszne Oracle Artifacts?

7
Riddle napisał(a):

No, jeśli ktoś instaluje wersję 0.x.x i myśli że wszystko będzie git do końca świata, to chyba jednak coś jest nie tak z nim?

Jeśli ktoś zainstalował wersję 0.x.x w przeszłości i działała ona z jego kodem, to nie powinieneś zabierać mu możliwości odpalenia tego kodu w przyszłości

0
hauleth napisał(a):

Jeśli ktoś zainstalował wersję 0.x.x w przeszłości i działała ona z jego kodem, to nie powinieneś zabierać mu możliwości odpalenia tego kodu w przyszłości

A jeśli łamie w ten sposób zasady bezpieczeństwa?

2
somekind napisał(a):

A jeśli łamie w ten sposób zasady bezpieczeństwa?

To jest jego, a nie mój problem.

0
hauleth napisał(a):
Riddle napisał(a):

No, jeśli ktoś instaluje wersję 0.x.x i myśli że wszystko będzie git do końca świata, to chyba jednak coś jest nie tak z nim?

Jeśli ktoś zainstalował wersję 0.x.x w przeszłości i działała ona z jego kodem, to nie powinieneś zabierać mu możliwości odpalenia tego kodu w przyszłości

Jeśli ktoś chce zrobić paczki które będą resilient do końca świata, to może to ogarnąć po swojej stronie. Np zrobić forka repozytorium, skopiować paczkę i wrzucić na swój server, zrobić permalinka do konkretny hashcommita zamiast tag, albo w jakikolwiek inny sposób zabezpieczyć konkretną wersję, jeśli chce żeby kod sprzed 20 lat nadal działał za kolejne 20 lat.

3
somekind napisał(a):
hauleth napisał(a):

Jeśli ktoś zainstalował wersję 0.x.x w przeszłości i działała ona z jego kodem, to nie powinieneś zabierać mu możliwości odpalenia tego kodu w przyszłości

A jeśli łamie w ten sposób zasady bezpieczeństwa?

dlaczego windows z dziurami bezpieczeństwa się sam nie odinstalowuje?

2

Jeśli ktoś zaciąga paczkę z repozytorium paczek, to może oczekiwać, że to będzie też działało w przyszłości. Jeśli zasysa z repo, to może zakładać, że otagowane wersje się nie zmienią (aczkolwiek z tym trzeba trochę uważać). Jeśli zasysa gałąź, to nic nie może oczekiwać.

1
hauleth napisał(a):

Jeśli ktoś zaciąga paczkę z repozytorium paczek, to może oczekiwać, że to będzie też działało w przyszłości. Jeśli zasysa z repo, to może zakładać, że otagowane wersje się nie zmienią (aczkolwiek z tym trzeba trochę uważać). Jeśli zasysa gałąź, to nic nie może oczekiwać.

"Jeśli ktoś zaciąga paczkę z repozytorium paczek, to może oczekiwać, że to będzie też działało w przyszłości." na jakiej podstawie może tego oczekiwać?

Z niektórych repozytoriów można usuwać paczki, więc skąd to założenie?

Jeśli strzelam pod API, to nie oczekuję że ono będzie działało w przyszłości tak samo, nawet jak jest wersjonowane, doskonale wiem że może się zmienić - podobnie jak paczki mogą zniknąć.

2
somekind napisał(a):
hauleth napisał(a):

Jeśli ktoś zainstalował wersję 0.x.x w przeszłości i działała ona z jego kodem, to nie powinieneś zabierać mu możliwości odpalenia tego kodu w przyszłości

A jeśli łamie w ten sposób zasady bezpieczeństwa?

to bot ci to zgłasza i robi pull request z nową wersją

Riddle napisał(a):

True, ale nie odpowiada to na pytanie: "Czy biblioteki powinny mieć publiczne wersje 0.x.x?".

Tu się trzeba cofnąć do pytania - czym są wersje 0.x.x. Każdy wersjonuje po swojemu. Ja osobiście w ogóle nie publikuję nic co nie nadaje się do użytku i nie mogę nazwać 1.0. To co nazwałeś 0.3 ktoś inny by nazwał 3.0, jeszcze ktoś inny 1.3, albo 1.0-alpha3. Ciężko więc szukać zasady jak traktować wersje 0.x.x skoro nie ma zasady czym są wersje 0.x.x.
Jak już jest opublikowane to nie widzę sensu usuwania. W ogóle lubię jak wszystko w internecie jest spójne, stabilne i nie znika ani nie przemieszcza się z dnia na dzień.

Jeśli tak jak wyżej - uważasz że twój kod jest jedynie śmieciem i jest taka możliwość to usuwaj.

Tnij, k..., tnij!

3
Riddle napisał(a):
hauleth napisał(a):
Riddle napisał(a):

No, jeśli ktoś instaluje wersję 0.x.x i myśli że wszystko będzie git do końca świata, to chyba jednak coś jest nie tak z nim?

Jeśli ktoś zainstalował wersję 0.x.x w przeszłości i działała ona z jego kodem, to nie powinieneś zabierać mu możliwości odpalenia tego kodu w przyszłości

Jeśli ktoś chce zrobić paczki które będą resilient do końca świata, to może to ogarnąć po swojej stronie. Np zrobić forka repozytorium, skopiować paczkę i wrzucić na swój server, zrobić permalinka do konkretny hashcommita zamiast tag, albo w jakikolwiek inny sposób zabezpieczyć konkretną wersję, jeśli chce żeby kod sprzed 20 lat nadal działał za kolejne 20 lat.

po co mi commity i tagi z repozytorium kodu źródłowego jakiejś zależności której używam? obchodzi mnie artefakt w repozytorium artefaktów (a więc przede wszystkim kod biblioteki, ale już po kompilacji), bo przecież budując swoją aplikację ze źródeł nie ściągam źródeł wszystkich zależności, by je skompilować od nowa.

jak dla mnie to możliwość usuwania artefaktów wręcz prowadzi do niebezpieczeństwa, bo jeśli jeden człowiek pousuwa swoje artefakty i swoje konto, a potem inny człowiek stworzy konto i artefakty o tej samej nazwie i wrzuci tam złośliwy kod to "zabawa" murowana.

0
obscurity napisał(a):
Riddle napisał(a):

True, ale nie odpowiada to na pytanie: "Czy biblioteki powinny mieć publiczne wersje 0.x.x?".

Tu się trzeba cofnąć do pytania - czym są wersje 0.x.x. Każdy wersjonuje po swojemu.

No ja mówię o semantic versioning: https://semver.org/lang/pl/

10

Semantic versioning oznacza tylko, że wersje 0.x.y mają niestabilne API, ale to nie znaczy, że są jakieś złe, upośledzone i cokolwiek z nimi jest nie tak.
Są publiczne - skoro są opublikowane. Po prostu ostrzegamy użytkowników, że może będą mieli więcej pracy przy zmianach wersji. Koniec.
Zero to całkiem normalna liczba i nie ma co przykładać do tego jakichś innych reguł.

4
Riddle napisał(a):
obscurity napisał(a):

Tu się trzeba cofnąć do pytania - czym są wersje 0.x.x. Każdy wersjonuje po swojemu.

No ja mówię o semantic versioning: https://semver.org/lang/pl/

A no to już złamałeś te zasady:

Skąd mam wiedzieć, kiedy wydać 1.0.0?
Jeśli twoje oprogramowanie jest w użyciu w produkcji, powinno prawdopodobnie już być 1.0.0. Jeśli masz stabilne API, z którego zaczęli korzystać użytkownicy, powinieneś mieć 1.0.0. Jeśli dużo się martwisz o kompatybilność wstecz, powinieneś prawdopodobnie już mieć 1.0.0.

Riddle napisał(a):

Moja biblioteka jest używana w trzech produkcyjnych projektach u mnie w pracy, + na 4programmers, + jeszcze w kilku innych projektach które widzę na githubie, więc pod tym względem raczej jest "stabilna".

Wychodzi że dawno powinieneś mieć wersję 1.0.0

3
Riddle napisał(a):

Jeśli strzelam pod API, to nie oczekuję że ono będzie działało w przyszłości tak samo, nawet jak jest wersjonowane

Jak API jest wersjonowane, to ja będę oczekiwał właśnie, że w przyszłości ono będzie działało tak samo. Jeśli pobieram paczkę, to zakładam, że dana wersja będzie działała tak samo w przyszłości. Właśnie po to mamy wersjonowanie, inaczej to nie ma sensu.

5
Riddle napisał(a):
Seken napisał(a):

Czy Ty naprawde nie widzisz, ze to jest clue tego Twojego wydumanego problemu? Jezeli wydawales wersje po kolei to znaczy, ze ludzie mogli wykorzystywac starsze wersje. Jezeli "wchodzisz na rynek" z wersja 1.0.0 to logiczne jest, ze nie sa mi potrzebne wersje wczesniejsze. Stad nie rozumiem co jest takiego dziwnego w tym przekonaniu, celem udostepniania paczek jest to zeby inni z nich korzystali, prawda?

No, jeśli ktoś instaluje wersję 0.x.x i myśli że wszystko będzie git do końca świata, to chyba jednak coś jest nie tak z nim?

Ale wyjasnisz wreszcie czemu tak bardzo chcesz komus popsuc dzien i zmusic do upgrade libki? Placisz za hostowanie tej biblioteki? Usuwanie czegos z dnia na dzien jest zwyczajnie nie w porzadku, a dorabianie sobie do tego ideologii to jest wersja 0.x.x wiec moge z nia zrobic wszystko to jakies spaczenie polegajace na zamilowaniu do utrudniania zycia innym. Jezeli masz potrzebe zeby zlamac kompatybilnosc to tak rob, jezeli wrzucisz rzeczy ktore nie beda sie pokrywac z wersja 0.x to tez tak zrob. Problem polega na tym, ze Ty chcesz po prostu dla zasady wywalic sobie wczesniejsze wersje. Czego oczekujesz od uczestnikow tej konwersacji, bo juz sie zgubilem.

0

Kod źródłowy możesz zapisać na dysku. Czasy oszczędzania kart perforowanych już minęły.

Nie dojdzie do sytuacji że kolejny release będzie wymagał załatania dziur w karcie i tworzenia releasa na karcie z odzysku :)

4

Nie używałbym biblioteki, której wersje dystrybucyjne znikają. Nie ma to jak być zmuszoinym do hotfixa w jakimś zakurzonym kodzie i przy okazji być zmuszonym do poświęcenia dodatkowego dnia na przebudowę połowy systemu, bo tamtej wersji biblioteki już nie ma, a nowa ma prawie takie same API.

4

Sprawdziłem jeszcze Composera (bo zakładam, że o bibliotekę w PHP chodzi) - to cudo używa tagów na GH jako źródła wersji. To już totalnie zabija jakąkolwiek dyskusję o tym "czy warto trzymać stare wersje", bo przecież to jest dosłownie darmowe (podpisany tag to będzie maks parę kilobajtów). Więc usuwanie "starych" tagów z repo Gita, zwłaszcza po tym jak je opublikowałeś, to już totalnie rak.

0
hauleth napisał(a):

To jest jego, a nie mój problem.

No jeżeli tak, to jego, a nie moim problemem jest to, że próbuje ściągać z netu coś, czego nie ma.

A w świecie dorosłych ludzi o tym, czyj to problem decyduje ten, kto za to płaci. Ludzie, dla których ja pracuję, uważają, że dostosowanie bibliotek do wymagań jest zadaniem zespołów opiekujących się tymi bibliotekami. A zespoły korzystające z tych bibliotek mają je aktualizować, aby dostosować się do standardów.

obscurity napisał(a):

to bot ci to zgłasza i robi pull request z nową wersją

Jaki bot?
Nowa wersja już przecież jest, i to ta, z której należy korzystać. Po co jeszcze jakieś requesty?

piotrpo napisał(a):

Nie używałbym biblioteki, której wersje dystrybucyjne znikają.

Sęk w tym, że tu nawet nie ma mowy o wersjach dystrybucyjnych, tylko o jakichś prereleasach. Te mogą zawierać jakieś nie do końca sensownie zaprojektowane wersje API, jakieś tymczasowe podejścia, rzeczy, które zostały setki razy zmienione. To taki brudnopis po prostu - coś, do wyrzucenia, czego każdy używający prereleasu powinien być świadomy.

Nie ma to jak być zmuszoinym do hotfixa w jakimś zakurzonym kodzie i przy okazji być zmuszonym do poświęcenia dodatkowego dnia na przebudowę połowy systemu, bo tamtej wersji biblioteki już nie ma, a nowa ma prawie takie same API.

O soft trzeba dbać na co dzień, a nie tylko od święta.


Cały ten argument o tym, że skasowanie jakiegoś artefaktu jest w ogólności nieprawidłowy. Co z tego, że wersja biblioteki będzie istnieć, skoro API czy inny zasób chmurowy, albo mechanizm uwierzytelniania, z którego korzystała została wyłączona? Soft przecież nadal nie będzie działać.

Parę pytań:

  • czy Wy utrzymujecie jakieś biblioteki, czy tylko tak sobie teoretyzujecie w temacie?
  • czy braliście udział w jakiejkolwiek migracji technologicznej na poziomie całej organizacji, że tak Was szokuje całkowite porzucenie starych wersji narzędzi?
  • macie jeszcze w szafie garnitury z komunii, bo może kiedyś jeszcze je założycie?

I taka ciekawostka na koniec - w procesy CI można sobie nawet wpiąć narzędzia typu vulnerability scanner, które sprawiają, że Wasza wspaniała aplikacja się nie zbuduje, jeśli będzie korzystała z przestarzałych wersji bibliotek. Ale domyślam się, że nie korzystacie, bo przecież nikt nie będzie Was do aktualizacji zależności zmuszał. :)

7
somekind napisał(a):

Sęk w tym, że tu nawet nie ma mowy o wersjach dystrybucyjnych, tylko o jakichś prereleasach. Te mogą zawierać jakieś nie do końca sensownie zaprojektowane wersje API, jakieś tymczasowe podejścia, rzeczy, które zostały setki razy zmienione. To taki brudnopis po prostu - coś, do wyrzucenia, czego każdy używający prereleasu powinien być świadomy.

Otóż nie.

OP pisał, że korzysta z semantic versioning. Wersje 0.x.y w semantic versioning to nie jest żaden prerelease. To zwykły release - z tym tylko, że ostrzega, że API może się zmienić w przyszłych wersjach, nic nie mówi o bezpieczeństwie/stabilności wersji biblioteki.
Prelease w semver oznacza się dodając zarostek -alpha (np. 1.1.1-alpha) lub inny podobny.

Dodatkowo, co może niektórych zaszokować, nawet oznaczenie wersji biblioteki jako 1.x.y , albo 2.x.y również nie oznacza, że nie ma ona dziur i jest bezpieczna.

Parę pytań:
czy Wy utrzymujecie jakieś biblioteki, czy tylko tak sobie teoretyzujecie w temacie?
czy braliście udział w jakiejkolwiek migracji technologicznej na poziomie całej organizacji, że tak Was szokuje całkowite porzucenie starych wersji narzędzi?
macie jeszcze w szafie garnitury z komunii, bo może kiedyś jeszcze je założycie?

Ten zestaw pytań świadczy o tym, że ewidentnie mylisz utrzymywanie projektu, z utrzymywanie ogólnodostępnej biblioteki. Gdzie, po prostu - jeśli raz wypuściłeś jakąś wersję to możesz założyć, że ktoś z tej wersji korzysta - i nie masz na to wpływu. I jeśli taką wersję usuniesz to robisz problem nie tylko użytkownikom, ale i potencjalnie sobie (!!!). Choćby dlatego, że nie da się potem łatwo sprawdzić, że problem został naprawiony w nowej wersji (skoro nie da się odpalić starej dla porównania).

3
somekind napisał(a):

Sęk w tym, że tu nawet nie ma mowy o wersjach dystrybucyjnych, tylko o jakichś prereleasach. Te mogą zawierać jakieś nie do końca sensownie zaprojektowane wersje API, jakieś tymczasowe podejścia, rzeczy, które zostały setki razy zmienione. To taki brudnopis po prostu - coś, do wyrzucenia, czego każdy używający prereleasu powinien być świadomy.

Jeżeli budujesz wersję 0.3.4.dupa i ją publikujesz to robisz release. Mogę być świadomy, że to niedojrzałe oprogramowanie i ponosić ryzyko zmian w API, ograniczonej funkcjonalności, potencjalnie dużej liczby błędów, ale nie tego, że któregoś dnia przestanie działać całe CI/CD, bo akurat ten kawałek wyleciał z jakiegoś repozytorium.

O soft trzeba dbać na co dzień, a nie tylko od święta.

To jak często mam sprawdzać, czy przypadkiem nie pojawiła się nowa wersja biblioteki w usłudze, której dotykam raz na rok? Jest, działa itd.


Cały ten argument o tym, że skasowanie jakiegoś artefaktu jest w ogólności nieprawidłowy. Co z tego, że wersja biblioteki będzie istnieć, skoro API czy inny zasób chmurowy, albo mechanizm uwierzytelniania, z którego korzystała została wyłączona? Soft przecież nadal nie będzie działać.

O ile dobrze kojarzę, mowa o bibliotece jakoś tam wspomagającej uruchamianie wyrażeń regularnych. Usługi w chmurze też nie znikają z dnia na dzień, tylko są odpowiednio anonsowane z wyprzedzeniem

  • czy Wy utrzymujecie jakieś biblioteki, czy tylko tak sobie teoretyzujecie w temacie?

W publicznych repo? Nie. Coś tam kiedyś wypuściłem na fali przekonania "dorosły programista musi mieć swoją bibliotekę".

  • czy braliście udział w jakiejkolwiek migracji technologicznej na poziomie całej organizacji, że tak Was szokuje całkowite porzucenie starych wersji narzędzi?

Jeżeli mówimy o bibliotece wewnątrz organizacji, to perspektywa jest trochę inna.

  • macie jeszcze w szafie garnitury z komunii, bo może kiedyś jeszcze je założycie?

Gdybym przestał rosnąć w wieku 9 lat, to pewnie nadal bym miał.

I taka ciekawostka na koniec - w procesy CI można sobie nawet wpiąć narzędzia typu vulnerability scanner, które sprawiają, że Wasza wspaniała aplikacja się nie zbuduje, jeśli będzie korzystała z przestarzałych wersji bibliotek. Ale domyślam się, że nie korzystacie, bo przecież nikt nie będzie Was do aktualizacji zależności zmuszał. :)

Korzystam, podbijamy zależności, czasami nie podbijamy, bo podatność ma zablokowane w inny sposób wektory ataku, czasami stosujemy inne środki zaradcze. Nadal, warto mieć możliwość zbudowania artefaktu w wersji sprzed N lat.

Trochę tez nie rozumiem problemu, dlaczego miałbym usuwać wydanie jakiejś wersji publicznie dostępnej biblioteki.

2
piotrpo napisał(a):

To jak często mam sprawdzać, czy przypadkiem nie pojawiła się nowa wersja biblioteki w usłudze, której dotykam raz na rok? Jest, działa itd.

To nie jest tak prosto. Bo jednak śledzić choćby CVE warto :-)
(i dowiadywać się, że jest kolejna dziura w bibliotece do czytania XML umożliwiająca DOS, i mimo że u Ciebie jedyny XML to konfiguracją loga :-) )
No i pewnie pamiętasz log4j...

Po drugie, wiele frameworków ma swój cykl release - jeśli nie będziesz aktualizował kodu regularnie, to w pewnym momencie migracja na nową wersję będzie dramatem.
(Angular chyba najlepszym przykładem)

2

@jarekr000000: Nie jest prosto, śledzenie CVE mamy na poziomie artefaktów w repozytoriach artefaktów, bo co z tego, że nie zbuduję usługi z podatną biblioteką, jak ona już od 2 lat chodzi na produkcji? Z drugiej strony nie będę rwać włosów z głowy z powodu jakiegoś komponentu z podatnością, jeżeli wszelkie możliwe wektory ataku są zablokowane.
Działa to na tyle dobrze, że cały dramat z log4j udało nam się wykryć, sklasyfikować i wstępnie załatać, zanim korporacyjne security zdążyło się obudzić i powiedzieć "o k....a". Nie jest idealnie, ale raczej dajemy radę.
Oczywiście pozostaje pytanie o zarządzanie podatnościami i czy warto rzucać wszystko dla przypadków takich jak opisałeś, albo nawet tego log4j w usłudze do której dostęp jest ściśle kontrolowany.

1
somekind napisał(a):
hauleth napisał(a):

To jest jego, a nie mój problem.

No jeżeli tak, to jego, a nie moim problemem jest to, że próbuje ściągać z netu coś, czego nie ma.

A w świecie dorosłych ludzi o tym, czyj to problem decyduje ten, kto za to płaci. Ludzie, dla których ja pracuję, uważają, że dostosowanie bibliotek do wymagań jest zadaniem zespołów opiekujących się tymi bibliotekami. A zespoły korzystające z tych bibliotek mają je aktualizować, aby dostosować się do standardów.

w przypadku większości otwartego oprogramowania koszty hostowania artefaktów ponosi centralne publiczne repozytorium artefaktów, np: oss sonatype:
https://central.sonatype.org/publish/producer-terms/

The Central Repository is provided by Sonatype to the public as a community service. There is no charge to use the Central Repository, and Sonatype pays all the costs for hosting, bandwidth, etc. The components made available for download via Central are licensed to users by the developers who posted them and are subject to the terms and conditions of the applicable licenses accompanying such components.

inaczej mówiąc: po wrzuceniu artefaktu do repozytorium, koszty przejmuje repozytorium. koniec.

to, że ktoś opublikował bibliotekę nie oznacza, że zawsze musi ją naprawiać i dostosowywać do wszelakich przypadków użycia na życzenie użytkowników, no chyba, że sam na siebie założy taki kaganiec, ale po co? jak używam czegoś bez płacenia to chyba logiczne, że nie mogę wymagać napraw natychmiast, tzn. że ktoś zrobi coś za darmo na moich warunkach.

poza tym wymuszanie aktualizacji to też argument z czapy, bo może być biblioteka:

  • darmowa do wszelkiego rodzaju użytku
  • w wersji 2.3.4 opublikowana 10 lat temu, mająca dzisiaj 10 jakichś tam egzotycznych podatności
  • brak jest nowych wersji i brak jest chęci by ją poprawiać
  • leży sobie w centralnym publicznym repozytorium, które ponosi wszystkie koszty hostowania, bo taką ma misję
  • jest sporo oprogramowania, które używa tej biblioteki, bo biblioteka po prostu działa
  • co wtedy zrobić? usunąć, bo ktoś widzi gdzieś koszt utrzymywania? ta wersja, która jest dostępna przecież niby nie nadaje się do użycia już, bo nie spełnia jakichś tam wydumanych standardów

niektórzy pewnie zapomnieli, ale dość niedawno była ciekawa afera z usunięciem javascriptowej biblioteki left-pad z npma:
https://qz.com/646467/how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code/
https://www.theregister.com/2016/03/23/npm_left_pad_chaos/
https://drewdevault.com/2021/11/16/Cash-for-leftpad.html

4

licencje dla wolnego oprogramowania zwykle jasno mówią, że jest 0 jakichkolwiek gwarancji, a ich użytkownik ponosi koszty niewłaściwego działania np:

https://en.wikipedia.org/wiki/MIT_License

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

https://www.apache.org/licenses/LICENSE-2.0

  1. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

  2. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

NO WARRANTY

  1. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  2. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

a mimo tego ludzie używają takiego oprogramowania masowo

4
somekind napisał(a):
  • czy Wy utrzymujecie jakieś biblioteki, czy tylko tak sobie teoretyzujecie w temacie?

Tak, mam parę bibliotek które w sumie mają jakieś 200k pobrań. Tylko jedna z nich jest w wersji 1.0.

  • czy braliście udział w jakiejkolwiek migracji technologicznej na poziomie całej organizacji, że tak Was szokuje całkowite porzucenie starych wersji narzędzi?

Tu nie chodzi o porzucenie starych narzędzi. Nikt nie mówi, że masz te stare wersje rozwijać czy wspierać. One mają sobie tak wisieć jakby ktoś ich używał i tyle.

I taka ciekawostka na koniec - w procesy CI można sobie nawet wpiąć narzędzia typu vulnerability scanner, które sprawiają, że Wasza wspaniała aplikacja się nie zbuduje, jeśli będzie korzystała z przestarzałych wersji bibliotek. Ale domyślam się, że nie korzystacie, bo przecież nikt nie będzie Was do aktualizacji zależności zmuszał. :)

Ale to jest zupełnie niezależne od tego czy stare wersje mają wisieć w repo czy nie.

0
jarekr000000 napisał(a):

OP pisał, że korzysta z semantic versioning. Wersje 0.x.y w semantic versioning to nie jest żaden prerelease. To zwykły release - z tym tylko, że ostrzega, że API może się zmienić w przyszłych wersjach, nic nie mówi o bezpieczeństwie/stabilności wersji biblioteki.
Prelease w semver oznacza się dodając zarostek -alpha (np. 1.1.1-alpha) lub inny podobny.

No OP tak pisał, ale też zostało to obalone, więc w ogóle nie rozważam tego w ten sposób. Wersje < 1.0.0 uważam za bezużyteczny brudnopis, jeśli tak nie jest, to w ogóle nie widzę sensu w ankiecie z tego wątku.

Dodatkowo, co może niektórych zaszokować, nawet oznaczenie wersji biblioteki jako 1.x.y , albo 2.x.y również nie oznacza, że nie ma ona dziur i jest bezpieczna.

Niemniej jednak wersja 1.0.0, to jest ewidentnie osiągnięcie jakiegoś etapu, na którym którym autor uznał, że jest to produkt według jakichś tam jego kryteriów gotowy do puszczenia w świat. (Co bynajmniej nie oznacza idealnego na wieki.)

Ten zestaw pytań świadczy o tym, że ewidentnie mylisz utrzymywanie projektu, z utrzymywanie ogólnodostępnej biblioteki.

Trochę nie czaję tej psychoanalizy, wszak biblioteka też może być projektem.
Padły zarzuty, że nigdy nie powinno się usuwać już udostępnionych bibliotek, więc po prostu podałem kilka powodów, dla których może mieć to sens. Wydaje mi się, że skoro ktoś nie widzi w tym sensu, to znaczy, że po prostu się z takimi przypadkami nie spotkał w praktyce. A typowe dla sporej części programistów jest podejście z założeniem, że jeśli ktoś działa inaczej niż oni, to znaczy, że robi źle.

Gdzie, po prostu - jeśli raz wypuściłeś jakąś wersję to możesz założyć, że ktoś z tej wersji korzysta - i nie masz na to wpływu. I jeśli taką wersję usuniesz to robisz problem nie tylko użytkownikom, ale i potencjalnie sobie (!!!). Choćby dlatego, że nie da się potem łatwo sprawdzić, że problem został naprawiony w nowej wersji (skoro nie da się odpalić starej dla porównania).

To nie jest żaden problem, usunięcie paczki nie oznacza usunięcia historii źródeł.
Tylko zauważ, że ja piszę o usuwaniu poprzednich wersji major, więc to nie jest "naprawienie problemu", tylko niekompatybilne zmiany w sposobie działania. (Np. zmiana sposobu uwierzytelniania w jakiejś usłudze.) Tu nie ma czego porównywać, bo stara wersja nie będzie już działać, a nowa może mieć nowe problemy.

piotrpo napisał(a):

To jak często mam sprawdzać, czy przypadkiem nie pojawiła się nowa wersja biblioteki w usłudze, której dotykam raz na rok? Jest, działa itd.

Spytaj swojego team leadera. :)
Jak dla mnie mniejszym kosztem jest konieczność aktualizacji przy okazji implementacji zmiany niż ciągłe udostępnianie niedziałających bibliotek.

O ile dobrze kojarzę, mowa o bibliotece jakoś tam wspomagającej uruchamianie wyrażeń regularnych. Usługi w chmurze też nie znikają z dnia na dzień, tylko są odpowiednio anonsowane z wyprzedzeniem

No to przecież ja napisałem o poinformowaniu z wyprzedzeniem.

Jeżeli mówimy o bibliotece wewnątrz organizacji, to perspektywa jest trochę inna.

Tak, nie, może.
To jest moja perspektywa, bo tym się zajmuje. Takie wewnętrzne biblioteki nieraz też mają więcej użytkowników niż te publicznie dostępne.
No i stawianie ogólnych tez na podstawie zignorowania jakiejś części rzeczywistości nie daje dobrych efektów.

Gdybym przestał rosnąć w wieku 9 lat, to pewnie nadal bym miał.

To było pytanie retoryczne. :P

hauleth napisał(a):

Ale to jest zupełnie niezależne od tego czy stare wersje mają wisieć w repo czy nie.

Owszem, chciałem jedynie zwrócić uwagę na fakt, że to nie jest mój wymysł, ze używanie starych wersji jest problematyczne. Tak, żeby może odetkać komuś perspektywę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1