O software talvez esteja engolindo o mundo, mas talvez o JavaScript possa engolir o mundo do software. O Duktape leva o JavaScript além dos limites do navegador ou servidor com uma implementação completa do ECMAScript 5 que pode ser embarcada em qualquer projeto C/C++.
A pequena base de código do Duktape e seu sistema de build simplificado o tornam o sonho dos profissionais de sistemas embarcados. Tecnicamente, ele é essencialmente igual ao projeto Lua, mas roda JavaScript, que possui um ecossistema maior e com mais desenvolvedores. — Tim Caswell
A linguagem Lua não é muito mais velha do que JavaScript, entretanto, esta última já recebeu significativa atenção com sua presença ubíquota no navegador e servidor com o node.js. Para projetos que queiram embarcar uma linguagem de script, o Duktape provê acesso a uma linguagem muito popular e a seu ecossistema. Segundo Sami Vaarala, criador do Duktape, "a motivação original do Duktape era termos uma implementação como a de Lua para JavaScript".
Trabalhar com o Duktape é tão simples quanto adicionar dukatpe.c e duktape.h em um projeto. As ligações entre JavaScript e C são bi-direcionais, então cada uma das linguagens pode invocar a outra. O "Hello World!" de exemplo é implementado da seguinte forma:
#include "duktape.h"
int main(int argc, char *argv[]) {
duk_context *ctx = duk_create_heap_default();
duk_eval_string(ctx, "print('Hello world!');");
duk_destroy_heap(ctx);
return 0;
}
Tim Caswell assumiu o núcleo do Duktape e o estendeu com o Dukluv para criar um "ambiente como o node.js para pequenos dispositivos". Caswell afirma que seu projeto adiciona ligações libuv ao Duktape, oferecendo:
acesso ao sistema operacional, tornando-o um completo ambiente de programação com I/O não blocante, timers, suporte a sub-processos e muitas outras funções utilitárias como as disponibilizadas no libuv.
A necessidade de embarcar uma linguagem de script não é nova. A indústria de video games vem fazendo isso há anos. Por exemplo, o jogo World of Warcraft usa Lua para customização de sua interface. Segundo uma resposta popular no Stack Overflow, Lua é frequentemente usada pois:
ela é uma base de código ANSI C pequena, portável, customizável, fácil de embarcar, estender e — o mais importante para desenvolvedores de jogos — tem um ambiente de execução muito pequeno
Mecanismos de navegadores como o SpiderMonkey e o V8 podem ser embarcados, mas o seu tamanho os descarta para pequenas aplicações. Segundo Caswell, eles são "muito pesados para pequenas tarefas ou para dispositivos de baixa energia". O projeto Espruino também provê JavaScript para micro-controladores, mas a sua compatibilidade com o ECMA Script está em torno de 95% enquanto o Duktape é totalmente compatível.
O Duktape é licenciado com a licença MIT e seu código fonte está disponível no GitHub. Os desenvolvedores que o utilizaram elogiaram sua extensiva documentação.