MENU

La trinité de la confiance : Ada, SPARK et Rust dans l’embarqué

La trinité de la confiance : Ada, SPARK et Rust dans l’embarqué

Applications |
Par C.J. Abate, A Delapalisse



Trois langages de programmation façonnent l’avenir de la sécurité de la mémoire dans les systèmes embarqués : Ada, SPARK et Rust. Chacun d’entre eux a été conçu dans un souci de fiabilité, mais leurs approches diffèrent de manière à offrir aux ingénieurs des choix significatifs en fonction des exigences du projet et des objectifs finaux. Alors que les langages traditionnels tels que C et C++ laissent la gestion de la mémoire au développeur, ce qui entraîne souvent des failles de sécurité, ces alternatives modernes apportent des garanties de sécurité directement dans la conception de base du langage.

Ada

Qu’est-ce qu’Ada ? Ada est un langage utilisé depuis longtemps dans l’aérospatiale, la défense et divers domaines critiques en matière de sécurité. Sa force réside dans un typage et une modularité solides, qui permettent de prévenir les nombreuses catégories de bogues les plus courantes. En mettant l’accent sur la lisibilité et l’explicitation, Ada permet difficilement aux pratiques dangereuses de se glisser dans le code de production.

De nombreux développeurs se tournent vers Ada parce qu’il s’agit d’une solution éprouvée pour construire des solutions embarquées fiables et sûres. Il a une longue histoire dans les domaines critiques de sécurité comme l’aérospatiale et la défense, où l’échec n’est pas une option. Son typage fort et ses fonctions de concurrence intégrées permettent d’éviter les bogues que l’on trouve régulièrement dans des langages comme le C. Pour les ingénieurs qui travaillent sur des projets soumis à des exigences de certification strictes, Ada peut fournir un cadre robuste qui rend difficile l’introduction de vulnérabilités, ce qui conduit à des produits finaux plus sûrs et plus stables.

SPARK

SPARK est un sous-ensemble formellement vérifiable d’Ada qui introduit des techniques de preuve mathématique avancées permettant aux développeurs de vérifier à la compilation l’absence de certaines catégories de défauts (par exemple, les débordements de mémoire tampon ou les courses de données). SPARK est donc très utile dans les secteurs où la certification des logiciels et les garanties d’exactitude sont nécessaires.

Pour les ingénieurs très concernés par la vérification et l’exactitude absolue, SPARK est un choix logique. En tant que sous-ensemble formellement vérifiable d’Ada, il permet aux développeurs d’utiliser des preuves mathématiques pour démontrer l’absence de certaines erreurs d’exécution au moment de la compilation. Cela offre un niveau d’assurance utile pour les systèmes critiques. Pour le public d’eeNews Europe/ECInews, cela signifie que SPARK est particulièrement adapté aux applications où le coût d’un défaut logiciel est astronomiquement élevé, comme dans l’avionique, les véhicules autonomes ou les appareils médicaux.

Rust

Rust, quant à lui, est un nouveau venu qui s’est rapidement imposé dans la programmation des systèmes et des systèmes embarqués. Sa caractéristique principale est le modèle de propriété, qui impose des règles strictes sur la manière dont la mémoire est allouée, empruntée et libérée, le tout au moment de la compilation. Cela permet d’éliminer des catégories entières d’erreurs d’exécution, notamment les pointeurs pendants et les doubles libérations, sans qu’il soit nécessaire d’avoir recours à un ramasse-miettes. Les développeurs sont attirés par Rust non seulement pour sa sécurité mémoire, mais aussi pour son écosystème d’outils modernes et sa capacité d’interopérabilité avec des bases de code C existantes via des interfaces de fonctions étrangères.

Les lecteurs d’eeNews Europe/ECInews devraient être intéressés par Rust pour son approche moderne de la sécurité de la mémoire sans sacrifier la performance. Son modèle de propriété est une caractéristique clé qui empêche les erreurs de mémoire courantes en C/C++ (par exemple, les pointeurs pendants et les débordements de mémoire tampon au moment de la compilation), éliminant ainsi de nombreuses vulnérabilités en matière de sécurité. L’outillage moderne de Rust, son puissant gestionnaire de paquets et son écosystème en pleine expansion en font une option attrayante pour les nouveaux projets. Sa capacité à interopérer avec les bases de code C existantes en fait également un choix pratique pour mettre à jour les systèmes existants et adopter un paradigme plus sûr d’une manière à la fois efficace et évolutive.

Le changement

Ensemble, ces langages reflètent une évolution vers des solutions de programmation sans risque pour la mémoire. Les régulateurs et les équipementiers exigeant de plus en plus de solides défenses contre les exploits de sécurité, Ada, SPARK et Rust offrent des solutions viables aux ingénieurs qui doivent fournir des performances élevées et une grande assurance. Pour les architectes de systèmes embarqués, le choix entre ces solutions se résume souvent à des compromis en termes de maturité de la chaîne d’outils, de préparation à la certification et de support global, mais le fil conducteur est clair : la sécurité n’est plus optionnelle ; c’est un impératif d’ingénierie.

Ada, SPARK, Rust et l’avenir du code sûr

Vous voulez en savoir plus ? Dans Elektor Engineering Insights #54, Quentin Ochem, Chief Product and Revenue Officer chez AdaCore, a dirigé une session d’information explorant comment Ada, SPARK et Rust redéfinissent la fiabilité dans les systèmes embarqués.

Ochem a commencé par opposer ces langages aux solutions traditionnelles telles que C et C++, dont les vulnérabilités inhérentes (par exemple, les débordements de mémoire tampon, les doubles libérations, et ainsi de suite) continuent d’affliger les systèmes critiques en matière de sécurité. En réponse, Ada et SPARK offrent un typage fort et une vérification formelle ; Rust apporte son modèle de propriété robuste pour la sécurité au moment de la compilation.

Il a ensuite abordé les points suivants :

  • Prévention des défauts par la conception du langage : Ada et SPARK bénéficient de capacités d’analyse statique et de preuve mathématique qui contribuent à garantir l’absence de bogues de bas niveau. Rust, quant à lui, assure la sécurité de la mémoire grâce à des règles de compilation strictes concernant la propriété et l’emprunt.
  • Pertinence et adoption par l’industrie : L’expérience d’Ada couvre les secteurs de l’aérospatiale et de la haute sécurité, tandis que Rust suscite une attention croissante dans les domaines des technologies embarquées et des technologies de l’information. Ochem mentionne des exemples spécifiques tels que Nvidia qui utilise SPARK dans les contextes de l’automobile et des microprogrammes.
  • Outillage et intégration : Les téléspectateurs découvrent les chaînes d’outils de compilation, l’intégration des langages à sécurité mémoire dans les bibliothèques C existantes via des interfaces de fonctions étrangères, et les stratégies d’optimisation des performances, de ciblage du matériel et de conformité aux normes de certification telles que la norme ISO 26262.

Pour les lecteurs d’eeNews Europe/ECInews, en particulier les développeurs embarqués et les architectes de systèmes, l’épisode offre un aperçu utile de la mise en œuvre pratique et des compromis lors de l’adoption de paradigmes de sécurité de la mémoire. Les personnes intéressées par l’amélioration de la fiabilité à long terme des logiciels peuvent s’attendre à un contenu riche en informations et pertinent dans le monde réel.

Si vous avez apprécié cet article, vous aimerez les suivants : ne les manquez pas en vous abonnant à :    ECI sur Google News

Partager:

Articles liés
10s