À propos du projet

Cosmopolitan Libc est une bibliothèque C et une chaîne d'outils qui fait que C/C++ se comporte comme un langage à compilation unique et exécution partout, similaire en esprit à Java mais sans nécessiter d'interpréteur ou de machine virtuelle. Elle reconfigure GCC et Clang standard pour produire un format exécutable polyglotte approuvé par POSIX qui s'exécute nativement sur Linux, macOS, Windows, FreeBSD, OpenBSD 7.3, NetBSD et BIOS, visant de fortes performances et une très petite empreinte. Pour commencer, on se concentre sur le compilateur cosmocc, distribué sous forme de zip depuis cosmo.zip. Après décompression, un simple hello.c peut être compilé avec `cosmocc -o hello hello.c` et exécuté directement. L'exécution lie par défaut des fonctionnalités de dépannage lourdes : `--strace` journalise les appels système et `--ftrace` journalise les appels de fonction, tous deux utilisant la fonctionnalité kprintf, qui peut être redirigée vers un fichier via la variable d'environnement KPRINTF_LOG. La chaîne d'outils peut également construire des projets open source conventionnels basés sur autotools en exportant CC et CXX vers les compilateurs cosmo et en exécutant configure, make et make install. Cosmopolitan lui-même peut être construit à partir des sources sur les plateformes prises en charge ; le Makefile télécharge cosmocc automatiquement. L'installation d'un APE Loader à l'échelle du système via ape/apeinstall.sh est recommandée, et sur Linux, il s'enregistre avec binfmt_misc pour des performances supplémentaires. Les builds utilisent GNU Make, avec un make d'amorçage disponible depuis cosmo.zip. Comme le dépôt est volumineux, des cibles individuelles peuvent être construites, comme un seul test POSIX ou un package de test entier. Les modes de build incluent `m=tiny` pour des binaires très petits (aussi petits que 12 ko) et `m=tinylinux` pour réduire les autres systèmes d'exploitation et se comporter davantage comme Musl Libc. Les conseils de débogage couvrent la configuration de GDB pour les jeux de caractères et les mises en page UTF-8, l'exécution de fichiers .dbg et le chargement indépendant des symboles de débogage. Les notes de plateforme traitent des shells (zsh 5.9+ recommandé, avec des solutions de contournement pour les shells plus anciens et les sous-processus Python), des systèmes Linux qui acheminent mal les exécutables MZ vers WINE ou affichent des erreurs de détecteur d'exécution, et WSL, où la désactivation de WSLInterop binfmt_misc est conseillée. Le projet répertorie les versions minimales de plateforme prises en charge, notamment AMD K8, Intel Core, Linux 2.6.18, Windows 8 (avec une branche communautaire vista pour les versions plus anciennes de Windows), Darwin 23.1.0+, OpenBSD 7.3, FreeBSD 13 et NetBSD 9.2. Les discussions de développement ont lieu sur un serveur Discord, et le financement provient de GitHub Sponsors et Patreon.