Un langage pour contrer les risques induits par l'IA

Face à la capacité croissante de l'intelligence artificielle à écrire du code et à y dissimuler des logiques malveillantes, le développeur Uri Valevski a conçu Safescript, un nouveau langage de programmation présenté comme une réponse aux limites des langages existants. Selon son auteur, la revue humaine de code n'est plus fiable face au rythme de production de l'IA, tandis que l'analyse automatisée reste insuffisante dans les langages Turing-complets.

Safescript se veut non Turing-complet afin de permettre la démonstration formelle de propriétés sur le flux d'information au sein du code. Il repose sur la composition de structures de graphes acycliques dirigés (DAG), est immuable et propose une syntaxe proche de TypeScript. Valevski affirme qu'aucun langage grand public n'offre des capacités similaires.

Des propriétés formelles pour la sécurité

Le langage permet de prouver formellement des assertions comme : « ce jeton arrive-t-il sur un hôte non souhaité ? », « une sortie de l'hôte X parvient-elle à l'hôte Y ? » ou encore « un paramètre donné reste-t-il local ou contamine-t-il des données qui atteignent l'hôte Z ? ». Les sources et puits d'information peuvent être des paramètres, des variables d'environnement, des entrées et sorties d'API, ou le système de fichiers.

Selon Valevski, les politiques de sécurité deviennent ainsi « superpuissantes » et les attaques sur la chaîne d'approvisionnement deviennent impossibles, ce qui permettrait de toujours utiliser la dernière version d'une bibliothèque sans crainte. Il donne l'exemple d'une bibliothèque de statistiques qui ne devrait pas avoir accès à Internet, ou d'une bibliothèque d'API qui ne devrait divulguer aucune donnée vers un autre hôte que celui prévu.

Simplicité et efficacité pour les développeurs

Au-delà de la sécurité, Safescript se veut aussi « efficace en jetons » (token efficient) et réducteur de complexité. Le langage résout le problème de la refactorisation en permettant d'éditer une logique profondément imbriquée sans nécessiter d'opérations proportionnelles au nombre de lignes de code (O(n)). Cela est possible grâce à la composition plate des DAG et à la remontée implicite des dépendances manquantes. Un paramètre peut ainsi être ajouté à une fonction profondément imbriquée sans modifier le code appelant.

L'injection de dépendances et le mock sont des primitives intégrées au langage, accessibles via le mot-clé override, qui permet de manipuler un nœud du DAG depuis l'extérieur. Valevski affirme que cela simplifie radicalement les bases de code et facilite le raisonnement sur leur comportement.

Tests et performance

Le langage permet également de savoir quand un test doit être relancé ou non, car la structure en DAG peut être hachée et mise en cache. Selon son créateur, cela autorise l'écriture de millions de tests sans augmenter la facture cloud.

Limitations et adoption

Valevski reconnaît que Safescript ne peut pas être utilisé pour tout. Il ne remplacera pas un langage comme C, mais pourrait être employé pour rédiger plus de 90 % du code de bibliothèques. Grâce à un contrôle total des effets, il n'est pas nécessaire de l'exécuter dans une machine virtuelle ; il peut tourner en mémoire.

L'auteur indique qu'il ne sait pas si Safescript sera adopté. La société Prompt2Bot, dont il est à l'origine, l'utilise déjà comme langage de script pour ses compétences en IA. Avec l'IA, il est possible de traduire de nombreuses bibliothèques vers Safescript rapidement, et des outils intégrés permettent la traduction inverse vers des langages courants.

Valevski a publié cet appel à diffusion sur une plateforme de publication personnelle, espérant que l'idée soit reprise par la communauté des développeurs.