W czasach gdy liczy się przede wszystkim czas budowy oprogramowania, nikt nie chce wynajdywać prochu na nowo. Nawet we własnościowych projektach notorycznie używane są gotowe opensource’owe moduły i biblioteki (tajemnicą poliszynela jest, że nierzadko nie do końca zgodnie z ich licencją). A co się dzieje, jeśli taki gotowy moduł nagle przestanie być rozwijany? Konsekwencje może wówczas odczuć cały ekosystem. Deweloperzy JavaScriptu/Node.js mogą się teraz o tym przekonać, obserwując los ogromnie popularnego modułu request.
11 lat temu, u samych początków Node.js, programista Mikeal Rogers napisał prostego klienta HTTP, mającego w założeniu być najprostszym sposobem wykonywania żądań po tym protokole (oraz po HTTPS). Jako że w tym samym czasie tworzył on też Node.js Core, w swoim module wykorzystał wiele charakterystycznych dla wczesnego Node.js wzorców, takich jak standardowe callbacki czy strumienie.
Zobacz też: JetBrains prezentuje JetBrains Mono – świetną nową czcionkę dla programistów
Dziś wydany na licencji Apache 2.0 moduł Request znajduje się na liście zależności niemal 48 tysięcy innych modułów menedżera pakietów npm i jest pobierany za jego pomocą ponad 65 mln razy w ciągu miesiąca. Na liście kontrybutorów przez te 11 lat znalazło się ponad 280 programistów. I dziś właśnie, mimo tej ogromnej popularności, Request trafia do lamusa. Nie będzie już dalszych ulepszeń, projekt doszedł do swojego kresu.
Czasy się zmieniają, Node.js wraz z nimi
Mikael Rogers twierdzi, że próbował coś z tym zrobić jeszcze w 2018 roku, kiedy zauważył, jak bardzo zmienił się ekosystem JavaScriptu i jak bardzo wzorce stosowane w jego module się zdezaktualizowały. Dziś, gdy korzysta się powszechnie z takich wzorców jak async/await czy fetch, wprowadzenie Request do projektów najczęściej prowadzi do dołożenia kolejnych warstw, mających przenieść te stare wzorce na nowe. A to prowadzi do problemów z debugowaniem, spadkiem wydajności, nie mówiąc już o rosnących rozmiarach kodu.
Dlatego w 2019 roku podjął decyzję, by Request wysłać na emeryturę. Pozostanie on w takiej formie jakiej był, ekosystem JavaScriptu jest dziś zbyt duży i zbyt współzależny od siebie, by po prostu moduł wycofać z npm. Nawet jeśli nie pojawią się żadne zależne nowe moduły, jeśli nawet żadne aktualne wersje istniejących modułów nie będą zależały od Requesta, to wciąż będzie on niezbędny dla działania starszych wersji dziś używanych modułów. Inercja jest po prostu ogromna.
Zobacz również: Mozilla, Intel i Red Hat i Fastly jednoczą siły, by WebAssembly było wszędzie
Request w wersji 2.88.2 pozostanie więc na zawsze w trybie konserwacji, z oznaczeniem dla programistów JavaScript, że już jest modułem przestarzałym. Autorzy modułów zależnych od Requesta powinni zacząć się rozglądać za lepszymi zamiennikami. Sam Rogers oferuje następcę Requesta o nazwie bent, ale pojawiły się też niezależne klienty HTTP, takie jak axios i got.
Płakać chyba za modułem z poprzedniej dekady nikt nie będzie – po prostu ekosystem JavaScriptu rozwija się tak szybko, że nikt już nie jest w stanie ogarnąć całości. Dobrze jest, że kontrybutorzy przynajmniej dbają o to, by rozwój ten nie prowadził do takich problemów, jak np. zobaczyć możemy w świecie Pythona.