Intermédiaire·2 min·6 juin 2026

Exécute du Python en sandbox avec MicroPython et WebAssembly

🎧 Résumé audio0:00 / 0:00
Un développeur a créé une sandbox Python qui isole vraiment le code exécuté—sans dépendre de V8 ou Pyodide.
Exécute du Python en sandbox avec MicroPython et WebAssembly

Pourquoi ça compte pour toi

Si tu construis un outil qui accepte du code utilisateur (plugins, enrichissements de données, workflows), tu dois l'isoler. MicroPython compilé en WebAssembly + wasmtime te donne des limites strictes : pas d'accès fichiers non approuvés, pas de réseau, CPU et mémoire contrôlés. C'est utile pour Datasette, mais aussi pour n'importe quel service qui exécute du code tiers.

Ce qu'il faut retenir

  • 1.MicroPython (version légère de Python 3) compilé en WASM, pas Pyodide (non pris en charge côté serveur)
  • 2.Contrôle CPU/mémoire, accès fichiers/réseau strictement défini, fonctions hôtes exposées sélectivement
  • 3.État persistant entre appels : variables et fonctions restent en mémoire via des files d'attente et des threads

Tu galères avec le jargon ?

Lis la version réécrite en mode débutant — toutes les idées, sans le jargon.

Pourquoi une sandbox ?

Simon Willison maintient des projets comme Datasette et sqlite-utils qui s'appuient sur des plugins Python. Le problème : un plugin bugué ou malveillant s'exécute avec tous les droits. Un while True: s += "x" peut bloquer l'appli, un plugin curieux peut lire tes fichiers privés ou atteindre le réseau.

Il voulait une sandbox où le code ne peut pas :

  • Lire/écrire que les fichiers approuvés
  • Se connecter au réseau
  • Monopoliser le CPU/RAM sans limite

Mais il fallait aussi que ce soit :

  • Installable via PyPI sans effort supplémentaire
  • Maintenu et documenté (pas un projet zombie)
  • Capable d'exposer des fonctions hôtes sélectionnées

Pourquoi WebAssembly ?

Les navigateurs exécutent du code hostile tous les jours. Les moteurs JavaScript (V8, SpiderMonkey) sont très sécurisés mais énormes et mal documentés pour l'intégration embarquée. WebAssembly a été conçu pour ça depuis le début : conception simple, éprouvée 10 ans en production, et wasmtime (le runtime Python) est maintenu avec des binaires pré-compilés.

Pour Python en WASM, Pyodide existe mais uniquement en navigateur. Simon a essayé MicroPython—une implémentation légère de Python 3 optimisée pour les microcontrôleurs. Pourquoi pas ? C'est un environnement contraint, WebAssembly aussi.

Comment ça marche ?

Le plus technique : GPT l'a aidé à déterrer une PR MicroPython sur le support WASI expérimental, puis il a demandé aux agents IA de compiler une version WASM personnalisée.

Le plus astucieux : l'état persistant. Le binaire WASM de base démarre l'interpréteur, exécute le code, puis l'arrête. Pour conserver des variables entre appels, Simon a créé une boucle à l'intérieur de MicroPython qui :

  1. Appelle une fonction hôte get_next_python_code()
  2. Cette fonction bloque et attend du code via une file d'attente (thread côté Python)
  3. Exécute le code via eval()
  4. Renvoie le résultat via __session_result__()

Résultat : tu peux faire ça :

from micropython_wasm import MicroPythonSession
with MicroPythonSession() as session:
    print(session.run("x = 10\nprint(x)").stdout)  # 10
    print(session.run("x += 5\nprint(x)").stdout)   # 15
    print(session.run("print(x * 2)").stdout)       # 30

Les variables survivent d'un appel à l'autre.

Le reste ?

78 lignes de C pour exposer les fonctions hôtes, compilées dans un blob WASM de 362 KB. Simon a demandé aux IA d'expliquer le C après coup—bon signe qu'il ne comprend pas tout mais teste agressivement.

C'est en alpha. Le code est sur GitHub. À tester si tu construis quelque chose qui exécute du Python utilisateur.

Et concrètement pour toi ?

Choisis ton profil — la lecture de l'article change selon qui tu es.

🔭 Curieux

Pour toi, l'idée clé : exécuter du code utilisateur sans risque, c'est un vieux problème revisité par la vague des plugins et agents IA. MicroPython en WASM montre comment des outils légers peuvent remplacer des solutions lourdes—c'est la tendance du "small but solid" en tech.

Newsletters Noésis

3 minutes d'IA dans ta boîte mail, chaque matin.

Rejoins les francophones qui comprennent, essaient et progressent avec l'IA. Choisis ce que tu veux recevoir. Désabonnement en 1 clic.

Explorer les thèmes de cet article :