Uberlândia - MG
+55 (34) 3016-0600

Motivos que farão o Deno ser o sucessor do NodeJS

Motivos que farão o Deno ser o sucessor do NodeJS

Escrevi diversos trechos deste artigo em uma discussão no LinkedIn e resolvi estruturar para postar no nosso blog, se trata de um tema pertinente na comunidade e temos fortes opiniões sobre o assunto.

001 – O que é NodeJS?

Node.js é um interpretador de JavaScript assíncrono com código aberto orientado a eventos, criado por Ryan Dahl em 2009, focado em migrar a programação do Javascript do cliente para os servidores, criando aplicações de alta escalabilidade, manipulando milhares de conexões/eventos simultâneas em tempo real numa única máquina física.

Além de back-end, o NodeJS também é base e requisito principal de vários Frameworks / Bibliotecas front-end, atuando como gestor de pacotes (via NPM) / execução local e build para produção de artefatos estáticos comumente utilizados em aplicações web SPA (Single Page Application).

002 – O que é Deno?

O Deno é um tempo de execução para JavaScript e TypeScript baseado no mecanismo JavaScript V8 e na linguagem de programação Rust. Foi anunciado por Ryan Dahl (sim – o criador do NodeJS) em 2018 durante sua palestra “10 coisas que lamento pelo Node.js”.

Como as principais diferenças em relação ao Node, podemos citar o controle de alto nível que o código / pacote de execução terá ao ser invocado pela engine do Deno.

Desde controle a internet até os acessos a arquivos e recursos da máquina em que o hospeda, estes são os principais diferenciais do Deno em relação ao Node.

O sistema de gerenciamento de pacotes também foi totalmente reformulado, auditado e desvinculado do NPM (Node Package Manager).

003 – Motivos para o NodeJS precisar de um sucessor

O NodeJS tem uma extensa flexibilidade porém isso tem um custo relevante: A segurança.

Rodando em servidor é olhado com maus olhos por analistas, uma vez que existe um número gigantesco de bibliotecas na comunidade que compartilham dependências entre elas com diversas formas de implementação e caso alguma das dependências em comum apresente falha de segurança, todas as bibliotecas que dependem desta estariam potencialmente vulneráveis e isso já aconteceu.

Para front-end, o uso do NodeJS é melhor, uma vez que ele pode atuar como servidor de pré-renderização para o browser (o que expõe risco caso haja alguma vulnerabilidade entre os pacotes utilizados) ou somente como ferramenta para gerenciar algum framework que roda no navegador (Angular etc) – Risco drasticamente diminuído.

O que não me conforta no NodeJS é o uso indiscriminado para operações back-end sensíveis e talvez multi-transacionais, tais como chamadas sigilosas entre APIs / comunicações com banco de dados e sistemas de cache por exemplo – O desenvolvedor precisa saber o que está importando, como está implementando e principalmente, manter a build atualizada com as últimas versões desses pacotes constantemente via parâmetros do npm audit (checando vulnerabilidades dos pacotes).

Caso exista uma vulnerabilidade a nível de leak de dados na memória ou overflow, um servidor poderia ter seus dados em memória vazados para um invasor externo, assim como este servidor ficar indisponível por conta de algum overflow ou até mesmo injeção de código para obter senhas do banco de dados etc.

O NodeJS se assemelha a plataforma de construção de sites WordPress: Um toolkit completo mas cheio de vulnerabilidades por conta dos plugins (apesar do WordPress nativamente ser vulnerável).

004 – Um provável adeus para NodeJS

De certa forma em algum momento o NodeJS poderá ser substituído por outra plataforma apoiada em JavaScript / TypeScript (nesse caso o Deno), mas a popularidade e flexibilidade deixarão o NodeJS dentro do mercado por muito tempo.

Temos vulnerabilidades conhecidas, resolvidas e não resolvidas em praticamente todos os frameworks de programação, mas o que nos apoia nessa jornada é a plataforma adotada.

Em Java, .NET Framework e outras plataformas voltadas para back-end, é possível utilizar 100% das dependências mantidas por grandes empresas para realizar operações back-end, o que significa que as bibliotecas são mantidas por grandes entidades com suporte altamente eficaz em falhas de segurança. O problema do NodeJS é que em muitas vezes para construir um “bom backend”, é necessário um set gigantesco de dependências (e eu estou falando das dependências de forma hierárquica, pois dentro de uma dependência pode ter outra que chama outra e assim sucessivamente).

Dentro dessa lista de dependências basta uma com alguma das falhas que citei para deixar o servidor potencialmente vulnerável.

Fora que para coding de back-end linguagens strongly-typed disponibilizam muito mais recursos para arquiteturas de software altamente eficazes – Atualmente o TypeScript pode se assemelhar a linguagens strongly-typed mas é muito fácil sair “fora da caixa” e voltar para o JavaScript em typescript, esse conceito a deixa com outro ponto negativo para codificações back-end, uma vez que a consistência em um padrão de software fica relativamente fácil de se desviar.

005 – Flexibilidade programática precisa ter limites

A própria arquitetura do NodeJS já expõe muita flexibilidade diante do sistema operacional que está executando, isso significa que caso alguém “entre no seu container / máquina virtual”, poderia acessar indiscriminadamente bastante do servidor / ambiente.

Isso se dá as pobres regras de isolamento de código executados na engine V8 implementada no NodeJS – E é isso que o Deno se propõe a melhorar.

Não existe “bala de prata” no mundo do software, mas existem outras “balas” que estão no mercado atuando muito bem para o que se propõe.

NodeJS veio com a ênfase assíncrona como diferencial, e realmente isso é um diferencial! Porém nesse meio tempo, diversas empresas com plataformas back-end no mercado modelaram suas arquiteturas para prover performance superior ao NodeJS com novas metodologias assíncronas de implementação nas suas linguagens.

O Deno traz soluções que o NodeJS precisa para atuar de forma sólida em backend.

Particularmente falando, o Deno é altamente relevante para a comunidade que usa NodeJS, pois unifica as regras de execução na plataforma e melhora significativamente a segurança.

Para quem trabalha com backend a anos vê as diferenças de desenvolver a mesma lógica no NodeJS, principalmente quando se fala de back-end feito em JavaScript.

006 – Faça a melhor escolha para o seu negócio.

Motivos que farão o Deno ser o sucessor do NodeJS

A dúvida entre a adoção de um produto tecnologia, linguagem e / ou framework é pertinente em todos os setores tecnológicos.

Prestamos consultoria a nível de hardware e software, entendemos todo o ciclo de vida de uma aplicação desde a infraestrutura e redes até o software e todas as suas dependências.

Apostamos na evolução da comunidade de software e usamos o melhor da tecnologia para os nossos clientes decolarem em rumo ao sucesso.

Contacte um de nossos consultores e conheça melhor o que nós podemos fazer para impulsionar o sucesso do seu negócio.

Conteúdo 100% autoral, baseado em experiências e fatos reais.

Escrito por Michel Oliveira, CEO da AAG Soluções em 25 de Junho de 2020.

Fontes descritivas: 
https://pt.wikipedia.org/wiki/Node.js
https://pt.wikipedia.org/wiki/Deno_(software)
Fontes analíticas: 
http://aag.solutions/