Le passage de Bun de Zig à Rust aurait déjà été une grande histoire open source sans IA. Bun est un runtime et toolkit JavaScript/TypeScript sérieux: package manager, bundler, test runner et APIs compatibles avec Node.

Migration de runtime open source guidée par les tests et la CI

Le débat a explosé à cause de la méthode. Dans son billet du 8 juillet, Jarred Sumner explique que Bun a été acquis par Anthropic en décembre 2025, que l'équipe travaille désormais chez Anthropic et qu'une préversion de Claude Fable 5 a servi pour une grande partie du port vers Rust. Le lendemain, Andrew Kelley, créateur de Zig, a publié une réponse très critique. Deux fils Hacker News ont transformé le rewrite en débat sur les langages, les agents IA, les tests, l'argent et les relations dans l'open source.

La lecture facile serait "Rust a battu Zig". Elle rate le point. La lecture utile est celle-ci: Bun teste si un gros projet d'infrastructure peut désormais tenter une migration autrefois presque interdite, à condition d'avoir une bonne suite de tests, du feedback compilateur, de la CI, une revue humaine et beaucoup de capacité agentique.

Ce qui a changé

Bun a commencé comme projet Zig. Sumner reconnaît que Zig a rendu la première version possible. Le périmètre a ensuite grossi: transpiler, minifier, bundler, package manager compatible npm, test runner proche de Jest, résolution de modules, client HTTP/WebSocket et APIs Node.

Cette ampleur a apporté de la valeur, mais aussi des bugs difficiles. Le billet liste des problèmes dans node:zlib, node:http2, UDP sockets, Buffer, TLS, fs.watch, le parser CSS et l'intégration JavaScriptCore. Beaucoup relèvent de la durée de vie mémoire: use-after-free, double-free, leaks et nettoyage oublié en cas d'erreur.

L'argument n'est pas que Zig serait mauvais. Il est plus précis: Bun vit à la frontière entre GC JavaScriptCore, ressources natives, FFI, callbacks asynchrones et mémoire manuelle. Dans ce contexte, transférer davantage de règles d'ownership au compilateur peut être rationnel.

Rust ne rend pas la FFI sûre. Il n'efface pas unsafe. Il ne prouve pas que les tests couvrent tout. Mais il peut déplacer une partie des erreurs de lifetime vers la compilation.

Une échelle inhabituelle

Le PR GitHub oven-sh/bun#30412 rend l'histoire concrète: des milliers de commits, plus de deux mille fichiers modifiés et environ un million d'ajouts. GitHub indique maintenant Rust comme langage principal du dépôt.

Ce n'est pas un refactor de week-end. C'est une migration de codebase.

Ce n'est pas non plus un rewrite manuel classique. Sumner décrit des workflows agentiques, des essais limités, des erreurs de compilation, des tests en échec, une revue adversariale et des corrections du processus quand les agents se trompaient. Simon Willison y voit un cas détaillé d'agentic engineering et souligne l'élément clé: la suite de tests TypeScript de Bun servait de conformance suite indépendante du langage.

C'est la leçon la plus réutilisable. Les agents n'étaient pas fiables parce qu'ils étaient intelligents. Ils étaient utiles parce qu'un oracle externe jugeait le résultat: compiler, tester, comparer, recommencer.

Ce que les mainteneurs peuvent en tirer

L'IA change l'économie du rewrite, pas la responsabilité. Les humains ont conçu la migration, lu les sorties, ajusté le processus, décidé le merge et assument les conséquences. Les agents ont transformé les erreurs de compilation et les tests en file de travail parallèle.

Cela ne rend pas sûrs les rewrites d'un million de lignes. Cela les rend envisageables pour quelques projets très préparés.

La partie à copier n'est pas le diff massif. C'est la préparation: tests de comportement, CI rapide, baselines de performance, fuzzing si nécessaire, petites migrations d'essai, revue du processus qui génère le code et responsable humain clairement identifié.

La mauvaise leçon serait "les agents peuvent tout réécrire". Sans tests solides, ils produisent seulement plus de désordre, plus vite.

Les limites restent réelles

Rust réduit certaines classes de bugs, mais Bun garde des frontières difficiles: JavaScriptCore, bibliothèques natives, FFI, unsafe et runtime riche en callbacks. L'issue PathString::slice autour de Miri rappelle qu'un port Rust a encore besoin de checks d'undefined behavior et de discipline CI.

Les tests ont aussi leurs limites. Une grosse conformance suite est précieuse, mais elle ne prouve pas tous les edge cases d'un runtime compatible Node.

Les utilisateurs doivent vérifier leur canal de release. Le Rust port est décrit comme utilisé dans Claude Code depuis v2.1.181, mais cela ne signifie pas que chaque utilisateur stable de Bun est déjà sur cette implémentation.

La leçon open source

Bun ne prouve pas que Rust a vaincu Zig. Il ne prouve pas non plus que l'IA peut réécrire n'importe quel projet. Il montre une nouvelle catégorie d'événement open source: migration d'infrastructure assistée par agents, publique, avec tests et utilisateurs réels.

Les grands rewrites restent dangereux. Leur coût change. Les projets avec conformance suites, CI disciplinée et revue humaine peuvent tenter des migrations autrefois impensables. Les autres feront seulement un plus gros chaos plus rapidement.