W najnowszym odcinku rozmawiamy na temat Deno, czyli najnowszej alternatywy dla Node.js. Twórca Node.js po pracy w Google postanowił powrócić do środowiska JS i stworzyć nową, lepszą wersję Node.js.
Deno to runtime na silniku V8, czyli dokładnie tym samym, co Node.js. Mamy oczywiście kilka ulepszeń jak sandbox, TypeScript by default, wbudowany package manager.
Czy Deno jest w stanie zastąpić Node.js? Czy warto zainwestować trochę czasu i rozejrzeć się po ekosystemie Deno?
Zapraszam do wysłuchania rozmowy.
Bartek Witczak
Witam, panie Marku.
Marek Piechut
Witam, panie Bartku.
Bartek Witczak
Jak tam dzisiaj? W końcu zebraliśmy się, żeby nagrać.
Marek Piechut
Tak, zebraliśmy się. Ja dzisiaj popatrzyłem trochę w ciekawy temat, który przynajmniej dla mnie jest ciekawy. Ten temat to mianowicie jest Deno, które ma tam już bodajże wersje 1.7, 1.300, 1.coś tam. Dla niezorientowanych, co to w ogóle jest Deno, to bardziej w sumie chciałem, żebyśmy porozmawiali sobie bardziej właśnie filozoficznie niż technicznie, ale najpierw zacznę może od tego, co to w ogóle jest. Ty Bartku w ogóle jesteś w temacie trochę trochę?
Bartek Witczak
Tak. Jestem w temacie. Oczywiście przygotowałem się, także będziemy walczyć.
Marek Piechut
No dobra, to ja zacznę od tego co to jest Deno. To jest taka dosyć ciekawa bestia, mianowicie to jest alternatywa dla Node stworzona, co ciekawe, przez oryginalnego twórcę Node, który go porzucił i poszedł do Go, bo uznał, że tak powinno się pisać software. Jednak wrócił do tej swojej koncepcji, że jednak Node był spoko i zaczął pisać swojego Node jeszcze raz i powiedział, że tym razem napisze go dobrze. I jeżeli popatrzeć trochę na rozpiskę tego Deno, to tam jest dużo takich ciekawych check-boxów jak na ten moment, czyli licencja MIT. Tak, jest fajnie, każdy może robić co chce. To jest V8 jako VM plus Rust to jest napisane w Rust-cie - to jest +10 od razu do lansu. No i Typescript jest wbudowany by default. Więc to są takie rzeczy, które są bardzo, bardzo na czasie. Takie rzeczy, które tam ten Ryan Dahl, czyli oryginalny twórca Node i twórca Deno podkreśla dosyć mocno, to jest to, że jest wbudowane security, to znaczy, że twoja aplikacja nie będzie mogła sobie szaleć po dysku czy coś takiego bez zgody przy uruchomieniu, co w Node w tym momencie jest możliwe.
Bartek Witczak
Na tym security chciałbym, żebyśmy się chwilę zatrzymali, bo tutaj rzeczywiście ten element, że jest secure by default, jest tam często podkreślany i to jest coś, o czym on mówił w ogóle jak tworzył Node, że rzeczywiście tego powiedzmy, że soundboxowania bardzo brakuje, ale jak ja tak rozkminiałem to security, no to ono działa tam na takiej zasadzie, że jeżeli będziemy odpalali naszą aplikację, to musimy dać explicit wjazd do dysku, do sieci, do takich rzeczy.
Marek Piechut
Tak, to jest moim zdaniem też problematyczne, bo z jednej strony mówienie, że jest security i mówimy, że: tak, bo security mamy, bo my mamy dostęp do dysku, na który musisz się zgodzić, ale z drugiej strony nie zgadzasz się ani per-folder, ani per-biblioteka, tylko po prostu per-wszystko, to sprawia, że właściwie każdy praktycznie odpali appkę z flagą minus pozwól na wszystko i daj mi spokój.
Bartek Witczak
Dokładnie. I właśnie tak sobie myślałem, że wiesz, bierzesz jakąś, zaciągasz bibliotekę, która np. potrzebuje dostępu do dysku. I ta biblioteka jakby po prostu jakby explicite zgadzasz się, dobra, to damy tej aplikacji dostęp do dysku, ale to oznacza, że teraz wszystkie inne rzeczy, które masz u siebie w projekcie, mają też dostęp do dysku. I to jest takie soundboxowanie na zasadzie: musisz wyrazić zgodę, ale, tak jak mówisz, jak już wyrazisz zgodę, to tak naprawdę wszystkie kolejne rzeczy, które będziesz pobierał, już mogą sobie hasać po dysku, po sieci, po wszystkim.
Marek Piechut
To jest też taka rzecz w stylu, że nasze security polega na tym, że pozwolimy appce na dostęp do dysku albo do sieci, albo tam nie wiem, co tam jeszcze zostało właściwie, do środowiska, tak, do zmiennych środowiskowych. Tylko nie wiem, kto pisze aplikacje w Node, które nie potrzebują dostępu do dysku ani do sieci. No to do zmiennych środowiskowych to może jeszcze, chociaż i tak ta konfiguracja przyjdzie ze zmiennych środowiskowych, więc właściwie wszyscy włączają tę flagę. Żeby oddać sprawiedliwość z tego, co się orientuję, to to nie jest finalny model tego security. Tak że to jest OK, to jest gdzieś tam w powijakach. Chociaż to do mnie właściwie wiesz, co powiem ci, że do mnie to jeszcze nie przemawia z jednego powodu, mianowicie takiego, że prawdopodobnie i tak 90% wszystkich aplikacji w Node będzie odpalany w kontenerze, jakimś dockerze czy w czymś podobnym i wtedy nawet dostęp do dysku nikogo jakoś szczególnie nie boli.
Bartek Witczak
No bo to nie odpalasz tego z dostępem do własnego dysku, gdzie wszystko jest.
Marek Piechut
Z drugiej strony można jakieś tam próbować wykradać hasła czy coś, jeżeli są, ale to też pewnie są przez ENVa. Naciągane no ale jeżeli to się trochę tam rozwinie i to security będzie jakieś mądrzejsze, to czemu nie?
Bartek Witczak
Dobra. Idźmy dalej.
Marek Piechut
Dobra z takich innych fajnych rzeczy, które moim zdaniem są akurat bardzo fajne to jest możliwość robienia jednego execa z całej aplikacji i to jest fajna sprawa. Znalazłem też coś takiego dla Node, ale tam to jest jakoś naszpadlowane przez kogoś gdzieś tam. Ale z drugiej strony tutaj to, że możesz zbudować tą jedną binarkę, no to szczególnie przy tych zastosowaniach nie do końca serwerowych, bo nie wiem, czy wszyscy mają świadomość, że np. w IOT jest Node używany itd. w takich różnych zastosowaniach dziwnych na Raspberry Pie’ach to pewnie ma trochę sensu, jeżeli chodzi o dystrybucję aplikacji i w ogóle zarządzanie tym wszystkim, bo tam dockera nie odpalasz. Więc pewnie wygodniej jest dużo wysłać komuś jednego execa.
Bartek Witczak
To jest bardzo fajne i wydaje mi się, że tam trochę inspiracją mogło być to Go.
Marek Piechut
Tak, i tam w ogóle widać dużo inspiracji Go, bo jak się spojrzy na bibliotekę standardową czy takie rzeczy, to ona jest bardzo inspirowana Go. Pakiety się nazywają tak samo, jest tak samo formater wbudowany np. taki do kodu. Nawet to się nazywa tak samo jak w Go. Wszystko jest bardzo, bardzo Go’owato zrobione. To jest spoko, nie spoko. No bo nie wiem jak dobrze popatrzeć po tym API Node to tam nie oszukujmy się widać lata juniorskiego wklejania kawałków kodu przez milion różnych ludzi. Jest bardzo niespójnie i czasami jest totalnie w kosmos. 7 API do tego samego różnych. Tam parametry się różnią. Najpierw to jest pierwsze, potem to jest pierwsze itd.
Bartek Witczak
A powiedz mi co sądzisz o tym, że jakby Deno to jest zarówno jakby Runtime i package manager?
Marek Piechut
To jest taka ciekawa sprawa, bo z jednej strony mi się troszkę podoba, ja dodam to, że tam jest właśnie ten motyw, że DENO ładuje kodzik prosto z URL, tak? Czyli my robimy zgodnie z tym jak jest standard w ECMA scripcie, tak jak się ładuje moduły w przeglądarce, czego nikt nie robi, to tak się ładuje moduły w DENO, czyli podajemy tam URL, on sobie ściągnie, zcashuje i odpala, nie potrzeba npm mieć. Nawet nie można mieć.
Bartek Witczak
Nawet nie można, bo na razie jest niekompatybilne w ogóle z npm.
Marek Piechut
I chyba nie będzie, bo tam chyba jest bardzo duży opór do tego npm. Czemu się nie dziwię, bo to też jest dobry sajgon.
Bartek Witczak
No tak, ale z drugiej strony trochę już tam jest rzeczy nasypanych, w tym npm i jakby tutaj też jest taka akcja.
Marek Piechut
No tak, bo tam jest ta kwestia, że on nie jest zgodny z Common JS, więc te rzeczy z npm pewnie nie bardzo będą działać. Więc trochę mi się to podoba właśnie z tego względu, że to jest takie standard based i tak dalej, że ten Sajgon npm nie wszedł, ale z drugiej strony musisz robić jakieś takie dziwne rzeczy, żeby nie wklejać tych URL wszędzie tam. I jest metoda, żeby to rozwiązać, no ale póki co trzeba to robić ręcznie, w jakimś pliku wszystkie importy i wtedy je aliasujesz i stamtąd importujesz. Ale nie, aż tak mnie to nie boli. Szczerze mówiąc, trochę mi się podoba, coś innego.
Bartek Witczak
Mnie się podoba. Ja nie jestem szczególnie zwolennikiem YARN-a ani rzadnych takich rzeczy. Dla mnie jakby budowanie aplikacji w Node to jest praktycznie by default - instalujesz Node i npm. A jakby zastanawiałem się często, dlaczego jest tak, że Node to jest po prostu runtime i masz do tego package managera osobno, bo to jakby dla osób, które wchodzą do środowiska, to często może być takie niezrozumiałe. No nie, że dlaczego tam jest coś innego jak tymi zależnościami się zarządza, jak to wszystko wygląda i po prostu wydaje mi się, że to do końca nie jest. Wiesz potrzebne.
Marek Piechut
To jest standardowy problem środowiska JS, ale to jest moja historia i w ogóle ona świetnie obrazuje, to co się dzieje. To jest npm, który w wersji trzeciej czy którejś powiedział, że nie będzie rozwiązywał peer dependencies i w wersji czwartej powiedział, że jednak będzie rozwiązywał. A w wersji piątej powiedział, że będzie, ale w inny sposób, po prostu stabilność jest nic nie warta.
Bartek Witczak
Dokładnie. Dlatego jakby dla mnie to jest, powiedzmy, że ja bym to przypisał jako zaletę, tak, no bo ty zostajesz coś wbudowanego, to działa w ten sposób. Tak, tu jest runtime, to jest package manager.
Marek Piechut
Tym bardziej że on jest właśnie zgodny z tym, jak to działa w przeglądarce, że to nie jest tak jak w npm i w Node, z oczywistych powodów, bo nie było wcześniej modułów w ECMAScript. Tak że to jest coś innego, tylko właśnie to jest standardowa metoda importowania rzeczy w JS.
Bartek Witczak
No dobra, no to przejdźmy do tego mięsa. W ogóle dlaczego to powstało? Po co to jest?
Marek Piechut
Dobra, jeszcze zanim, to ja tylko dorzucić z takich nie technicznych rzeczy, bo dlaczego w ogóle ten temat mnie poruszył? Bo czytałem ostatnio o tym, że właśnie to jako tam już w wersji 1.0 ono było prawie rok temu, że dostało dosyć duże inwestowanie i mocno się rozwija, jeżeli chodzi o taki biznesowy kierunek, tzn. powstało coś jak Deno Company.
Bartek Witczak
OK.
Marek Piechut
Uzbierało 4,9 miliona dolarów finansowania, co jak na standardy linii krzemowej jest bardzo niewiele, ale pewnie dosyć dużo można za to zrobić. I część inwestorów to jest standardowe VC coś tam, którzy, bardzo mnie ciekawi, co oni chcą ostatecznie na tym zarobić. Ale może tam jest jakiś ciekawy plan i jednym z inwestorów, co ciekawe, jest Mozilla Foundation. Chyba takim znaczącym. I to są te rzeczy, które sprawiły, że się tym zainteresowałem. Bo teraz właśnie przejdźmy do tego twojego pytania, bo to jakoś mi się nie klei z tym po co to wszystko.
Bartek Witczak
Dla mnie to jest o tyle ciekawe, że rzeczywiście gdyby była taka sytuacja, że to Deno powstałoby zamiast Node-a, to rzeczywiście wydaje mi się, że większość z tych, które oni jakby sobie wypisują, no to jest sensowna.
Marek Piechut
Po prostu, jak na to patrzysz to jest taki faktycznie jakby trochę Node, tylko to poprawione, to trochę wygładzone.
Bartek Witczak
Te rzeczy, gdzie popełniliśmy błędy, trochę można było zrobić lepiej, tak? I to jest jakby taka nowa, lepsza wersja. Tylko zastanawiam się, gdzie tutaj jest miejsce w momencie, kiedy ten ekosystem Nordea tak dobrze działa.
Marek Piechut
On huczy, wszystko tam działa, i nagle ktoś mówi no, ja tu poprawiłem te dziesięć procent, co jest słabe.
Bartek Witczak
Tak, i teraz jakby w ogóle zastanawiając się, że te 10% jest poprawione to wiesz, dla mnie nie ma niczego takiego, co nagle pokazałoby rzeczywiście,że to jest sensowne. Tak, teraz wszystkie Async Actions są promisami, no to wszyscy przenosimy sie do Deno.
Marek Piechut
No tak.
Bartek Witczak
Nie ma, nie ma jakby według mnie żadnego elementu, który pokazałby, że dobra, no to teraz przenieśmy się z Nodea i teraz piszmy w Deno.
Marek Piechut
To właśnie dla mnie też jest takie zastanawiające, bo ani tu nie ma takiego jakiegoś ciekawego kierunku, w stylu, że właśnie np. pójść tą stronę IOT. I powiedzieć dobra, bo mamy super mały footprint, na przykład OK, to jest jak Node ale to działa jak masz 8mb RAMu, to to znaczyłoby, że OK czyli ja od jutra, jeżeli biorę sobie RaspberryPi, to wybiorę Deno, bo nie będę musiał się borykać z performance, ale tam pod spodem jest tak samo w V8 i z takich rzeczy, które ja oglądałem, to tam performance jest na granicy błędu po prostu pomiaru.
Bartek Witczak
Zresztą nawet nigdzie nie jest napisane, że to ma być jakiś tam more performaned czy cokolwiek, że tam nie jest znacząca ta różnica. To są właśnie te rzeczy, które są powiedzmy wypisane na tym landing odnośnie Deno.
Marek Piechut
Jeżeli chodzi o to, że w ogóle to jest alternatywa dla, dla Node jako taka, po to, żeby tak rozdzielić, żeby nie było takiej monogamii Nodeowej, to ona też mi tak średnio leży , bo nadal jest tam to V8, czyli nadal to jest Google pod spodem i to aż tak dużo nie zmienia. I w sumie były takie projekty, ja to sobie przeglądałem takie rzeczy. Było dosyć dużo takich projektów, które miały zastąpić Node, w sensie one miały jakby być tą alternatywą i miały zupełnie co innego. Był np taki silnik jak Rhyno i Nashorn i to były w Javie napisane silniki. Ten Rhyno to tak sobie radził średnio, ale Nashorn miał całkiem niezłą wydajność i to działało. I dawało się to świetnie integrować z Javą. Więc jako język skryptowy do jakiś tam app-ek Javowych pewnie dobrze by się sprawdzało. Okazało się, że jednak chyba nikt tego nie potrzebował, bo w JDK 11 był deprecated a w JDK 15 został usunięty i już nie ma. Jest coś takiego dla szalonych ludzi, jak ktoś jest szalonym człowiekiem. Nazywa się Chakra Core i to jest Node JS chodzący na silniku z Internet Explorera, przepraszam, z Microsoft Edge. To jest na tyle szalony pomysł, że ja nawet powiem ci szczerze, że 1% podatku chyba bym tam przekazał. Niech ktoś tam zatańczy za to, bo szaleństwo to jest. I z takich fajnych, których mi trochę szkoda, że umarły to był Spider Node, i w ogóle jakieś wariacje z tym silnikiem SpiderMonkey, który jest w Firefox-ie, backend-owych frameworków na silniku właśnie z Mozilli. No i to też poumierało tam troszkę. Tego akurat mi jest trochę szkoda, bo to było naprawdę coś innego. W sensie, że tą hegemonię tego V8 mogło jakoś tam przegonić, a to Deno właściwie nie jest ani tym ani tym, ani nie jest alternatywą dla electrona, co by pewnie świat chętnie przyjął. Trochę tych alternatyw jest, ale one nie są modne, więc może ta by mogła coś tam zrobić. Więc trochę się z tobą zgodzę.
Bartek Witczak
Ja nie widzę sensu. Tak, w sensie, że jakby ja tam trochę poczytałem, trochę się porozglądałem, i jakby nie ma po prostu takiej rzeczy, która przekonałby mnie, że nawet chciałbym sobie chwilę tamtego spróbować. No nie. No, to jest dla mnie raczej taka ciekawostka.
Marek Piechut
To jest taka ciekawostka, trochę jak pamiętasz, jak od Node-a ktoś się odłączył. Tam było IO JS. Bo Node Nie chciał czegoś tam zrobić, czy tam licencja była nie taka i ktoś się odłączył, zrobił IO JS, potrwało to tam trzy miesiące i się połączyli. To jest troszkę coś takiego. Dla mnie osobiście dużym błędem jest ten ten problem NPM, że to nie wspiera NPM i to sprawia, że adopcja jest trudna bardzo, bo ty nie możesz po prostu z dnia na dzień powiedzieć, chodźcie, spróbujemy, Deno, bach i “ty zobacz, fajnie chodzi. Albo tutaj, coś jest lepiej, coś jest gorzej, coś nam się podoba, albo możemy łatwiej to spakować, albo coś. I zostajemy z tym.” Tylko to już jest taka migracja na całego, której nikt nigdy nie zrobi. Przy nowym projekcie trochę zbyt niebezpieczne, bo nie wiadomo, jak długo pożyje. Także ciekawe. Ciekawi mnie to jest z tej strony inwestorskiej, że ktoś widzi w tym potencjał. Także może tam są jakieś kierunki nieznane. W przyszłości może jednak powstanie coś.
Bartek Witczak
Jeżeli ktoś z drogich słuchaczy miałby jakiś pomysł, po co to jest to bardzo chętnie się dowiemy.
Marek Piechut
Taka ciekawostka w sensie ciekawa sprawa. Fajnie, że ktoś tam coś kombinuje, że coś nowego powstaje. My nie widzimy dużej szansy na to, żeby mogło zjeść świat.
Bartek Witczak
No nie no, dla mnie pozostaje w sferze ciekawostek i w sferze “no ciekawe”.
Marek Piechut
Ale z drugiej strony to może być właśnie ta jedna jedyna alternatywa, dla Node, która jakoś tam w niszy, ale trochę przetrwa, bo ta reszta umierała dosyć szybko.
Bartek Witczak
No, zobaczymy. Dla mnie jakby mówię, zostaje w sferze ciekawostek. Nie mam zamiaru nawet tam próbować, poza tym, że trochę poczytałem to jakby nie ma tam niczego, co skłoniło by mnie, żebym tego wypróbował na jakimkolwiek projekcie na razie, i tyle.
Marek Piechut
No dobra, czyli jak ktoś jest żądny przygody. Polecamy! W wolnym czasie.
Bartek Witczak
W wolnym czasie.
Marek Piechut
Pójść się poopalać, bo teraz idzie wiosna.
Bartek Witczak
Dokładnie. A my wracamy do nagrywania.