Bemutatásra került a Redbean 2.0 projekt kiadása, amely egy webkiszolgálót kínál, lehetővé téve webalkalmazások szolgáltatását univerzális végrehajtható fájl formájában, amely futtatható Linux, Windows, MacOS, FreeBSD, NetBSD és OpenBSD rendszereken. Minden, a webalkalmazással és a kiszolgálóval kapcsolatos erőforrás egy végrehajtható fájlba van csomagolva, amely ezzel együtt kompatibilis a ZIP archívumok formátumával, és lehetővé teszi a zip segédprogram használatát további fájlok hozzáadásához. Egyetlen fájl indíthatósága különféle operációs rendszerekben és ZIP-archívumként való azonosítása a végrehajtható fájlok fejlécével végzett manipulációknak és a Cosmopolitan multplatformos szabvány C könyvtárral való összekapcsolásnak köszönhető. A projekt kódja ISC licenc alatt van forgalmazva.
A projekt ötlete egy, a webkiszerver beépített ‘redbean.com’ végrehajtható fájl szállítása. A webalkalmazás fejlesztője a zip segédprogram segítségével HTML és Lua fájlokat adhat hozzá ehhez a fájlhoz, így egy önálló webalkalmazást kap, amely minden népszerű operációs rendszeren futtatható, és nem igényel külön webkiszolgáló indítását a rendszerben.
A létrehozott végrehajtható fájl elindítása után a fájlban tárolt webalkalmazás eléréséhez beépített webkiszolgáló használható. Alapértelmezés szerint a kezelő a localhost-ra van csatlakoztatva, de a kiszolgáló normál nyilvános webkiszolgálóként is használható (például ez a kiszolgáló szolgálja a projekt weboldalát). A beépített webkiszolgáló támogatja a HTTPS elérést és futtatható sandbox-izolációval, amely lehetővé teszi a rendszers interfészekhez való hozzáférés ellenőrzését. A kiszolgáló működésének irányítására interaktív REPL (Lua REPL és a bestline könyvtár, a GNU Readline analógja alapján) felület biztosít, amely lehetővé teszi a folyamat állapotának interaktív módosítását.
Azt állítják, hogy a webserver képes másodpercenként több mint egymillió lekérést kezelni egy normál PC-n, gzip tömörítési módszerrel szolgáltatva a tartalmat. A magas teljesítményt segíti, hogy a zip és a gzip közös formátumot használnak, így az adatok átkonfigurálás nélkül kerülnek átadásra a már tömörített területekből a zip fájlban. Ezenkívül mivel a végrehajtható fájl statikus kötés segítségével készült és kis méretű, a fork függvény hívása gyakorlatilag nem okoz költséget a memóriahelyezés során.
A statikus webtartalom feldolgozása és a JavaScript böngészőn belüli futtatása mellett a webalkalmazás logikája Lua nyelvű szkriptekkel, a Fullmoon webkeretrendszerrel és az SQLite adatbázissal bővíthető. További lehetőségek között megemlítendő az argon2 jelszótitkosítási séma támogatása, az IP régió meghatározásának lehetősége a MaxMind adatbázis alapján, valamint a Cosmopolitan könyvtár Unix API-jának elérése. Az alapvető verem mérete, amely magában foglalja a webszolgáltatót, az MbedTLS-t, a Cosmopolitan-t, a Lua-t és az SQLite-t, mindössze 1,9 MB.
Az univerzális végrehajtható fájl a különböző operációs rendszerekhez specifikus szegmensek és fejlécek (PE, ELF, MACHO, OPENBSD, ZIP) egy fájlba történő összevonásával jön létre. Annak érdekében, hogy egy végrehajtható fájl elinduljon Windows és Unix rendszerekben, egy trükköt alkalmaznak, amely abban rejlik, hogy a Windows PE fájlokat shell szkript formájában kódolják, kihasználva, hogy a Thompson Shell nem használja a „#!/usr/bin/env” jelölőt. Ennek eredményeként létrejön egy végrehajtható fájl, amelyben több különböző formátum kombinálódik, amelyet Linux, BSD, Windows és macOS használ. $ 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
Forrás: opennet.ru
