POSIX est un ensemble de normes qui définissent le comportement fondamental des systèmes d'exploitation.

Que signifie POSIX ?
POSIX (Portable Operating System Interface) est une famille de normes IEEE (Institute of Electrical and Electronics Engineers) qui spécifie une interface de système d'exploitation commune afin que le logiciel puisse être écrit une seule fois et exécuté sur plusieurs systèmes compatibles avec un minimum de modifications.
Il définit le comportement et les signatures des API clés utilisées par les applications , notamment la bibliothèque C et les appels système sous-jacents, couvrant des domaines essentiels tels que les processus et les signaux, les opérations sur les fichiers et les répertoires, les permissions, les primitives de communication interprocessus, les fonctions de temporisation et le multithreading de base. POSIX normalise également un ensemble d'utilitaires en ligne de commande et un environnement shell, ce qui explique pourquoi de nombreux scripts supposent un environnement /bin/sh conforme à POSIX et un comportement prévisible des outils.
En pratique, POSIX fait office de contrat de compatibilité entre les applications et le système d'exploitation : si un système d'exploitation et ses bibliothèques standard suivent les spécifications POSIX, les développeurs peuvent compter sur une sémantique cohérente pour des éléments tels que les descripteurs de fichiers, les tubes, les états de sortie et les codes d'erreur, améliorant ainsi la portabilité sur les plateformes UNIX et de type Unix (et entre différents fournisseurs et distributions).
Quelle est l'histoire de POSIX ?
POSIX est né des problèmes de portabilité rencontrés au début de l'ère UNIX, lorsque différents fournisseurs distribuaient des variantes d'Unix aux comportements similaires, mais non identiques. Au milieu des années 1980, l'IEEE a lancé un projet de normalisation formel (le projet P1003) afin de définir une interface cohérente et indépendante des fournisseurs pour un système d'exploitation portable, largement inspiré des pratiques UNIX courantes. Le nom « POSIX » a été proposé par Richard Stallman, fondateur du projet GNU , comme une appellation courte et facile à prononcer pour l'interface de système d'exploitation portable.
La première norme fondamentale a été publiée sous la référence IEEE Std 1003.1-1988. Elle portait sur les services de base du système d'exploitation et les interfaces système C/POSIX (processus, fichiers/répertoires, signaux, tubes et notions de base associées). Elle a ensuite été alignée sur les normes ISO/CEI dans la série 9945 (par exemple, ISO/CEI 9945-1:1990).
À partir de là, POSIX s'est développé et a évolué au fil des révisions et des spécifications connexes. Un tournant majeur a eu lieu en 1998 avec la création du Groupe Austin, une initiative conjointe de l'IEEE, de The Open Group et de l'ISO/CEI visant à élaborer un ensemble unique et harmonisé de « spécifications de base ». Ces travaux ont abouti à POSIX.1-2001 (techniquement aligné sur la spécification UNIX unique, version 3), publié début 2002, et à des révisions majeures ultérieures telles que POSIX.1-2008 qui ont continué à mettre à jour et à clarifier la norme.
Exemples POSIX
POSIX apparaît le plus clairement dans les « éléments constitutifs » communs que partagent les systèmes de type UNIX, ce qui explique pourquoi le même code et les mêmes scripts shell fonctionnent souvent sous Linux , BSD et macOS avec peu ou pas de changement.
Voici quelques exemples courants de POSIX :
- Interfaces de fichiers et de processus, telles que open(), read(), write() et close() pour l'accès aux fichiers, et fork() / execve() pour démarrer de nouveaux programmes.
- Descripteurs de fichiers et tubes, qui permettent aux programmes de s'échanger des données à l'aide d'appels tels que pipe() et dup2().
- Signalétique, tels que SIGINT et SIGTERM, que les programmes gèrent de manière standard à l'aide de sigaction().
- Threads, fournies par l'intermédiaire des API de threads POSIX (pthreads), y compris des fonctions comme pthread_create() et pthread_mutex_lock().
- Scripts shell conformes à POSIX, écrit pour /bin/sh et utilisant des utilitaires portables tels que sh, grep, sed, awk, find et tar, qui se comportent de manière cohérente sur tous les systèmes.
C’est cette standardisation qui rend les logiciels basés sur POSIX portables sur différentes plateformes de type UNIX.
À quoi sert POSIX ?
POSIX est utilisé pour rendre les logiciels portables et prévisibles sur les systèmes d'exploitation UNIX et de type UNIX en standardisant les interfaces dont s'appuient les programmes. Les développeurs l'utilisent comme contrat de base pour le comportement fondamental du système d'exploitation, notamment la création et la gestion des processus, l'accès aux fichiers et répertoires, le fonctionnement des permissions, le comportement des signaux et des fonctions de temporisation, ainsi que le fonctionnement des primitives de communication interprocessus telles que les tubes.
Ainsi, un même code d'application peut être compilé et exécuté sur différents systèmes avec des modifications minimes. Il sert également de cible de portabilité pour les scripts shell et les outils en ligne de commande, car POSIX définit un environnement shell commun et un comportement standardisé des utilitaires, réduisant ainsi les différences de compatibilité entre les distributions et les fournisseurs.
Quels systèmes d'exploitation prennent en charge POSIX ?
La plupart des systèmes d'exploitation UNIX et de type UNIX modernes prennent en charge POSIX dans une certaine mesure, soit intégralement, soit avec des extensions et des lacunes bien documentées.
Les systèmes UNIX natifs tels que Linux, FreeBSD, OpenBSD, NetBSD et macOS sont tous conçus selon les principes de POSIX et offrent une large conformité à cette norme au niveau de leurs noyaux , bibliothèques C, interpréteurs de commandes et utilitaires principaux. Ces systèmes sont la principale raison pour laquelle POSIX reste pertinent, car ils permettent aux mêmes applications et scripts de fonctionner sur différents fournisseurs et distributions avec un minimum de modifications.
Certains systèmes non-UNIX prennent en charge POSIX partiellement ou via des couches de compatibilité. Par exemple, IBM AIX, HP-UX et Solaris étaient historiquement certifiés conformes à POSIX et à la spécification UNIX unique.
Windows n'est pas natif POSIX, mais il offre une prise en charge POSIX limitée via des environnements tels que le sous-système Windows pour Linux (WSL) ou des couches de compatibilité comme Cygwin, qui fournissent des API POSIX au-dessus du noyau Windows.
Niveaux de conformité POSIX

La « conformité » POSIX ne se résume pas à une simple activation. En général, les systèmes revendiquent la conformité à une édition POSIX spécifique (par exemple, POSIX.1) et, éventuellement, à des groupes de fonctionnalités supplémentaires. Certains fournisseurs vont plus loin et obtiennent une certification officielle. Les niveaux de conformité POSIX sont les suivants :
- Conformité de base POSIX (POSIX.1 / IEEE 1003.1)Le système d'exploitation fournit les interfaces et comportements POSIX requis définis dans la norme de base, y compris la sémantique des processus, des fichiers et des appels système de base, ainsi que le comportement de base du shell et des utilitaires lié à cette édition de la spécification.
- Conformité POSIX avec groupes d'optionsAu-delà des fonctionnalités de base, POSIX définit des ensembles de fonctionnalités optionnelles (groupes d'options). Un système peut être « conforme à POSIX » et revendiquer en outre les options qu'il prend en charge (par exemple, des utilitaires supplémentaires ou une sémantique d'API supplémentaire).
- Spécification SUS/Single UNIX (base XSI + POSIX). La spécification UNIX unique (SUS) est un sur-ensemble qui nécessite des interfaces et une sémantique supplémentaires au-delà de la base POSIX, notamment l'option XSI (X/Open System Interfaces) qui est facultative dans POSIX mais requise pour la marque UNIX sous SUS.
- Certifié POSIX (programme de certification officiel). Indépendamment des « allégations », les produits peuvent être officiellement certifiés dans le cadre du programme « POSIX™ : Certifié par l’IEEE et The Open Group », qui est un processus défini pour l’enregistrement et la validation des allégations de conformité.
- Certifié UNIX® (au niveau de la marque déposée)Les systèmes entièrement conformes et certifiés à la spécification UNIX unique peuvent utiliser la marque UNIX®. Ce niveau de conformité, garanti par une marque déposée, est plus solide qu'une prise en charge de type POSIX.
Normes POSIX
POSIX n'est pas un document unique, mais un ensemble de normes connexes. Les anciens travaux sur POSIX ont été publiés séparément (API et outils/interpréteurs de commandes), tandis que la version moderne est maintenue sous la forme d'une spécification consolidée, régulièrement mise à jour. Ces normes comprennent :
- POSIX.1 (norme IEEE 1003.1)La norme de base qui définit les API et les comportements fondamentaux du système d'exploitation utilisés par les applications (par exemple, les processus et les fichiers). I / O sémantique) comme « interface de système d’exploitation portable » de base.
- POSIX.2 (IEEE Std 1003.2). La norme pour le interpréteur de commandes (shell) et commun les services publics, afin que les scripts puissent s'appuyer sur un langage shell et un comportement des outils cohérents sur l'ensemble des systèmes compatibles.
- POSIX.1b (norme IEEE 1003.1b). Extensions temps réel qui ajoutent des interfaces et une sémantique standardisées nécessaires aux cas d'utilisation en temps réel (par exemple, signaux temps réel, horloges/minuteries, mémoire partagée, sémaphores).
- POSIX.1c (norme IEEE 1003.1c). Extensions de threads qui ont normalisé le modèle de threads POSIX (pthreads) afin que les programmes multithreadés puissent être portables sur différents systèmes.
- Révisions unifiées de POSIX.1 (ère du groupe Austin)Les révisions ultérieures regroupent les éléments qui étaient auparavant séparés en un seul ensemble de « Spécifications de base » (généralement présenté sous forme de volumes tels que Définitions de base, Interfaces système et Shell & Utilitaires) et le mettent à jour au fil du temps, par exemple : POSIX.1-2008, POSIX.1-2017, et le plus récent POSIX.1-2024 (Norme IEEE 1003.1-2024).
Avantages et limites de POSIX
POSIX assure la cohérence des systèmes de type UNIX en définissant un ensemble commun d'interfaces système et de comportements d'outils. Comprendre ses avantages et ses limites permet de déterminer dans quels cas le choix de POSIX améliore la portabilité et la maintenabilité, et dans quels cas des fonctionnalités ou extensions spécifiques à la plateforme sont nécessaires pour répondre à vos besoins.
Avantages POSIX
POSIX est précieux principalement parce qu'il standardise le comportement attendu du système d'exploitation dont dépendent de nombreuses applications et scripts, ce qui réduit les réécritures spécifiques à chaque plateforme et les surprises. Ses avantages sont les suivants :
- Portabilité sur les systèmes de type UNIXLe code écrit pour les API POSIX (fichiers, processus, signaux, etc.) a plus de chances de compiler et de s'exécuter sur différents systèmes d'exploitation avec des modifications minimales.
- Comportement prévisible du systèmeLa standardisation de la sémantique pour des éléments tels que les descripteurs de fichiers, les codes de sortie, les permissions et la gestion des erreurs permet aux programmes de se comporter de manière plus cohérente dans différents environnements.
- Script et outil interopérabilité. Un shell POSIX et des utilitaires standard permettent des scripts shell portables et des pipelines de commandes fiables sur différentes distributions et fournisseurs.
- Maintenance et prise en main simplifiées. Une base commune réduit les chemins de code conditionnels et les « cas particuliers », ce qui simplifie la maintenance des projets et facilite leur compréhension par les nouveaux contributeurs.
- Compatibilité écosystémique plus large. De nombreux environnements d'exécution, systèmes de construction et open-source Les outils adoptent un comportement de type POSIX, la prise en charge de POSIX améliore donc la compatibilité avec les logiciels existants.
- Neutralité du fournisseurPOSIX offre une cible stable qui évite de contraindre les logiciels aux interfaces propriétaires d'un seul fournisseur de système d'exploitation.
Limitations POSIX
POSIX constitue une base utile, mais elle ne couvre pas l'ensemble des fonctionnalités des systèmes modernes, et la conformité réelle peut varier. Ses limitations incluent :
- Ensemble de fonctionnalités du système d'exploitation incomplet. POSIX se concentre sur les API et les outils de base, de sorte que de nombreux besoins pratiques (fonctionnalités réseau avancées, cadres de sécurité modernes, primitives de conteneur, etc.) nécessitent souvent des extensions non-POSIX.
- Variation dans la conformité réelleLes systèmes peuvent différer quant aux fonctionnalités optionnelles qu'ils implémentent et dans leur comportement dans les cas limites ; par conséquent, « de type POSIX » ne signifie pas toujours des résultats identiques partout.
- Contraintes du plus petit dénominateur communÉcrire strictement selon la norme POSIX peut signifier éviter des fonctionnalités spécifiques à la plateforme qui pourraient améliorer les performances, l'observabilité ou les fonctionnalités.
- Différences d'outillage hors normeMême lorsque les utilitaires existent partout, les implémentations peuvent ajouter des indicateurs ou modifier les valeurs par défaut, de sorte que les scripts peuvent toujours dysfonctionner s'ils dépendent d'options non POSIX (courantes avec sed, awk, tar, etc.).
- La certification n'est pas universelleDe nombreux systèmes prennent en charge POSIX de manière générale sans certification formelle ; vous pourriez donc avoir besoin de tests et de vérifications de compatibilité plutôt que de vous fier à un label de conformité.
- Évolution des attentes par rapport au rythme habituel. Les mises à jour standard, mais les plateformes et écosystèmes populaires peuvent évoluer plus rapidement, c'est pourquoi les développeurs ciblent souvent en pratique « POSIX + extensions de facto ».
POSIX est-il obsolète ?
POSIX n'est pas obsolète en tant que norme de base , même si elle ne décrit pas toutes les fonctionnalités des systèmes d'exploitation modernes. Elle reste importante car elle normalise les processus fondamentaux, les entrées/sorties de fichiers et le comportement des utilitaires et du shell sur lesquels repose une grande quantité de logiciels et d'outils système. De plus, elle est activement maintenue et mise à jour par l'Austin Group, et non figée dans le temps.
Ce qui peut donner l'impression que c'est « vieux », c'est que de nombreuses fonctionnalités importantes, telles que les API avancées réservées à Linux, les frameworks spécifiques à macOS, les modèles de sécurité modernes, les conteneurs et certaines fonctionnalités réseau plus récentes, se trouvent en dehors de POSIX. Par conséquent, les projets réels ciblent souvent « POSIX plus extensions de plateforme » et valident le comportement par des tests au lieu de s'attendre à ce que la norme seule couvre tout.