Criando o plugin gulp-snyk: uma entrevista com Doug Wade
Tim Kadlec
26 de janeiro de 2017
0 minutos de leituraDoug Wade é engenheiro sênior de front-end na Indeed. Doug criou o excelente plugin gulp-snyk, que permite integrar o Snyk ao processo de build do Gulp com facilidade. Ficamos muito animados quando encontramos o plugin e quisemos conversar com Doug para saber um pouco mais sobre ele.

Por que você começou a usar o Snyk?
Quando fui mentor no Node Summit no ano passado, tive a oportunidade de assistir à ótima palestra do Guy e ver uma demonstração ao vivo de como explorar alguns avisos de segurança com minimatch que eu vinha ignorando nos meus projetos. Foi esclarecedor e assustador ao mesmo tempo.
Durante o happy hour, conversei com Guy sobre por que eu deveria trocar o nsp pelo Snyk, e ele me falou sobre o que considero o “recurso matador” do Snyk: snyk protect.
Por muito tempo, me incomodou publicar .nsprcs no Github para fazer meus builds do Travis passarem. Em projetos como o React Server, parecia que eu estava publicando uma lista de vulnerabilidades que invasores poderiam usar para atacar sites como www.redfin.com. Era justamente o contrário do que eu queria fazer! Mas, na prática, não havia outra opção.
No início da história do npm, Isaac Z. Schlueter (criador e CEO do npm) tomou uma decisão que, na minha opinião, foi essencial tanto para a explosão no número de pacotes disponíveis no npm quanto para tornar o acesso ao desenvolvimento de código aberto no npm a forma mais acessível de começar a contribuir. Isaac decidiu evitar o inferno de dependências do Java, dando a cada pacote dependente sua própria cópia independente das dependências declaradas.
Isso significa que, para um desenvolvedor que cria módulos no npm — como eu faço com muitos dos meus módulos de código aberto —, é possível iterar muito rapidamente, alterando e atualizando dependências sem se preocupar com os usuários presos a uma versão antiga enquanto esperam por um conjunto consistente de dependências.
A contrapartida é que, para desenvolvedores de aplicações que precisam remover dependências vulneráveis de toda a cadeia de dependências — como eu faço no meu trabalho —, não basta atualizar as dependências diretas; também é preciso garantir que cada dependência seja atualizada para a versão segura. Depois de levar uma bronca de um desenvolvedor que respeito muito por abrir uma issue e um PR para atualizar uma dependência vulnerável em um projeto da Node Foundation, percebi que o método do nsp — com arquivos nsprc e a espera para que as correções se propagassem pelo ecossistema — não era sustentável.
A abordagem do Snyk resolve isso corrigindo minha aplicação por meio de um script postinstall. Assim, não preciso esperar a mudança se propagar pelo ecossistema, e meu manifesto deixa de ser uma lista de vulnerabilidades existentes e passa a ser uma lista de vulnerabilidades que foram corrigidas.
Por que você decidiu criar o gulp-snyk?
Desenvolvo com Node desde a versão 0.8, principalmente porque era o único ambiente de desenvolvimento que consegui configurar com sucesso no meu computador Windows quando comecei a aprender a programar. Por isso, ainda tenho vários módulos por aí que usam Gulp como sistema de build.
Acredito que a principal função dos sistemas de build é padronizar tarefas comuns e facilitar sua descoberta. Em vez de esperar que novos colaboradores encontrem tarefas espalhadas entre um package.json e um gulpfile, eu queria ter uma única lista de tarefas. Não era muito código repetitivo criar minhas tarefas do Snyk no Gulp, mas era o suficiente para eu não querer copiá-lo e colá-lo entre projetos. Então, publiquei o plugin no npm.
Fiz a maior parte do desenvolvimento em duas noites, depois do trabalho. Descobri que existe uma API programática não documentada, que o gulp-snyk usa para executar o alvo de testes.
Abri uma issue para tentar coordenar isso com o Snyk, mas, para mim, essa situação destaca uma das coisas de que mais gosto em trabalhar com uma linguagem dinâmica. Eu não precisava saber nada sobre o Snyk. Bastava abrir um REPL (Read-Eval-Print-Loop) e começar a explorar.
Como você usa o gulp-snyk hoje?
Uso o gulp-snyk para proteger o Clefs e o name-suffixes, e pretendo adicioná-lo ao React Server. Uso o Snyk em 17 dos meus módulos Node e pretendo expandir para todos os 33.
Trinta e três módulos NPM! O que motiva você a contribuir tanto?
Acredito que nós, desenvolvedores, temos a obrigação ética de retribuir à comunidade, considerando o quanto recebemos dela. Mas, para ser sincero, acho que boa parte do que me motiva é profundamente egoísta.
Quando faço um PR para o Node, o npm ou o Lerna, tenho a oportunidade de explorar o código e receber uma revisão de código de algumas das pessoas mais talentosas e brilhantes do desenvolvimento de software. Quando publico pela primeira vez um projeto que criei no Reddit ou no Hacker News, recebo comentários sobre design de API, arquitetura e documentação muito mais alinhados à minha área de especialização do que os que recebo no trabalho.
De certa forma, acho que também faço isso para não puxar a escada depois de subir. Minha carreira foi construída sobre uma base de trabalho com software livre e de código aberto (FOSS) e aprendizado a partir dele. Então, de maneira muito concreta e significativa, sem o FOSS eu não estaria onde estou hoje.
Falando nisso, se alguém quiser ajudar a contribuir com o gulp-snyk, onde pode encontrar o projeto?
O plugin gulp-snyk está disponível no npm e pode ser instalado com npm (npm install --save-dev gulp-snyk) ou yarn (yarn add --dev gulp-snyk). Quem quiser ajudar a contribuir pode encontrar o código no GitHub.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.