Skip to content

Ein Single-File-Webserver, der auf sechs Betriebssystemen läuft • The Register

Mit redbean 2 vereinen sich fast unglaublich clevere Tech-Tricks zu etwas Praktischem: einem Webserver plus Content in einem einzelne Dateien die auf jedem x86-64-Betriebssystem läuft.

Das Projekt ist der bisherige Höhepunkt einer Reihe bemerkenswerter, inspirierter Hacks der Programmiererin Justine Tunney: αcτµαlly pδrταblε εxεcµταblε, Cosmopolitan libc und die ursprüngliche Redbean. Es kann ein wenig dauern, zu erklären, was es tut, also haben Sie Geduld mit uns. Wir versprechen es Ihnen Wille beeindruckt sein.

Zunächst verwendet redbean einen bemerkenswerten Hack namens APE, der für „Tatsächlich Portable Executable“ steht – was sein Autor stilisiert acτµαlly pδrταblε εxεcµταblε. (Wenn Sie das griechische Alphabet kennen, lautet dies “tatsächlich pdrtable ausführbar”, aber hey, es sieht cool aus.)

Der Kern der Idee von APE ist folgender: Egal, welche Programmiersprache Sie verwenden, wenn Sie Ihren Code in eine native Binärdatei kompilieren, wird x86-64-Maschinencode erstellt – und jeder x86-64-Prozessor führt denselben Maschinencode aus. Wenn Sie ein Programm geschrieben haben, das überhaupt keinen externen Code aufruft, dann besteht im Prinzip der einzige Unterschied zwischen einer Windows-Binärdatei und (sagen wir) einer Linux-Binärdatei im Format der Datei, die die Binärdatei enthält. Also, wenn Sie nur herumkommen könnten daskönnte Ihr Programm auf jedem Betriebssystem ausgeführt werden.

Linux verwendet ein Format namens Executable and Linkable Format (ELF). Früher verwendeten proprietäre x86-Unixe das Common Object File Format oder COFF. Aus diesem Grund wurde bei der kürzlich erfolgten Konvertierung von Lotus 1-2-3 für Unix nach Linux ein Tool namens verwendet coffsyrup um COFF in ELF umzuwandeln.

Der Witz im Namen APE rührt daher, dass Windows NT immer noch ein vom alten COFF-Standard abgeleitetes Format namens Portable Executable (PE) verwendet. Das PE-Format ist nur insofern “tragbar”, als ob Sie ein Windows ausführen würden .EXE Datei unter DOS, wird es tatsächlich ausgeführt: PE-Dateien enthalten einen winzigen DOS-Stub, der die Nachricht anzeigt “Dieses Programm kann nicht im DOS-Modus ausgeführt werden.” Aber „Portable Executables“ sind überhaupt nicht portabel – im Gegensatz zu, sagen wir, Familienanwendungen, die nativ sowohl unter DOS als auch unter OS/2 liefen.

APE-Dateien sind, wie der Name schon sagt, eigentlich Tragbare ausführbare Dateien. Eine einzelne APE-Datei wird auf jedem x86-64-Betriebssystem korrekt ausgeführt. Nehmen Sie die Datei und führen Sie sie unter Windows aus, dann fungiert sie als ausführbare Windows-Datei. Laufen dieselben Dateien unter macOS, und es ist eine ausführbare macOS-Datei. Führen Sie es unter Linux aus, und es ist eine Linux-Binärdatei … und das Gleiche gilt für FreeBSD, OpenBSD und NetBSD, obwohl sie alle ihre eigenen, unterschiedlichen ausführbaren Formate haben.

Der Haken ist, dass fast jedes echte Programm aufrufen muss etwas Bibliothek, auch wenn es nur die C-Standardbibliothek ist … und hier kommt die Cosmopolitan libc ins Spiel. „Cosmo“ ist eine libc für APE, sodass C-Programme kompiliert und auf jedem Betriebssystem ausgeführt werden können, das APE unterstützt.

Mit Cosmo und dem APE-Format können Sie ein C-Programm schreiben und es in eine einzige Datei kompilieren, die auf sechs völlig unterschiedlichen Betriebssystemen geladen und ausgeführt werden kann. Oh, und als ob das nicht genug wäre, kann dieselbe Binärdatei auch direkt vom PC-BIOS gebootet werden. Das heißt, Sie können es unter Tunneys Blinkenlights ausführen und beobachten, wie sich die Register des PCs live ändern, wie bei einem Mainframe aus alter Zeit.

Demos

An dieser Stelle dürften viele Technikfreaks ins Staunen geraten. Um Ihnen also etwas Hübsches zum Anschauen zu geben, gibt es auch einige Demoprogramme. Das Demo-Video auf der Blinkenlights-Seite zeigt printimage.com, das JPG-Dateien auf der Textkonsole drucken kann. Wenn Sie immer noch nicht beeindruckt sind, tut printvideo.com dasselbe für Videos.

Das ursprüngliche Redbean machte die Kombination von APE und Cosmo zu etwas Nützlicherem. So erstaunlich die Kombination auch ist, nur eine Libc zu haben, ist im 21. Jahrhundert ziemlich einschränkend. Sie können beispielsweise keine grafische Anwendung erstellen. Aber jedes Betriebssystem, das APE unterstützt, kann einen Webbrowser ausführen, also hat redbean auch einen Webserver (und eine SQLite-Datenbank und Lua-Skripting) in eine einzige Binärdatei eingebettet. Sie müssen lediglich die Dateierweiterung in ändern .ZIPfügen Sie Ihren statischen Webinhalt mit einem Archivmanager hinzu, speichern Sie ihn, benennen Sie ihn erneut um und bingo: eigenständige Webanwendung.

Stellen Sie es sich ein bisschen wie eine Electron-App vor, außer dass Sie Ihren vorhandenen Browser verwenden, anstatt den gesamten Browser in Ihr unschuldiges kleines Programm einzubetten.

Jetzt nimmt redbean 2.o (ja, das heißt zwei-Punkt-oh, nicht zwei-Punkt-Null) das ursprüngliche Redbean und fügt eine REPL – für Nicht-Lispy-Typen, eine interaktive Befehlszeile – und eine Unix-SysV hinzu API (ja, sogar unter Windows), plus Protokollierung und mehr.

Apropos Lisp, ein weiteres erstaunliches Projekt von Tunney ist SectorLisp, das einen Lisp-Interpreter in einen PC-Bootsektor einbettet. SectorLisp 2 fügt auch Garbage Collection hinzu und ist damit die kleinste GC-Sprache der Welt. Angesichts dieses Interesses an Programmen, die direkt ohne ein Betriebssystem gestartet werden können, überrascht es Sie vielleicht nicht, dass ein zukünftiges Ziel von redbean darin besteht, es bootfähig zu machen: einen TCP/IP-Stack und Netzwerkkartentreiber vollständig einzubetten eigenständiges Werkzeug. ®

Bootnote

Wenn Sie uns nicht einfach beim Wort nehmen und Redbean selbst ausprobieren möchten, sollten Sie wissen, dass es auf einigen Betriebssystemen Probleme gibt. Neuere Versionen von macOS (11 und 12) brechen einige der Tricks, die es APE ermöglichen, zu funktionieren, ebenso wie Ubuntu. Die Hacker News-Diskussion über das Projekt und seine Vorgeschichte enthält einige Problemumgehungen.

Leave a Reply

Your email address will not be published.