Découvrez la nouvelle version de Cosmopolitan 2.0, la bibliothèque C standard multiplateforme

Le lancement de la nouvelle version du projet "Cosmopolite 2.0", qui développe une bibliothèque C standard et un format de fichier exécutable universel qui peut être utilisé pour distribuer des programmes pour différents systèmes d'exploitation sans utiliser d'interpréteurs et de machines virtuelles.

Le conteneur pour générer des fichiers exécutables universels repose sur la combinaison de segments et d'en-têtes spécifiques de différents systèmes systèmes d'exploitation dans un seul fichier, combinant plusieurs formats différents utilisés sous Unix, Windows et macOS.

Pour être sur de un seul exécutable exécuter sur des systèmes Windows et Unix, une astuce est utilisée pour encoder les fichiers Windows PE en tant que script shell, profitant du fait que Thompson Shell n'utilise pas le marqueur de script "#!".

Pour créer des programmes qui incluent plusieurs fichiers (combinant toutes les ressources dans un seul fichier), il est pris en charge de générer un fichier exécutable sous la forme d'une archive ZIP spécialement conçue. Schéma du format proposé (exemple application hello.com) :

L'appel qemu-x86_64 est fourni pour une portabilité supplémentaire et permet au code compilé pour l'architecture x86_64 de s'exécuter sur des plates-formes non x86, telles que les cartes Raspberry Pi et les appareils Apple équipés de processeurs ARM. Le projet peut également être utilisé pour créer des applications autonomes qui fonctionnent sans système d'exploitation (bare metal). Dans de telles applications, un chargeur de démarrage est attaché au fichier exécutable et le programme agit comme un système d'exploitation amorçable.

Principales nouveautés de Cosmopolitan 2.0

Dans cette nouvelle version, il est souligné que le schéma d'accès aux ressources internes a été modifié dans à partir d'un fichier zip (lors de l'ouverture de fichiers, les chemins habituels /zip/… sont désormais utilisés au lieu d'utiliser le préfixe zip:..). De même, pour accéder aux disques sous Windows, il est possible d'utiliser des chemins du type "/c/…" au lieu de "C:/…".

Un nouveau chargeur APE est proposé (Actually Portable Executable), qui définit le format des fichiers exécutables universels. Le nouveau chargeur de démarrage utilise mmap pour allouer le programme à la mémoire et ne modifie plus le contenu à la volée. Si nécessaire, l'exécutable universel peut être converti en exécutables réguliers liés à des plates-formes individuelles.

Sous Linux, il est possible d'utiliser le module noyau binfmt_misc pour exécuter des programmes APE. Il est à noter que l'utilisation de binfmt_misc est la méthode de démarrage la plus rapide, en plus de Une implémentation de la fonctionnalité des appels système pledge() et dévoile(), développés par le projet OpenBSD, ainsi que la fourniture d'une API pour l'utilisation des données d'appel dans les programmes C, C++, Python et Redbean, ainsi qu'un utilitaire de promise.com pour isoler des processus arbitraires.

On peut aussi trouver que pour Linux, les performances des appels clock_gettime et gettimeofday ont été augmentées jusqu'à 10 fois grâce à l'utilisation du mécanisme vDSO (Virtual Dynamic Shared Object), qui permet de transférer le gestionnaire d'appels système vers l'espace utilisateur et de contourner le contexte de commutation.

La construction utilise Landlock Make, une édition de GNU Make avec une vérification des dépendances plus stricte et l'utilisation de l'appel système Landlock pour isoler le programme du reste du système et améliorer l'efficacité de la mise en cache. En option, la capacité du compilateur et le GNU Make habituel sont conservés.

D'autre part, il met également en évidence la fonctions implémentées pour le multithreading : _spawn() et _join(), qui sont des liaisons universelles sur des API spécifiques pour différents systèmes d'exploitation. Des travaux sont également en cours pour implémenter la prise en charge des threads POSIX.

Parmi les autres changements qui ressortent:

  • Ajout de la prise en charge des options « –ftrace » et « –strace » aux fichiers exécutables pour envoyer des informations sur tous les appels de fonction et les appels système à stderr.
  • Ajout de la prise en charge de l'appel système closefrom() compatible avec Linux 5.9+, FreeBSD 8+ et OpenBSD.
  • Les fonctions mathématiques permettant de travailler avec des nombres complexes ont été déplacées de la bibliothèque Musl.
  • De nombreuses fonctions mathématiques ont été accélérées.
  • La fonction nointernet() est proposée, qui désactive les capacités du réseau.
  • Ajout de nouvelles fonctions pour ajouter efficacement des chaînes : appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf et vappendf.
  • Une version protégée de la famille de fonctions kprintf(), conçue pour fonctionner avec des privilèges élevés, a été ajoutée.
  • Amélioration significative des performances des implémentations SSL, SHA, curve25519 et RSA.

Enfin, si vous souhaitez en savoir plus, sachez que le code du projetou est distribué sous la licence ISC (version simplifiée de MIT/BSD).


Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.