Open Source to niełatwy kawałek chleba. W minionym tygodniu szala goryczy przelała się dla autora biblioteki core-js – jednej z najważniejszych zależności większości współczesnych projektów.
Nie od dziś wiadomo, że Open Source to ciężki kawałek chleba. Na typową bibliotekę tego typu spływa sporo zapytań o nowe funkcjonalności, jeszcze więcej błędów w coraz to nowych przypadkach brzegowych, a z dnia na dzień przybywa ludzi niezadowolonych z tempa rozwoju projektu. Zainteresowanie nie przekłada się zwykle na kontrybucje ze strony społeczności, nie mówiąc już o wsparciu finansowym. Co kilka miesięcy szala goryczy przelewa się dla kolejnego dewelopera w pełni oddanego Open Source. W tym tygodniu padło na autora biblioteki core-js
.
Intrygująca historia core-js
core-js
to najpopularniejsza biblioteka dostarczająca polyfille dla JavaScrip. Dla niewtajemniczonych, polyfill to swego rodzaj adapter umożliwiający uruchomienie nowoczesnego kodu w starych przeglądarkach. Gdyby nie polyfille, to nadal skazani bylibyśmy na pisanie w archaicznym ES5, a z nowości w standardzie EcmaScript cieszylibyśmy z conajmniej kilkuletnim opóźnieniem.
Jak populany jest core-js? Z testów przprowadzonych przez autora, spośród 1000 najpopulaniejszych portali ponad 500 wykorzystuje core-js. Liczba firm uzależnionych od core-js z pewnością przekracza 50%. Nawet jeśli te największe aplikacje firm nie są zależne od biblioteki, to z dużym prawdopodobieństwem możemy stwierdzić, że w portfolio firmy istnieje co najmniej kilka mniejszych narzędzi, które taką zależność posiadają.
Jak to zwykle bywa, życie pisze najlepsze scenariusze. W 2012 roku Denis Pushkarev został full-stack deweloperem i zaczął na codzień obcować z językiem JavaScript. Sfrustrowany powolną adopcją standardu ES6 zaczął on na własne potrzeby implementować niezbędne pollyfille. Pod koniec 2014 roku zdecydował się on opublikować swoją paczkę pod nazwą core-js
. Niedługo potem paczka ta stała się jedną z najważniejszych zależności Babela oraz kilku innych popularnych frameworków.
Na fali sukcesu swojej biblioteki, Denis Pushkarev zdecydował poświęcić się w pełni Open Source. Na razie projekt nie miał odpowiedniego finansowania, ale autor liczył, że jeśli będzie wykonywał dobrą robotę, to pieniądze prędzej czy później się pojawią. Jeśli nie w postaci odpowiednich dotacji, to w postaci firmy, która zatrudni go, aby mógł w pełni poświęcić się swojej bibliotece. Tygodnie mijały, a budżet projektu nie powiększał się. Wtedy to Denis Pushkarev podjął decyzję, która zaważyła na jego przyszłości. Aby ograniczyć koszty życia i nadal rozwijać core-js
zdecydował się wrócić do ojczystej Rosji.
Niedługo po powrocie do Rosji wydarzyła się tragedia. Późnym wieczorem autor core-js
wracał samochodem do domu. Pech chciał, że na jego drodze pojawiły się dwie pijane, ubrane w ciemne kolory nastolatki. Jak relacjonują świadkowie, dziewczyny w ramach wygłupów szamotały się miedzy sobą i w ferworze emocji wpadły na drogę. Denis Pushkarev nie zdażył zareagować na czas – jedna z dziewczyn zmarła na miejscu, natomiast druga trafiła w ciężkim stanie do szpitala.
Niestety rosyjski prawa nie działał w tej sytuacji na korzyść kierującego pojazdem. Pomimo tego, że w miejscu wypadku nikt nie powinien zjadować się na drodze, wina jasno postawiona była po strone kierowcy i groziło mu nawet kilka lat więzienia. Jedynym rozsądnym wyjściem z sytuacji była ugoda z rodzinami poszkodowanych. W wyniku negocjacji pojawiła się kwota 80k$ plus koszty prawnicze. Dla Denisa Pushkareva była to kwota zaporowa. Nie pozostało mu jednak nic innego jak spróbować wreszcie spieniężyć swoją bibliotekę core-js
.
Pierwszym z pomysłów autora core-js
było wyświetlanie zachęty do wsparcia w trakcie instalacji biblioteki. Odpowiedź społeczności odbiegała jednak od oczekiwań autora. Zamiast finansowego wsparcia, otrzymał on wysyp nienawistnych komentarzy. Kolejną próba była odpowiednia konfiguracja npm found
. Jak się pewnie domyślacie, to również nie przyniosło zamierzonych efektów. W końcu powiedzcie szczerze – czy kiedykolwiek słyszeliście o tej funkcjonalności? W ramach ostatecznej próby autor core-js
w komunikacie wyświetlanym podczas instalacji biblitoeki zamieścił ogłoszenie o pracę. To również nie przyniosło zamierzonego efektu.
Potrzebnej kwoty nie udało się zgromadzić na czas i w styczniu 2020 roku Denis Pushkarev trafił do więzienia. Przez 10 miesięcy zmuszony był do pracy w fabryce chemikaliów wśród prawdziwych przestępców. Po tym okresie został warunkowo wypuszczony na wolność i wrócił do pracy nad core-js
.
Niedawno minęły dwa lata odkąd Denis Pushkarev opuścił więzienie, a sytuacja core-js
nadal nie uległa poprawie. Do pracy nad biblioteką autor gromadzi około 2k$ dolarów miesięcznie. Wystarczająco, aby utrzymać się w rosyjskich realiach. W porównaniu z innymi deweloperami zatrudnianymi przez duże firmy – wciąż zdecydowanie za mało.
W minionym tygodniu w Denisie Pushkarevie coś pękło i postawił sprawę jasno: albo w końcu znajdą się pieniądze na rozwój core-js
, albo całkowicie porzuci on projekt. Decyzji ciężko się dziwić – w życiu dewelopera niedawno pojawił się syn, a to zawsze mocno zmienia życiowe priorytety.
Zainstaluj teraz i czytaj tylko dobre teksty!
A jak to wygląda u innych bibliotek Open Source?
Początkiem roku 2021 świat obiegły informacje, że budżet na rozwój Babela powoli zaczyna się kończyć. Pomimo poczatkowego sukcesu zbiórki na Open Collective, coraz mniejsza kwota wpływała na konta deweloperów. Początkowy cel stworzenia 4 osobowego zespołu coraz bardziej odpływał w strefę marzeń, a utrzymanie obecnego 3 osobowego zespołu stawało się coraz trudniejsze. Zamieszanie wokół projektu wywołało chwilową poprawę, ale po dwóch latach miesięczny budżet projektu wrócił do stanu wyjściowego. Co prawda Babela wspiera kilka dużych firm (np. AirBnB, GitHub czy Salseforce), ale kwota 16k$ miesięcznie nie robi wrażenia jak na projekt będący fundamentem współczesnego internetu.
W połowie 2021 roku, Marak Squires (autor wielu popularnych na npm bibliotek) opublikował post zatytuowany „Monetizing Open Source is Problematic” . Mniej więcej w tym samy czasie Marak dodał do swojej najpopularniejszej biblioteki faker.js Issue „No more free work from Marak – Pay Me or Fork This”. Pół roku później Marak sfrustrowany sytuacją postanowił całkowicie usunąć z sieci bibliotekę faker.js. Kilka tygodni później do biblioteki color.js deweloper celowo dodał krytycznego buga, a następnie zgłosił ironiczne Issue, w którym opisywał jak w pocie czoła pracuje nad jego naprawą. Jak możecie się spodziewać, reakcje społeczności na tak radykalne kroki były… lekko mówiąc mieszane. Jedni popierali ekstremistyczne ruchy dewelopera i przyznawali mu pełne prawo do swojego kodu. Inni twierdzili, że działania tego typu są toksyczne i nie przybliżają nas do rozwiązania problemów.
Więcej o historii finansowania Babela i dramie z faker.js przeczytacie w:
Frontend Weekly vol. 37 – Babelowi powili zaczyna brakować budżetu
Frontend Thursday vol. 70 – tajemnicze zniknięcie Faker.js i wschodzące gwiazdy 2021
Frontend Thursday vol. 71 – pożegnanie angular.js i ciąg dalszy historii faker.js
Problemy z Open Source nie występują tylko w naszym JavaScriptowym community. W 2015 roku Steve Marquess zrezygnował z dalszego rozwoju OpenSSL – jednej z krytycznych części obecnej infrastruktury sieciowej. W tym przypadku nie chodzio jednak o kwestie finansowe, a o nierealne oczekiwania wobec projektu utrzymywanego przez jedną osobę. Inną głośną historią ze społeczności Open Source jest odejście Sarah Sharp z projektu Linux kernel. W tym przypadku chodziło o toksyczną społeczność stworzoną wokół projektu i opór wobec wprowadzenia Code of Conduct.
Istnieje druga strona barykady. Niektórzy twórcy wokół projektów Open Source starają się budować start-upy. Lista jest naprawdę długa, dlatego na poparcie swojej tezy przytoczę tylko kilka przykładów: Next.js (4 rundach finansowania na ponad 300M$), Deno (2 rundy finansowania na ponad 20M$), Bun (1 runda finansowania na ponad 7M$) czy Prisma (2 rundy finansowania na ponad 50M$). W ostatnim roku sporo tego typu start-upów znalazło schronienie pod skrzydłami większych firm. Wspomnieć wystarczy chociażby ostatnie przejęcie Gatsby przez Netlify, Remix przez Shopify czy Ionic przez Outsystems.
Innym trendem, który mogliśmy zaobserwować w ostatnich latach, jest wyławianie przez duże firmy autorów obiecujących bibliotek i zatrudnianie ich na pełny etat. Tak zrobił chociażby Vercel z twórcą Svelte, czy Netlify z twórcami Solid.js i Eleventy. Takie ruchy mają zazwyczaj solidne uzasadnienie biznesowe. Vercel dostarcza infrstrukturę sieciową idealną do hostowania SvelteKit. Zarówno Solid.js jak i Eleventy idealnie wpisują się w JAMStack, czyli główny obszar biznesowy Netlify.
Więcej o wspomnianych przejęciach przeczytacie w:
Netlify kupiło Gatsby | Frontend Weekly vol. 123
Gatsby kontratakuje – Frontend Weekly vol. 112
Krótka historia romansu Hydrogen i Remix | Frontend Weekly vol. 111
Bun rośnie jak na drożdżach – Frontend Weekly vol. 102
Warto pamiętać, że nie każdy wartościowy projekt da się przekształcić w start-up i nie każdy wartościowy projekt znajdzie firmę, dla której będzie on strategicznie kluczowy. Historia pokazuje natomiast, że na finansowe wsparcie ze stron użytkowników biblioteki, zazwyczaj nie mamy na co liczyć.
Czy zniknięcie core-js
naprawdę zmieni coś w naszym życiu?
Czy mem przygotowany przez „XKCD” ma coś wspólnego z rzeczywistością? Świetny przykład, który od razu przychodzi mi do głowy to historia 11 linijkowej biblioteki left-pad
. 28-letni deweloper Azer Koçulu był jednym z wielu deweloperów Open Surce mocno przywiązanych do tradycyjnych wartości tej społeczności. Jedną z utrzymywanych przez niego od lat bibliotek był „kik”. W marcu 2016 roku odezwała się do niego nowopowstała firma „kik” prosząc, aby przemianował swoją paczkę w npm. Rozmowa od próśb przeszła do negocjacji finansowych, a następnie do prawniczych gróźb. Sfrustrowany deweloper postanowił całkowicie usunąć swoje biblioteki z internetu. W ten oto sposób pod koniec marca deweloperzy na całym świecie zaczęli mierzyć się z tajemniczym błędem left-pad is not in the npm registry.
Większość z deweloperów nigdy nie słyszała o left-pad
, a jednak w jakiś sposób zepsuł on miliony aplikacji. Jak się pewnie domyślacie – left-pad
był zależnością zależności naszych zależności. Na tyle popularną zależnością, że jego usunięcie zepsuło na kilka godzin możliwość budowani większości aplikacji w internecie. Był to również pierwszy przypadek, kiedy npm przywrócił usuniętą bibliotekę.
W przypadku core-js
biblioteka zamiast zniknąć z sieci zostanie po prostu zawieszona. Standard ECMAScript nadal będzie się prężnie rozwijał, ale bez core-js
nie będziemy w stanie szybko adaptować nowych funkcjonalności. Może więc ktoś przejmie rozwój biblioteki? Na to również się nie zanosi. W 2020 roku deweloperzy Babela zakomunikowali, że nie posiadają odpowiednich zasobów do przejęcia projektu. Jeśli nie oni, to ciężko znaleźć inny projekt z odpowiednim zakresem kompetencji. W takim razie, może na rynku istnieją jakieś sensowne alternatywy? I tak i nie. Alternatywy istnieją, ale są dużo mniej popularne i zazwyczaj oferują tylko malutki wycinek potrzebnych funkcjonalności.
Jaka więc przyszłość czeka core-js
? Po wydaniu komunikatu na konto autora core-js
wpłynęla spora kwota. Pytanie tylko jak systematyczne będą wpłaty na zbiórkę i czy nie okaże się, że gdy kurz opadnie, to wszystko wróci do stanu sprzed kilku tygodni.
Zainstaluj teraz i czytaj tylko dobre teksty!
Krytyka wobec Denisa Pushkareva
Na koniec zostawiłem sobie temat, którego autor core-js
bardzo stara się unikać w swoich publikacjach, a który regularnie wypływał w licznych dyskusjach w internecie – polityki. Kilka miesięcy temu w sieci pojawiła się wypowiedź Denisa Pushkareva, w której winą za wojnę między Rosją i Ukrainą obarczył obie strony. Niejednokrotnie w swoich wypowiedziach odwołuje się on też do wyboru między dwoma złymi stronami. Z drugiej strony, sam deweloper podkreśla, że nie popiera Rosji i nawet gdyby chciał, to ze względu na wyrok w zawieszeniu, nie jest w stanie obecnie opuścić kraju.
Niezależnie od tego jakie jest Wasze zdanie na temat mieszania polityki i Open Source, mój reporterski obowiazek nie pozwolił mi pominąć wypływających tak często w dyskusjach faktów. To, czy i jak polityka wpływa tutaj na postrzeganie całej sytuacji, pozostawiam Waszej subiektywnej ocenie.