Foi lançada a versão 2.0 do projeto Redbean, que oferece um servidor web capaz de fornecer aplicações web na forma de um arquivo executável universal que pode ser executado em Linux, Windows, MacOS, FreeBSD, NetBSD e OpenBSD. Todos os recursos associados à aplicação web e ao servidor são incorporados em um único arquivo executável, que é compatível com o formato de arquivo ZIP e permite o uso da ferramenta zip para adicionar arquivos adicionais. A capacidade de executar um único arquivo em diferentes sistemas operacionais e seu reconhecimento como um arquivo ZIP é alcançada através de manipulações nos cabeçalhos dos arquivos executáveis e da vinculação com a biblioteca padrão em C multiplataforma Cosmopolitan. O código do projeto é distribuído sob a licença ISC.
A ideia do projeto é fornecer um único arquivo executável "redbean.com" com um servidor web embutido. O desenvolvedor da aplicação web pode usar a ferramenta zip para adicionar arquivos HTML e Lua a esse arquivo e obter como resultado uma aplicação web autossustentável, executável em todos os sistemas operacionais populares e que não requer o lançamento de um servidor web separado no sistema.
Após a execução do arquivo executável gerado, um servidor web embutido é usado para acessar a aplicação web salva no arquivo. Por padrão, o manipulador é anexado ao localhost, mas o servidor também pode ser usado como um servidor web público comum (por exemplo, este servidor hospeda o site do projeto). O servidor web embutido suporta acessos via HTTPS e pode ser executado utilizando isolamento sandbox, permitindo controlar quais interfaces do sistema são acessadas. Para gerenciar a operação do servidor durante sua execução, é fornecida uma interface interativa REPL (baseada em Lua REPL e na biblioteca bestline, análoga ao GNU Readline), que permite alterar o estado do processo em modo interativo.
Afirma-se que o servidor web é capaz de processar mais de um milhão de solicitações por segundo em um PC comum, entregando conteúdo comprimido com o método gzip. O alto desempenho é favorecido pelo fato de que zip e gzip utilizam um formato comum, assim, os dados são entregues sem reempacotamento a partir de áreas já compactadas no arquivo zip. Além disso, como o arquivo executável é criado usando vinculação estática e tem um tamanho pequeno, a chamada da função fork praticamente não gera custos adicionais ao ser alocado na memória.
Além de processar conteúdo web estático e executar JavaScript no navegador, a lógica do aplicativo web pode ser expandida com scripts em Lua, o framework web Fullmoon e o banco de dados SQLite. Entre os recursos adicionais, destaca-se o suporte para o esquema de hash de senhas argon2, a capacidade de definir a região IP com base na base de dados MaxMind e o acesso à API Unix da biblioteca Cosmopolitan. O tamanho da pilha base, que inclui o servidor web, MbedTLS, Cosmopolitan, Lua e SQLite, é de apenas 1,9 MB.
O executável universal é formado pela combinação de segmentos e cabeçalhos específicos para diferentes sistemas operacionais (PE, ELF, MACHO, OPENBSD, ZIP) em um único arquivo. Para garantir a execução de um único arquivo executável em sistemas Windows e Unix, utiliza-se um truque que codifica arquivos Windows PE como um script shell, aproveitando que o Thompson Shell não usa o marcador de script ‘#!’. Como resultado, é criado um executável que combina vários formatos diferentes usados em Linux, BSD, Windows e macOS. $ curl https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com hello.html $ zip redbean.com hello.lua $ ./redbean.com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) listen http://127.0.0.1:8080 >: waiting for command… $ curl https://127.0.0.1:8080/hello.html hello $ printf ‘GET /hello.lua\n\n’ | nc 127.0.0.1 8080 hello
Fonte: opennet.ru
