Introduction

Lib0xc est un ensemble d'API conçues pour rendre la programmation de systèmes plus sûre en C. Bien que le C ne puisse pas être rendu complètement sûr en termes de types et de limites au niveau du langage, ses utilisations prédominantes peuvent être rendues beaucoup plus sûres qu'elles ne le sont aujourd'hui.

Contexte Technique

Les API de lib0xc sont conçues pour ressembler à des fonctions de la bibliothèque standard et peuvent être utilisées comme des remplacements directs lorsque cela est approprié. De nombreuses API de lib0xc sont conçues pour être utilisées avec des structures de données de taille fixe et vérifient que les informations de taille pour un argument particulier sont disponibles au moment de la compilation.

Lib0xc repose fortement sur le préprocesseur C pour exposer sa surface d'API. De nombreuses API sont des macros. En restreignant le code à l'utilisation d'objets de taille fixe et en évitant les allocations dynamiques, lib0xc rend le C généralement plus sûr.

Analyse et Implications

Les API de lib0xc sont conçues pour être faciles à utiliser correctement et difficiles à utiliser incorrectement. De nombreuses API ont existé sous différentes formes dans l'industrie pendant des décennies, et lib0xc vise à fournir des représentations codifiées de ces modèles qui sont bien documentées et rigoureusement testées.

Lib0xc prend en charge les extensions de sécurité de limite de clang, qui utilisent des macros pour indiquer de manière sûre les limites de la mémoire référencée par les pointeurs, ce qui les rend compatibles avec le code C existant.

Perspective

Lib0xc peut être adopté pour de nouveaux environnements d'exécution et n'est pas strictement lié à un environnement POSIX. Pour construire une bibliothèque lib0xc pour une nouvelle cible, il est nécessaire de fournir certaines implémentations spécifiques à la plate-forme, telles que des fonctions de gestion de la mémoire et des flux de journalisation.

Le projet lib0xc est ouvert aux contributions et aux suggestions. Les instructions pour la contribution et les détails sur l'accord de licence des contributeurs de Microsoft sont disponibles dans le fichier CONTRIBUTING.md.