Predstavljen je izlazak projekta Redbean 2.0, koji nudi web-server, omogućavajući isporuku web-aplikacija u obliku univerzalne izvršne datoteke koja može biti pokrenuta na Linuxu, Windowsu, MacOS-u, FreeBSD-u, NetBSD-u i OpenBSD-u. Svi resursi povezani s web-aplikacijom i serverom komprimiraju se u jednu izvršnu datoteku koja je istovremeno kompatibilna s ZIP arhivama i omogućuje korištenje alata zip za dodavanje dodatnih datoteka. Mogućnost pokretanja jedne datoteke na različitim operativnim sustavima i njeno prepoznavanje kao ZIP arhive postignuta je manipulacijom s zaglavljima izvršnih datoteka i povezivanjem s višekratnom standardnom C bibliotekom Cosmopolitan. Kod projekta distribuira se pod ISC licencom.
Ideja projekta je isporuka jedne izvršne datoteke „redbean.com” s ugrađenim web-serverom. Razvijatelj web-aplikacije može uz pomoć alata zip dodati HTML i Lua datoteke u ovu datoteku i dobiti na izlazu samoodrživu web-aplikaciju koja se može pokretati na svim popularnim operativnim sustavima i ne zahtijeva pokretanje zasebnog web-servera za rad.
Nakon pokretanja dobivene izvršne datoteke, za pristup web-aplikaciji pohranjnoj u datoteci koristi se ugrađeni web-server. Zadan je local host kao defaultni poslužitelj, ali server se može koristiti i kao običan javni web-server (na primjer, ovaj server poslužuje web stranicu projekta). Ugrađeni web-server podržava pristup putem HTTPS-a i može se pokretati s sandbox izolacijom, koja omogućava kontrolu kojim sustavnim sučeljima se pristupa. Za upravljanje radom servera tijekom njegovog izvršavanja dostupan je interaktivni REPL sučelje (temeljeno na Lua REPL i biblioteci bestline, analogu GNU Readline), koje omogućava promjenu stanja procesa u interaktivnom režimu.
Tvrdnje su da web-server može obraditi više od milijun zahtjeva u sekundi na običnom PC-u, isporučujući sadržaj komprimiran gzip metodom. Visoka izvedba omogućena je time da zip i gzip koriste zajednički format, stoga se podaci isporučuju bez ponovnog pakiranja iz već komprimiranih područja u zip datoteci. Osim toga, budući da je izvršna datoteka stvorena uz korištenje statičkog povezivanja i ima malu veličinu, poziv funkcije fork za nju praktički ne dovodi do prekomjernih troškova pri smještaju u memoriji.
Osim obrade statičkog web-sadržaja i izvršavanja JavaScripta u pregledniku, logika web-aplikacije može se proširiti pomoću skripti u jeziku Lua, web okvira Fullmoon i SQLite DBMS-a. Među dodatnim mogućnostima ističe se podrška za shemu hashinga lozinki argon2, mogućnost određivanja IP regije koristeći MaxMind bazu podataka i pristup Unix API biblioteci Cosmopolitan. Veličina osnovnog stoga, koji uključuje web-server, MbedTLS, Cosmopolitan, Lua i SQLite, iznosi samo 1.9 MB.
Univerzalna izvršna datoteka formira se kombiniranjem specifičnih segmenta i zaglavlja (PE, ELF, MACHO, OPENBSD, ZIP) za različite operacijske sustave u jednoj datoteci. Kako bi se omogućilo pokretanje jedne izvršne datoteke u Windows i Unix sustavima, primjenjuje se trik, koji se sastoji u kodiranju Windows PE datoteka u obliku shell skripte, koristeći to što Thompson Shell ne koristi oznaku skripte "#!". Kao rezultat nastaje izvršna datoteka koja kombinira nekoliko različitih formata korištenih u Linuxu, BSD-u, Windowsu i macOS-u. $ 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
Izvor: opennet.ru
