La version 2 de Redbean, un serveur Web à fichier unique qui fonctionne sur n'importe quel système d'exploitation x86-64, est disponible
avec de nouvelles API, la complétion de code, etc.
Justine Tunney, développeur de Redbean, a récemment publié la dernière version (Redbean 2.0) du serveur Web. Redbean 2.0 comporte un nouveau chargeur APE (Actually Portable Executable) qui permet d'exécuter le serveur sans modifier les en-têtes, permettant ainsi une exécution en mémoire. Si l'APE n'est pas installé sur le système, l'en-tête du script Shell extrait automatiquement l'APE. Les autres nouveautés de Redbean 2.0 comprennent une boucle REPL (Read Eval Print Loop) construite sur la bibliothèque "bestline", la complétion de code à l'aide de la touche Tab, la prise en charge des raccourcis clavier conformes à GNU Emacs, et bien d'autres encore.
Redbean est un serveur Web à fichier unique qui fonctionne sur n'importe quel système d'exploitation x86-64 (GNU/Linux, macOS, Windows, FreeBSD, OpenBSD et NetBSD). Il permet de partager des applications Web qui fonctionnent hors ligne sous la forme d'une archive zip à fichier unique qui contient vos actifs. Il vous suffit de télécharger le programme "redbean.com", de changer le nom du fichier en .zip, d'ajouter votre contenu dans un outil d'édition de zip, puis de changer à nouveau l'extension en .com. Il n'y a pas besoin d'un proxy comme dans le cas du serveur nginx ; Redbean est intégré verticalement.
Selon le développeur, Redbean peut servir plus de 1 million de réponses codées gzip par seconde sur un ordinateur personnel bon marché. Tunney estime qu'avec la publication de Redbean 2.0, le projet n'est plus simple passe-temps. « Au cours de l'année dernière, nous avons fait de Redbean plus qu'un projet de loisir », a déclaré le développeur. Voici ci-dessous les nouveautés de Redbean 2.0.
Nouveau chargeur APE
Redbean utilise un hack appelé "APE" (Actually Portable Executable). L'idée est celle-ci : quel que soit le langage de programmation que vous utilisez, si vous compilez votre code en binaire natif, il produit du code machine x86-64 - et tout processeur x86-64 exécute le même code machine. Si vous écrivez un programme qui ne fait appel à aucun code externe, alors en principe, la seule différence entre un binaire Windows et (disons) un binaire Linux est le format du fichier qui contient le binaire. Donc, si vous pouviez contourner ce problème, votre programme pourrait être exécuté sur n'importe quel système d'exploitation.
Les fichiers APE sont, comme leur nom l'indique, des exécutables réellement portables. Un seul fichier APE s'exécute correctement sur tout système d'exploitation x86-64. Lorsque le fichier est exécuté sous Windows, il se comporte comme un exécutable Windows et lorsque vous l'exécutez sur macOS, il se comporte alors comme un exécutable macOS. Lorsqu'il est exécuté sur Linux, c'est un binaire Linux, et c'est pareil sur FreeBSD, OpenBSD, NetBSD, même s'ils ont tous leurs propres formats d'exécutables différents. Toutefois, presque tous les programmes réels doivent faire appel à une bibliothèque, ne serait-ce que la bibliothèque standard C.
C'est là qu'intervient la bibliothèque "Cosmopolitan" ou Cosmo. Grâce à la bibliothèque Cosmo, les programmes C peuvent être compilés et exécutés sur tout système d'exploitation supporté par le chargeur APE. Redbean 2.0 introduit un nouveau chargeur APE qui permet à votre serveur de s'exécuter sans avoir à automodifier son en-tête. À la place, la commande ape va alors placer votre redbean (serveur) en mémoire avec mmap(). Si l'APE n'est pas installé sur un système, l'en-tête du script Shell l'extraira automatiquement. Il y a un support shebang et un support binfmt_misc sur Linux également.
Tunney indique que ces changements devraient avoir un impact favorable pour les distributions et les systèmes de construction, qui avaient des difficultés à empaqueter et distribuer les logiciels APE. Pour les utilisateurs qui veulent le comportement original, un drapeau --assimilate est introduit qui transformera votre redbean en format ELF ou Mach-O local à la plateforme.
REPL
Redbean 2.0 introduit une boucle de lecture, d'évaluation et d'impression ou REPL (Read Eval Print Loop) pour faire court. Il est construit sur la bibliothèque "bestline", puisqu'elle fournit une quasi-parité avec GNU Readline en matière de fonctionnalités, sauf qu'elle est sous licence MIT au lieu de LGPL, donc il n'y a pas d'exigence de liaison dynamique. Redbean ne peut pas lier dynamiquement les choses, car alors ce ne serait pas un seul fichier. Tunney a déclaré avoir mis beaucoup de travail dans la création de bestline, un fork de "linenoise", pour cette raison précise.
Monkey Patching
L'un des cas d'utilisation d'un REPL sur un serveur Web en direct est la possibilité d'appliquer des correctifs au code pendant que le serveur fonctionne. Redbean est un serveur Web à fourche. Cela signifie que le processus principal se comporte comme un modèle maître à partir duquel les processus ouvriers sont clonés. Ainsi, tout ce que vous modifiez dans la REPL se propage paresseusement dans les connexions client, au fur et à mesure que de nouvelles connexions sont créées, sans avoir d'impact sur les connexions actuellement actives. Les autres fonctionnalités notables de cette version sont :
- complétion de code : Redbean 2.0 introduit la complétion de code. Comme pour Bash, vous pouvez appuyer sur Tab pour voir une liste de tous les fonctions et objets globaux disponibles. Si vous appuyez sur unix.<tab><tab>, alors vous verrez tous les objets et fonctions disponibles dans le module Unix ;
- raccourcis clavier de GNU Emacs : les utilisateurs de GNU Emacs seront ravis d'apprendre que votre REPL redbean prend en charge presque tous les raccourcis clavier courants de style GNU, y compris CTRL-R pour la recherche inverse ;
- module Unix : Redbean 2.0 introduit un nouveau module Unix implémenté dans tool/net/lunix.c ;
- prise en charge du traçage : Redbean 2.0 introduit la journalisation facultative des appels système ;
- améliorations de Lua : Redbean 2.0 apporte des améliorations au langage Lua qui sont destinées à aider les développeurs C/C++ et Python à se sentir plus à l'aise ;
- nouvelles API : Redbean 2.0 introduit les fonctions natives suivantes : EncodeJson, EncodeLua, Compresser, Décompresser, GetMonospaceWidth, ProgramMaxPayloadSize, ProgramSslRequired, ProgramSslClientVerify, MeasureEntropy, Decimate, Benchmark, Rdtsc, Lemur64, Rand64, Rdrand, Rdseed, GetCpuCount, GetCpuCore, GetCpuNode, oct, hex, bin ;
- redbean 2.0 ajoute la prise en charge du hachage moderne des mots de passe ;
- corrections de bogues : cette version inclut de nombreuses corrections en amont de la bibliothèque Cosmo. La qualité du support de la plateforme Windows a été considérablement améliorée. Par exemple, fork() fonctionne maintenant suffisamment bien sous Windows pour que cette version l'active par défaut. De nombreux autres bogues sous Windows qui empêchaient Redbean de répondre aux interruptions CTRL-C ont également été résolus.
Source : Redbean 2.0
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous du serveur Web Redbean ?
Que pensez-vous des nouveautés dans Redbean 2.0 ?
Voir aussi
Caddy, l'unique serveur web à utiliser HTTPS automatiquement et par défaut, écrit en langage Go
JDK 18 : les nouvelles fonctionnalités de Java 18 incluent une API pour les vecteurs, un serveur Web minimal, et l'adoption d'UTF-8 comme jeu de caractères par défaut
L'édition 2022 du rapport sur l'état du développement de WebAssembly révèle que Rust est le langage le plus utilisé et le plus recherché, et les applications Web sont le cas d'utilisation principal
Fresh, un framework web de nouvelle génération, conçu pour la vitesse, la fiabilité et la simplicité, il apporte un peu de concurrence pour Next.js
Partager