Byla uvedena verze projektu Redbean 2.0, která nabízí webový server umožňující dodávat webové aplikace v podobě univerzálního spustitelného souboru, který lze spustit v Linuxu, Windows, MacOS, FreeBSD, NetBSD a OpenBSD. Všechny související s webovou aplikací a serverem zdroje jsou sloučeny do jednoho spustitelného souboru, který je zároveň kompatibilní s formátem ZIP archivů a umožňuje používat utilitu zip pro přidání dalších souborů. Možnost spustit jeden soubor v různých operačních systémech a jeho rozpoznání jako ZIP archivu je dosažena díky manipulacím s hlavičkami spustitelných souborů a spojováním s multiplatformní standardní C knihovnou Cosmopolitan. Kód projektu je distribuován pod licencí ISC.
Myšlenka projektu spočívá v dodání jednoho spustitelného souboru „redbean.com“ se zabudovaným webovým serverem. Vývojář webové aplikace může pomocí utility zip přidat do tohoto souboru HTML a Lua soubory a získat tak samostatnou webovou aplikaci, běžící ve všech oblíbených operačních systémech a nevyžadující pro svůj chod spuštění samostatného webového serveru v systému.
Po spuštění získaného spustitelného souboru je pro přístup k uložené webové aplikaci použit vestavěný webový server. Ve výchozím nastavení je obslužný program připojen k localhostu, ale server může být použit i jako běžný veřejný webový server (například tento server obsluhuje webové stránky projektu). Vestavěný webový server podporuje přístup přes HTTPS a může běžet s využitím sandboxové izolace, která umožňuje řídit, ke kterým systémovým rozhraním se přistupuje. Pro správu práce serveru během jeho běhu je k dispozici interaktivní rozhraní REPL (na bázi Lua REPL a knihovny bestline, analog GNU Readline), které umožňuje měnit stav procesu v interaktivním režimu.
Tvrdí se, že webový server dokáže zpracovat více než milion požadavků za sekundu na běžném PC, přičemž vrací obsah komprimovaný metodou gzip. Vysoké výkonnosti napomáhá to, že zip a gzip používají společný formát, takže data se odevzdávají bez repackování z již komprimovaných oblastí v zip souboru. Kromě toho, protože je spustitelný soubor vytvořen pomocí statického linkování a má malou velikost, volání funkce fork pro něj prakticky nezpůsobuje režijní náklady při umístění do paměti.
Kromě zpracování statického webového obsahu a vykonávání JavaScriptu v prohlížeči může logika webové aplikace expandovat pomocí skriptů v jazyce Lua, webového frameworku Fullmoon a databáze SQLite. Mezi dalšími možnostmi se vyzdvihuje podpora schématu hashování hesel argon2, možnost určení regionu IP podle databáze MaxMind a přístup k Unix API knihovny Cosmopolitan. Velikost základního zásobníku, který zahrnuje webový server, MbedTLS, Cosmopolitan, Lua a SQLite, činí pouhých 1,9 MB.
Univerzální spustitelný soubor se vytváří kombinováním specifických segmentů a záhlaví pro různé operační systémy (PE, ELF, MACHO, OPENBSD, ZIP) v jednom souboru. Pro zajištění spuštění jednoho spustitelného souboru ve Windows a Unix systémech se používá trik, jehož podstata spočívá v kódování souborů Windows PE jako shell skriptu, využívajícího toho, že Thompson Shell nepoužívá marker skriptů „#!“. Výsledkem je spustitelný soubor, v němž je kombinováno několik různých formátů používaných v Linuxu, BSD, Windows a 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
Zdroj: opennet.ru
