Ladybird ce mois-ci – avril 2026
(ladybird.org)- En avril, Ladybird a fusionné 333 PR provenant de 35 contributeurs, et a reçu de nouveaux soutiens de 50 000 dollars de la Human Rights Foundation et de 1 000 dollars de Jakub Stęplowski
- Un lecteur PDF intégré, l’autocomplétion de la barre d’adresse basée sur l’historique, un frontend Linux GTK4/libadwaita et une interface de gestion
about:bookmarksont été ajoutés, élargissant les fonctions de navigation et l’interface desktop - Le parseur HTML effectue désormais un parsing progressif du corps de réponse, un parseur spéculatif précharge les ressources, et la compilation de premier niveau de JavaScript a été déplacée vers un thread d’arrière-plan, réduisant d’environ 200 ms le temps du thread principal lors du chargement de YouTube
- Le moteur JavaScript améliore les performances sur Speedometer et sur le chargement de sites réels grâce à un cache for-in, un allocateur de registres en O(1), le partage d’identifiants en zero-copy,
JS::Substringlazy et des améliorations du cache des vues de typed arrays Cache/CacheStorage,image-set(), le positionnement d’ancrage CSS, le DNS asynchrone, le rendu GPU basé sur dmabuf, l’adoption par défaut de mimalloc et l’obligation d’utiliser Rust ont été intégrés, et le score WPT est passé de 2 003 537 à 2 067 263
Taille du développement et soutiens
- En avril, Ladybird a fusionné 333 PR provenant de 35 contributeurs, dont 7 ont effectué leur premier commit sur Ladybird
- Parmi les nouveaux soutiens, la Human Rights Foundation a apporté 50 000 dollars via son programme « AI for Individual Rights », et Jakub Stęplowski a donné 1 000 dollars
- Ladybird est entièrement financé par les soutiens d’entreprises et de particuliers qui défendent le web ouvert
Fonctions de navigation et frontends
-
Lecteur PDF intégré
- Les PDF sont désormais rendus directement dans la page via le lecteur pdf.js embarqué (#9132)
- pdf.js est un lecteur PDF écrit uniquement en JavaScript, HTML et CSS, qui offre la navigation entre pages, la sélection de texte, le zoom et la recherche dans le document
- Le chargement du manuel ISA d’Intel avec pdf.js a mis en évidence des pistes d’amélioration dans le cache des vues de typed arrays et l’invalidation de
:has()
-
Historique et autocomplétion de la barre d’adresse
- Lors de la saisie dans la barre d’adresse, des suggestions enrichies basées sur l’historique s’affichent, incluant le favicon et le titre des pages déjà visitées, des raccourcis vers les moteurs de recherche et une complétion d’URL classique (#8933)
- Le
HistoryStorebasé sur SQLite enregistre pour toute navigation le titre, le favicon, le nombre de visites et la date de la dernière visite - L’option « Clear browsing history » a été reliée à la page des paramètres de confidentialité, et les interfaces Qt comme AppKit affichent désormais les nouvelles lignes enrichies
-
Frontend GTK4 / libadwaita
- Un nouveau frontend Linux basé sur GTK4 et libadwaita a été ajouté à Ladybird, proposé aux côtés du frontend Qt existant (#8691)
- Il s’inspire de GNOME Web (Epiphany) et suit les directives de conception de GNOME, avec un menu hamburger et des onglets
AdwTabViewà la place d’une barre de menus - Il fournit l’autocomplétion de la barre d’URL et l’icône de sécurité, la recherche dans la page, le plein écran, les menus contextuels, les boîtes de dialogue alert/confirm/prompt/color/file, le presse-papiers, les fenêtres multiples, les thèmes clair/sombre et la mise à l’échelle DPR
- Il reste à un stade précoce et n’a pas encore atteint la parité fonctionnelle avec les frontends Qt et AppKit
-
Favoris
- Une interface de gestion a été ajoutée aux favoris introduits le mois dernier
- Les favoris et dossiers peuvent être gérés depuis la page
about:bookmarks(#8825) - La nouvelle page prend en charge l’import et l’export des favoris (#8938)
- Des menus contextuels ont été ajoutés pour modifier les favoris et les dossiers (#8715)
- Un horodatage
date_addeda été ajouté à tous les favoris et dossiers (#8867) - La barre des favoris prend en charge l’ouverture dans un nouvel onglet, la copie d’URL, le clic molette et l’ouverture dans un nouvel onglet via Ctrl/Cmd+clic (#8758)
- L’API HTML5 de glisser-déposer a été reliée,
about:bookmarksl’utilise pour le réordonnancement, et elle fonctionne aussi sur les pages web classiques (#8783)
Analyse HTML, exécution des scripts et pipeline de rendu
-
Parsing HTML spéculatif et progressif
- Le parseur HTML a été modifié pour consommer progressivement le corps de la réponse (#9151)
- Les octets passent par un décodeur de texte en streaming avant d’entrer dans le tokenizer par blocs, et lorsque l’entrée est insuffisante, le tokenizer s’arrête puis reprend quand davantage de données arrivent
- Cela remplace l’ancien modèle qui attendait la réception du corps complet avant de commencer le parsing
- Un parseur HTML spéculatif a également été implémenté (#9114)
- Quand le parseur principal est bloqué par un script externe synchrone, un tokenizer séparé parcourt en avance l’entrée qui n’a pas encore été analysée et émet des récupérations spéculatives pour les ressources
<script src>,<link rel=stylesheet|preload>et<img src> - Il suit
<base href>et ignore correctement l’intérieur des templates ainsi que le foreign content - Le parseur spéculatif est relié à la preload map du document, de sorte que les ressources découvertes spéculativement sont dédupliquées avec les récupérations ultérieures du parseur normal (#9164)
-
Compilation JavaScript hors thread
- La génération du bytecode du code de premier niveau des scripts récupérés s’exécute dans le pool de threads d’arrière-plan (#9118)
- Les threads de travail produisent le bytecode et les données nécessaires à la création de
Executable, tandis que les opérations touchant à la VM ou au tas du GC restent sur le thread principal - Cela prend en charge les classic scripts, les modules et les IIFE de premier niveau, et le seul chargement de YouTube déplace environ 200 ms de temps du thread principal vers des threads d’arrière-plan
-
Rastérisation par Navigable
- Chaque Navigable est rastérisé indépendamment sur son propre thread (#8793)
- Auparavant, les iframe étaient peints de manière synchrone comme des display lists imbriquées dans la display list du parent, ce qui n’activait que le thread de rendu du traversable de niveau supérieur
- La display list du parent référence désormais la sortie rastérisée de chaque iframe via
ExternalContentSource, de sorte que l’invalidation d’un iframe ne nécessite plus de réécriture du parent - Au-delà du parallélisme, c’est aussi un travail préparatoire pour déplacer les iframe vers des processus sandbox séparés
-
Peinture GPU basée sur dmabuf sous Linux
- Sur les builds Linux Vulkan, WebContent peignait sur une surface Skia adossée au GPU, mais comme le tampon partagé avec le processus UI était un bitmap CPU, chaque flush entraînait un readback GPU-vers-CPU
SharedImagepeut désormais contenir des handles Linux dmabuf, ce qui permet aux front/back buffers de rester sur le GPU jusqu’au processus UI (#8917, #8920)
Performances et compatibilité du moteur JavaScript
-
Optimisation des appels JS-vers-JS
- Plusieurs PR ont été appliquées pour que les instructions
Call,ReturnetEndrestent dans l’interpréteur assembleur AsmInt dans les cas courants (#8891, #8909, #8912) - La sauvegarde/restauration des registres utilise des paired load/store ARM64 (
ldp/stp) ajustés manuellement - Les appels de fonctions natives sont aussi dispatchés directement depuis AsmInt via une nouvelle variante
RawNativeFunctioncontenant un pointeur de fonction classique au lieu deAK::Function(#8922)
- Plusieurs PR ont été appliquées pour que les instructions
-
Allocateur de registres de bytecode en O(1)
Generator::allocate_registerparcourait le pool disponible pour trouver le registre au plus petit numéro, et cette seule fonction consommait environ 800 ms pendant le chargement de x.com- Une fois la période d’équivalence du pipeline C++/Rust terminée, l’allocateur a été remplacé par une simple pile LIFO (#9007)
-
Itération for-in mise en cache
- Les sites
for (key in obj)mettent en cache un snapshot aplati des clés énumérables, réutilisé tant que la shape du receiver, le stockage indexé et la chaîne de prototypes restent inchangés (#8856) - Speedometer 2 passe de 67.7 à 73.6, et Speedometer 3 de 4.11 à 4.22
- Les sites
-
Autres améliorations du moteur
- Le parseur partage désormais les noms d’identifiants en zero-copy à travers le lexer, le parseur et le collecteur de scopes, ce qui rend le parsing 1,14× plus rapide sur un corpus JS de sites web et réduit la RSS de 282 Mo (#8801)
- Les concaténations de chaînes courtes sautent la représentation rope quand le résultat sera de toute façon observé comme une flat string, avec un gain de 2,13× dans des boucles serrées
a + b(#9184) - Les arrow functions à lexical-this n’allouent pas d’environnement de fonction à chaque appel, ce qui apporte une amélioration de 2,13× en microbenchmark (#9192)
- Les sparse arrays n’imposent pas de coût immédiat pour les holes, et
Array(20_000_000)reste principalement sous forme de métadonnées au lieu d’un travail proportionnel à 20 millions d’éléments virtuels (#8847) - Un nouveau type lazy
JS::Substringprend en charge les captures regexp ainsi que les builtin de chaînes commeslice,splitet l’accès indexé, avec un gain de 1,066× sur le benchmark regexp d’Octane (#8863) - Les positions source sont désormais préservées de bout en bout dans la source map du bytecode, ce qui fait gagner environ 250 ms sur x.com (#9027)
- Le
TransferArrayBufferen zero-copy fait gagner environ 130 ms au chargement de YouTube (#9088) - La vue de typed-array mise en cache est passée de
WeakHashSetà une intrusive list, ce qui fait gagner environ 250 ms lors du chargement du PDF Intel ISA dans pdf.js (#9180) - Au lieu d’allouer pour chaque
Promisedeux cellulesPromiseResolvingFunctionavec des closuresAK::Functionnon capturantes, le système utilise désormais des fonctions statiques dispatchées via un enumKind, supprimant ainsi les allocations par resolver (#9188) - Le marquage de la table de propriétés des shapes non-dictionary est ignoré, ce qui réduit le temps de GC de 1,3 s pendant le chargement de maptiler.com (#9044)
- Un fast path a été ajouté pour
Array.prototype.indexOfsur les packed arrays (#9123) Array.prototype.sortréutilise l’UTF-16 mis en cache au lieu de retranscoder à chaque comparaison (#9036)- Les imports de WASM, JSON et modules CSS ont été ajoutés (#6029)
- La prise en charge de la proposition
ShadowRealma été supprimée, le processus de standardisation étant au point mort (#8753)
API de la plateforme web et CSS
-
Cache et CacheStorage
CacheetCacheStorageont été implémentés de bout en bout (#8745)- 9 méthodes, dont
open,has,delete,keys,match,matchAll,add,addAlletput, fonctionnent sur la base d’un stockage temporaire en mémoire
-
Fonctionnalités CSS et correctifs de rendu
- Une prise en charge de base des formes standard et préfixées
-webkit-deimage-set()a été ajoutée ; au moment du paint, la résolution candidate la mieux adaptée au device pixel ratio est sélectionnée, et les types MIME non pris en charge sont ignorés (#9090) - Grâce à la prise en charge de
image-set(), l’image d’en-tête de gocomics.com s’affiche - Une prise en charge initiale de
position-anchoret du CSS anchor positioning a été ajoutée, corrigeant la position de la main et de l’arme sur cssdoom.wtf (#8686) - L’interpolation des couleurs a été réécrite pour se conformer à css-color-4 : elle se fait désormais en float plutôt qu’en
u8, avec une gestion cohérente des missing/powerless components, du sRGB out-of-gamut et du multiplicateur alpha (#8934) - Les anciens attributs HTML de présentation comme
alignetbgcolorn’écrivent plus directement dans les propriétés déjà passées par la cascade ; ils passent désormais par la cascade comme des déclarations auteur classiques, ce qui permet à la substitutionvar()et au fallback invalid-at-computed-value-time de fonctionner correctement (#9176) - Ce changement dans la cascade des presentational hints a corrigé un crash sur html.spec.whatwg.org
<thead>,<tbody>,<tfoot>et<tr>prennent désormais en compte l’attribut de présentationalign, corrigeant la disposition des boutons sur bricklink.com (#9177)- L’interpolation de
stroke-dasharraypermet désormais une animation fluide des tirets SVG (#9133) - Les éléments ayant l’attribut
autofocusreçoivent effectivement le focus au chargement de la page (#9016) - Les marqueurs de liste des textes RTL sont placés à droite, ce qui corrige le rendu des listes sur la Wikipédia arabe (#9099)
- La baseline des conteneurs inline flex/grid est désormais dérivée de la première line box de l’enfant, et non de la dernière ligne renvoyée à la ligne, ce qui corrige l’alignement du texte des liens et des icônes sur nos.nl (#9183)
- Une prise en charge de base des formes standard et préfixées
Réseau et invalidation de style
-
Réseau
getaddrinfone bloque plus l’event loop- LibDNS exécute désormais les lookup dans un thread pool, émet les requêtes
AetAAAAen parallèle et fusionne les lookup simultanés pour un même nom (#9109) - Le chemin de preconnect de RequestServer a été corrigé pour ne plus contourner le resolver, de sorte que le threaded resolver de libcurl, qui provoquait un
pthread_joinsur le main thread, passe désormais par le même chemin de pool DNS (#9109) - Quand WebContent était plus lent que le réseau, l’évacuation des données de réponse en file d’attente dans RequestServer était en O(n²), et l’ouverture d’une vidéo YouTube consommait environ 30 secondes dans
memcpyet 3 secondes dansVector::remove AllocatingMemoryStreama été converti en liste chaînée simple de chunks, ce qui ramène la consommation à O(1) (#9028)- L’en-tête
Acceptdes requêtes d’image annonce désormais AVIF et WebP pour s’aligner sur les autres moteurs, certains CDN utilisant cet en-tête pour décider de servir des formats modernes ou un fallback JPEG (#9046)
-
Invalidation de style
- L’invalidation de sélecteur existante était simple en partant du principe qu’un sélecteur ne regarde que vers le bas, mais avec
:hostet:has(), une modification de descendant peut changer le résultat de:has()sur un ancêtre, ce qui nécessite désormais une traversée vers le haut - Les caches de tous les scopes de style ne sont plus reconstruits lorsqu’une mutation de stylesheet ne modifie qu’un seul scope, ce qui réduit la reconstruction du cache de règles sur Reddit de 13,2 s à 3,2 s (#9138)
- L’invalidation structurelle entre siblings ne se propage plus aux descendants qui n’observent pas la position, ce qui réduit de 11 % les recomputations inutiles dans l’infinite scroll de Reddit (#9155)
- L’invalidation sur mutation de
:has()saute désormais les anchors non affectés, avec une forte baisse mesurée sur azure.com (#9168) - Dans le PDF Intel ISA, les visites de liste d’enfants pour
:has()sont passées de 71k à 1,6k, ce qui économise environ 650 ms au chargement de pdf.js (#9179) - Une nouvelle batterie de tests d’invalidation structurelle a révélé plusieurs invalidations manquantes, désormais corrigées (#9095)
- S’y ajoutent de petites améliorations autour de hover, du scope de mutation de stylesheet, de la map de custom properties et du diff des styles calculés (#9077, #9049, #9079, #9080, #9141)
- L’invalidation de sélecteur existante était simple en partant du principe qu’un sélecteur ne regarde que vers le bas, mais avec
Allocation mémoire et système de build
-
mimalloc comme allocateur par défaut
- Le code C++ et Rust partage désormais une unique instance d’allocateur mimalloc v2, chacun sans passer par le system allocator (#8752)
- Comme
malloc()n’est pas surchargé à l’échelle du système, les bibliothèques tierces conservent leur propre contrat d’allocateur - Les benchmarks JS s’améliorent globalement
-
Rust devient obligatoire et nettoyage du système de build
-
Changements liés au GC et à la mémoire
- La compilation utilise
-ftrivial-auto-var-init=zero, ce qui écrase à 0 les anciens pointeurs GC à l’entrée des fonctions afin que le scanner conservatif de pile les retrouve moins souvent (#9171) - La propriété
UsedValues, rarement utilisée, a été déplacée derrière un pointeur lazy, ce qui réduit la struct de 424 octets à 176 octets et fait passerLayoutState::populate_node_from()de 139 ms à 65 ms lors du chargement de sainsburys.co.uk (#9104) - Les chunks du corps fetch, qui allouaient 7 objets GC par chunk en passant par le chemin pull-promise, sont désormais injectés directement dans le byte stream controller (#9169)
- La compilation utilise
Comportement amélioré des sites
-
Reddit
- Le carrousel de galerie d’images de Reddit fonctionne désormais, et deux bugs de layout sans rapport ont été corrigés autour du matching
::slotted()et d’un descendant en position absolue dans une inline fragmentée (#9148) - Grâce à
TextDecoderStream, la SPA n’intercepte plus les clics sur les liens, ce qui permet d’ouvrir les commentaires - L’infinite scroll bénéficie lui aussi du travail sur l’invalidation structurelle
- Le carrousel de galerie d’images de Reddit fonctionne désormais, et deux bugs de layout sans rapport ont été corrigés autour du matching
-
YouTube
- YouTube bénéficie de la compilation JS top-level hors thread, de la décompression WOFF2 hors thread, d’une réduction du fanout des fetch
@font-face, d’une correction du memory churn de RequestServer et duTransferArrayBufferzero-copy - La décompression WOFF2 hors thread fait aussi gagner environ 170 ms sur Gmail (#8976)
- Au chargement initial, le fanout des fetch
@font-faceest passé de 177 à environ 9 (#9032)
- YouTube bénéficie de la compilation JS top-level hors thread, de la décompression WOFF2 hors thread, d’une réduction du fanout des fetch
-
Autres sites
- Sur gocomics.com, l’image d’en-tête s’affiche grâce à
image-set() - Sur yandex.com/maps, le rendu WebGL des vector tiles fonctionne grâce à des correctifs WebGL, dont l’extension
WEBGL_debug_renderer_info(#9043) - Sur strava.com, la connexion fonctionne car
Navigator.getBatterylève désormais le type d’erreur imposé par la spec au lieu de sa propre erreur (#8770) - GitHub Insights se charge environ 100 ms plus vite grâce au cache de sélecteurs de
Element.matches()et.closest()(#8987) - La page de comparaison de portables de tweakers.net est environ 31 % plus rapide grâce à une recherche indexée des noms de propriétés de
HTMLFormElement(#9009) - neon.com ne plante plus (#8812)
- Sur channel4.com, un correctif de résolution des auto-margins en flex règle le problème d’alignement vertical du texte de catégorie (#9050)
- Cloudflare Turnstile n’est toujours pas franchi, mais l’échec est bien plus rapide grâce à la gestion des auth schemes, à l’optimisation de
Array.prototype.shift()et au durcissement des gestionnaires d’événements UA pour les éléments<input>de type range et number (#9063)
- Sur gocomics.com, l’image d’en-tête s’affiche grâce à
WPT et autres évolutions de la plateforme
-
Web Platform Tests
- Le score WPT est passé de 2,003,537 à 2,067,263, soit une hausse de 63 726 subtests ce mois-ci
- Cela dit, WPT a intégré en amont test262, la suite officielle de conformité ECMAScript, ce qui a ajouté 53 207 subtests JavaScript
- Ladybird exécute test262 séparément depuis des années et la conformité de LibJS est déjà bonne, si bien qu’il en réussit 52 045, soit 97,8 %
- Sur les 63,7k de hausse, environ 52k proviennent de l’import de test262, et les 11,7k restants correspondent à de réels progrès de la plateforme navigateur
- Avec l’import de test262, WPT mesure désormais la conformité JavaScript en même temps que le reste de la plateforme
-
Texte, layout, processus et UI
- La sélection et le hit testing du texte avec ligatures n’assument plus une code unit par glyphe, mais parcourent les grappes de graphèmes et répartissent l’avance des glyphes entre ces graphèmes (#8829)
- Définir
innerHTMLsur une shadow root n’invalide plus tout l’arbre de layout du document, ce qui réduit de 21 % le temps de layout-and-paint sur pomax.github.io/bezierinfo (#9191) - Naviguer un onglet popup vers un autre site ne met plus fin au processus WebContent du parent (#8730)
- Dans l’interface Qt,
Ctrl+TabetCtrl+Shift+Tabpermettent désormais de parcourir les onglets ouverts (#8704) - Il est possible de faire défiler en maintenant le bouton central de la souris enfoncé et en glissant, ou d’entrer en mode autoscroll par un clic sur place (#8881, #8928)
- Quand la saisie dans la barre d’adresse ne peut pas être assainie en URL ou en requête de recherche, une page d’erreur appropriée s’affiche au lieu d’ignorer silencieusement l’entrée (#9072)
TextDecoderStream, pendant streaming deTextDecoder, a été implémenté, avec mise en attente des UTF-8 partiels aux frontières de chunks, ce qui permet désormais de modifier les commentaires sur Reddit (#9143)- Les messages
BroadcastChannelinter-processus sont désormais routés par IPC entre les processus WebContent et WebWorker, de sorte que les listeners se comportent comme dans les autres navigateurs, quel que soit le processus où ils se trouvent (#8865)
1 commentaires
Avis Hacker News
Dioxus, un framework GUI Rust, est en cours de développement comme composant de son moteur de rendu natif et suit une direction où il cherche à créer lui-même une alternative à Skia, comme Flutter, mais sur le web il fonctionne selon les standards HTML/CSS au lieu d’utiliser uniquement un canvas comme Flutter web
Il ne dépend pas de bases de code de navigateurs existantes comme Chromium, Gecko ou WebKit, et s’apparente à une implémentation presque reconstruite depuis zéro en s’appuyant sur des crates Rust comme stylo et taffy utilisées par Servo : https://github.com/DioxusLabs/blitz (
/apps/browser)De nombreux sites bloquent délibérément le chargement sur certains navigateurs et n’autorisent que Chromium, et c’est la réalité à laquelle Ladybird va se heurter, ainsi qu’un facteur majeur qui empêche l’arrivée de nouveaux concurrents
Le DRM Widevine est lui aussi très difficile à obtenir pour un nouveau navigateur, et même Zen Browser, avec 10 millions d’utilisateurs, n’a pas réussi à l’obtenir
J’utilise Firefox depuis 20 ans et je n’ai jamais vu un site me demander de passer à Chromium pour des raisons de compatibilité
Widevine est bien une vraie barrière, mais en pratique cela bloque surtout la lecture 4K sur quelques sites de streaming comme Netflix ou Disney
Le fait que Zen ait tout de même réuni 10 millions d’utilisateurs sans Widevine montre que ce n’est pas forcément si crucial
Si l’on contrôle le navigateur lui-même, il n’y a quasiment rien d’impossible en dehors des problèmes liés au DRM
Ce genre de billet me rappelle le plaisir de lire des mises à jour d’émulateurs de jeux
Du style « on a corrigé le bug X, ce qui permet à Y de fonctionner correctement, et par conséquent le jeu Z se lance », sauf qu’ici l’un des correctifs concerne CSS Doom, donc il y a bien un certain chevauchement avec le jeu vidéo
J’ai déjà entendu Andreas dire à plusieurs reprises que créer un navigateur revenait à créer un émulateur
Chaque site utilise des fonctionnalités différentes de façons différentes, et il compare les sites web à des ROM
Je suis un utilisateur de longue date de Firefox, mais dès que Ladybird entrera dans une alpha très précoce et que des builds précompilés commenceront à sortir, je compte absolument l’essayer tôt
GTK4 / libadwaita frontend, ça fait plaisirJe préfère l’UI/UX GTK à Qt, donc j’attends avec intérêt les progrès de ce côté
strava.com : Login works now that Navigator.getBattery throws the spec-mandated error type instead of one of our own (#8770).Pourquoi Strava voudrait connaître le niveau de ma batterie ?
Il existe peut-être une version web destinée aux pays en développement, ou ils veulent réduire la fréquence des demandes de localisation si la batterie est faible pour économiser de l’énergie
Ce n’est qu’une supposition, mais qu’un site comme Strava demande des informations sur la batterie n’est pas totalement absurde, même si, globalement, cela reste un peu suspect
En supposant qu’on puisse aussi l’utiliser via le site web, ils cherchent probablement à ajuster la fréquence des relevés de position pour trouver un compromis entre précision et consommation d’énergie
Cela dit, la capture d’écran des puces de liste en texte RTL semble identique
Dans les deux cas, les puces sont à gauche
En revanche, dans l’image « before » https://ladybird.org/assets/img/newsletter-apr-2026-rtl-befo..., les puces sont non seulement à gauche du texte, mais presque hors du panneau tellement elles sont décalées vers la gauche
J’ai énormément de respect pour la personne qui a utilisé Evangelion r/unixporn pour les tests Reddit de Ladybird
Je n’ai pas tant regardé Evangelion que ça, mais j’ai vu d’innombrables documentaires explicatifs et je l’aime suffisamment pour l’avoir eu un temps en fond d’écran
Le point essentiel, c’est que Reddit fonctionne dans Ladybird, ce qui est énorme
Je ne sais pas si YouTube fonctionne, mais j’espère que oui, et on commence vraiment à sentir que Ladybird pourrait devenir utilisable au quotidien
Merci aussi à https://jakubsteplow.ski/ pour son soutien à Ladybird
J’aimerais qu’on mette davantage en avant, de manière proactive, les gens qui font des dons aux projets open source plutôt que des choses comme la publicité Google, et je souhaite le meilleur à Jakub, en espérant que d’autres soutiennent eux aussi indépendamment des projets comme Ladybird
Merci aussi à la Human Rights Foundation et à son programme https://hrf.org/program/ai-for-individual-rights/
Le fait qu’une seule personne ait pu aller aussi loin dans un monde des navigateurs proche d’un monopole ou d’un oligopole est impressionnant et vraiment inspirant
Il y a en gros deux aspects : d’un côté une SF mécha/extraterrestres/monstres avec une esthétique formidable, de l’autre un drame personnel centré sur la haine de soi et la solitude
Pour la plupart des gens, le premier aspect sera sans doute le plus attirant, mais c’est le second qui continue de marquer durablement
Si vous regardez, faites attention à l’ordre de visionnage
Il y a la chronologie de la série TV originale suivie du film « End of Evangelion », et séparément la série de films « Rebuild of Eva », qui commence comme un reboot complet avant de devenir, d’une certaine manière, le reboot/remake/suite finale de l’œuvre originale
À la question « combien de personnes travaillent aujourd’hui sur le navigateur ? », il est indiqué que Ladybird compte actuellement 8 ingénieurs salariés à temps plein, ainsi qu’une importante communauté de contributeurs bénévoles
La plupart des choses fonctionnent aussi, mais en dehors de la vitesse, le principal problème est que beaucoup de vérifications “êtes-vous humain ?” ne marchent pas correctement dans Ladybird