Zemsta programisty Open Source. Psuje swój kod i skłania do refleksji

Zemsta programisty Open Source. Psuje swój kod i skłania do refleksji

Zemsta programisty Open Source. Psuje swój kod i skłania do refleksji
Źródło zdjęć: © Getty Images | Tor Lindqvist
Wojciech Kowasz
10.01.2022 20:53

Gorący poniedziałek dla wielu programistów. Autor bardzo popularnych bibliotek Open Source intencjonalnie wprowadził do nich poważny błąd i opublikował. Problem dotknął setek tysięcy zależnych projektów, a my zastanawiamy się, czy to tylko kolejna ciekawa historia, czy lampka ostrzegawcza dla branży.

Osoby dramatu - colors oraz faker - to pakiety NPM wykorzystywane w aplikacjach uruchamianych w środowisku Node.js, czyli na przykład takich jak serwis dobreprogramy. Biblioteka colors pozwala kolorować tekst drukowany w konsoli i jest często używana przez samych programistów w procesie debugowania czy monitorowania aplikacji. Jest niezwykle popularna, notuje 23 miliony pobrań tygodniowo. Pakiet faker zaś umożliwia generowanie losowych, nieprawdziwych danych (np. nazwisk, adresów e-mail) w celu testowania aplikacji. Jest "trochę" mniej popularny - zaledwie 2,5 miliona pobrań każdego tygodnia.

W Polsce długi weekend krótko po Nowym Roku, a na świecie niektórzy nie próżnują i wydają nowe wersje swoich bibliotek. Wśród nich Marak Squires, autor między innymi colors i faker właśnie. Programiści, których projekty korzystają z choćby jednej z tych dwóch zależności, na pewno mocno się zdziwili, gdy przyszli w poniedziałek do pracy. Przykładowo: nowy faker praktycznie przestał działać, a colors po aktualizacji wpadał w nieskończoną pętlę i drukował na ekranie napis "LIBERTY LIBERTY LIBERTY" oraz tonę przypadkowych znaków. Doprowadzał tym samym do zawieszenia aplikacji.

Jeden z użytkowników GitHuba pokazał, jak działa "zaktualizowana" wersja colors.
Jeden z użytkowników GitHuba pokazał, jak działa "zaktualizowana" wersja colors.© dobreprogramy | Wojciech Kowasz

Społeczność na tropie

Początkowo podejrzewano, że biblioteka padła ofiarą ataku. Bywało już tak wcześniej w przypadku pakietów NPM - w październiku 2021 do pakietu ua-parser-js (8 milionów pobrań tygodniowo) został wstrzyknięty złośliwy kod, który udało się opublikować jako nową wersję biblioteki i masowo zaczęli pobierać ją inni programiści. Kilka dni później podobny los spotkał bibliotekę rc (12 milionów) oraz coa (8 milionów). Szybko jednak okazało się, że tutaj powód jest inny...

Jak to bowiem w przypadku bibliotek Open Source, kod colors i fakera znajdował się na GitHubie i stamtąd był publikowany. Wystarczyła chwila, by przekonać się, że wspomnianą nieskończoną pętlę, jak i kilka innych niespodzianek, zostawił nie kto inny, a sam autor bibliotek. Odpowiedni commit został szybko namierzony, toczy się tam obecnie zresztą niemała dyskusja, podobnie jak na Reddicie. Jakkolwiek patetycznie to brzmi, wszyscy zastanawiają się - dlaczego właściwie Marak zrobił światu to, co zrobił, i jak daleko może się posunąć?

Biorąc pod uwagę sarkastyczne wypowiedzi autora oraz odkopaną przez serwis Bleeping Computer wypowiedź z listopada 2020, gdzie Marak zapowiada "koniec pracy za darmo", można domyślać się powodów. Faktem jest, że te miliony pobrań nie biorą się z niczego. Programiści z najmniejszych i największych firm na świecie korzystają bezpłatnie z tysięcy bibliotek, w tym z dzieł Maraka, w swojej codziennej pracy, czyli w budowie innych aplikacji, często bardzo rozbudowanych, o krytycznym znaczeniu, za których stworzenie sami biorą niemałe pieniądze.

Od razu jednak na myśl przychodzą dwa zdroworozsądkowe wnioski. Po pierwsze, publikując kod na bardzo liberalnej licencji MIT w GitHubie Marak godził się przecież na to, że zostanie on bezpłatnie pobrany i wykorzystany komercyjnie. W ten sposób przecież funkcjonuje społeczność Open Source. Po drugie, jeśli nie chciał kontynuować pracy nad projektem, nikt go do tego nie zmuszał - mógł po prostu skończyć go utrzymywać, mógł też oddać stery komuś innemu ze społeczności. Marak postanowił jednak, że po nim choćby potop i wszyscy muszą się o tym przekonać "na twardo".

Co ciekawe, GitHub 6 stycznia, czyli po uszkodzeniu pierwszego pakietu faker, zawiesił konto Maraka na podstawie "naruszenia zasad użytkowania serwisu", ale chyba dość wątła to była podstawa, bo decyzja została szybko cofnięta. Bądź co bądź to sam autor wprowadził zmiany w swoim własnym projekcie, a że przypadkiem używały go miliony programistów na świecie... Być może jednak to właśnie ten ban tak zirytował Maraka, że postanowił podobnie zagrać na nosie użytkownikom znacznie bardziej popularnego pakietu colors.

Co dalej? NPM przywrócił paczki do poprzednich, działających wersji. Programistom korzystającym z obu bibliotek raczej sugerowalibyśmy jednak poszukanie alternatyw, a Marakowi parę głębokich oddechów. Czy po tym "happeningu" ktoś go zatrudni i faktycznie zapłaci za jego pracę? Firmy często doceniają bezinteresowny wkład programistów w świat Open Source, ale tutaj... "życzymy powodzenia".

Abstrahując od tego konkretnego przypadku, warto przygotować się na to, że podobne sytuacje będą się powtarzać i to nie tylko w świecie programistów. Administratorzy sieciowi mogą pamiętać choćby przypadek Supronetu z 2009 roku, gdzie zwyczajna pomyłka jednej osoby w konfiguracji protokołu BGP i wpisanie parametru w złe okienko spowodowała masowe awarie internetu w sporej części świata przez blisko godzinę.

Czas na chwilę refleksji

Zarówno w świetle tej weekendowej dewastacji, jak i ataków z ubiegłego roku czy wspomnianej pomyłki administratora sprzed lat, to samo pytanie wciąż i wciąż pozostaje aktualne. Czy przypadkiem w internecie nie ufamy sobie za bardzo, polegając zbytnio na dobrych intencjach innych?

Do jazdy samochodem trzeba mieć prawo jazdy, a do tworzenia aplikacji internetowych, zarządzania infrastrukturą sieciową czy chociażby udostępniania bibliotek takich jak colors - tylko klawiaturę. Użytkownicy, programiści, administratorzy - wszyscy wierzymy na słowo w umiejętności ludzi współtworzących czy zarządzających internetem. Nie mamy jednak za bardzo możliwości ani często kompetencji do ich weryfikacji. Jednocześnie chcemy, by internet był wolny i niezależny od nacisków, polityki, czyjegoś partykularnego interesu.

Liczymy też na siłę anonimowej "społeczności", która może i ma zdolność do samonaprawy, z czasem dąży do stanu równowagi, ale jak widać jest bardzo podatna na błędy czy zwyczajną ludzką złośliwość. Z drugiej strony to właśnie takie społeczności zbudowały fundamenty dzisiejszego internetu.

Programy

Zobacz więcej
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (160)