Article de reference

POSIX

L' interface POSIX ( Portable Operating System Interface ; API : /ˈpɒz.ɪks/ [ 1 ] ) est une famille normes définies par l' IEEE Computer Society pour assurer la compatibilité en...

L' interface POSIX ( Portable Operating System Interface ; API : /ˈpɒz.ɪks/ [ 1 ] ) est une famille normes définies par l' IEEE Computer Society pour assurer la compatibilité entre systèmes d'exploitation [ de définir un niveau de compatibilité, POSIX spécifie de nombreux aspects fonctionnels qui peuvent être classés en interface de programmation (API), interpréteur de commandes et commandes shell . Initialement dérivée des API, interpréteurs de commandes et commandes Unix courantes (en partie parce qu'Unix était considéré comme indépendant des fabricants), la norme est aujourd'hui conforme à de nombreux systèmes, y compris les systèmes Unix de marque , les systèmes de type Unix et de nombreux systèmes qui, historiquement, n'avaient aucun lien avec Unix.

L' interface de ligne de commande et de script utilisateur standardisée était basée sur le shell Bourne du système UNIX V. [ nombreux programmes, services et utilitaires utilisateur (dont awk , echo et ed ) ont également été standardisés, d'après leurs versions UNIX System V, ainsi que les services de niveau programme requis (notamment les entrées/sorties de base : fichiers , terminal et réseau ). POSIX définit également une API de bibliothèque de gestion des threads standard , prise en charge par la plupart des systèmes d'exploitation modernes.

La norme POSIX est développée par le groupe Austin (un groupe de travail conjoint entre l'IEEE, The Open Group et l' ISO/IEC JTC 1/SC 22 /WG 15).

POSIX est destiné à être utilisé à la fois par les développeurs d'applications et de systèmes.

Nom

Ces normes sont issues d'un projet lancé en 1984, s'appuyant sur les travaux menés au sein de l' association /usr/group . Richard Stallman a suggéré le nom POSIX à l'IEEE en remplacement de l'ancien IEEE-IX . Le comité l'a jugé plus facile à prononcer et à mémoriser, et l'a donc adopté.

À l'origine, POSIX faisait référence à la norme IEEE Std 1003.1-1988, publiée en 1988. La famille de normes POSIX est officiellement désignée sous le nom d'IEEE 1003 et le numéro de norme ISO/CEI est ISO / CEI 9945.

POSIX est une marque déposée de l'IEEE.

Versions

À l'origine, POSIX se composait d'un document unique pour les services de base, mais des documents supplémentaires ont été publiés au fil du temps pour étendre et réviser la spécification. Avant 1997, POSIX comprenait plusieurs documents publiés sur plusieurs années. Après 1997, le groupe Austin a produit des spécifications intitulées Single UNIX Specification (SUS). Au fil du temps, le groupe publie des versions de cette spécification, et POSIX est ensuite modifié en fonction de tout ou partie d'une version SUS. Une version SUS est constituée d'un ensemble de volumes – chacun correspondant à un groupe de comportements requis – ainsi que d'autres informations (hors volume). Chaque volume se voit attribuer un numéro de version, identique pour chaque volume d'une même version, mais différent du numéro de version. Par exemple, la version 3 de SUS (SUSv3) comprend les volumes portant le numéro 6.

En 2014, la documentation POSIX était divisée en deux parties :

  • POSIX.1, édition 2013 : Définitions de base POSIX, interfaces système, commandes et utilitaires (incluant POSIX.1, ses extensions, les services temps réel, l’interface des threads, les extensions temps réel, l’interface de sécurité, l’accès aux fichiers réseau et les communications réseau entre processus, les extensions de portabilité utilisateur, les corrections et extensions, les utilitaires de protection et de contrôle, ainsi que les utilitaires de traitement par lots. Il s’agit de POSIX 1003.1-2008 avec le corrigendum technique 1).
  • Tests de conformité POSIX : Une suite de tests pour POSIX accompagne la norme : VSX-PCTS ou la suite de tests de conformité VSX POSIX .

Avant 1997

POSIX.1

Les services de base (norme IEEE 1003.1-1988) intègrent la norme ANSI C et comprennent :

Création et contrôle des processus
Signaux
Exceptions liées aux nombres à virgule flottante
Segmentation / Violations de mémoire
Instructions illégales
Erreurs de bus
Minuteurs
Opérations sur les fichiers et les répertoires
Tuyaux
Bibliothèque C (C standard)
L' interface terminal POSIX

POSIX.1b

Les extensions en temps réel (IEEE Std 1003.1b-1993, apparue plus tard sous le nom de librt - la bibliothèque d'extensions en temps réel) comprennent :

Planification prioritaire
Signaux en temps réel
Horloges et minuteries
Sémaphores
Transmission de messages
Mémoire partagée
E/S asynchrones et synchrones
Interface de verrouillage de la mémoire

POSIX.1c

Les extensions Threads (IEEE Std 1003.1c-1995) comprennent :

Création, contrôle et nettoyage des threads
Planification des threads
Synchronisation des threads
Gestion des signaux

POSIX.2

Shell et utilitaires (norme IEEE 1003.2-1992) comprend :

Interprète de commandes
Programmes de services publics

POSIX.1-2001

La norme POSIX.1-2001 (IEEE Std 1003.1-2001) reprend la majeure partie de SUSv3, qui comprend les volumes (6) : Définitions de base , Interfaces système et en-têtes , et Commandes et utilitaires . La spécification POSIX exclut spécifiquement les exigences de SUSv3 relatives à une API curses (souvent appelée X/Open Curses , bien qu’elle ne soit pas explicitement mentionnée dans SUSv3).

La norme IEEE 1003.1-2004 modifie la norme POSIX.1-2001 par le biais de deux mises à jour mineures ou errata, appelées documents de correction technique.

POSIX.1-2008

À l’instar de son prédécesseur, POSIX.1-2008 ( IEEE Std 1003.1-2008 , édition 2016) reprend la majeure partie du contenu normatif de SUSv4 (volume 7 : Définitions de base , Interfaces système et en-têtes , Commandes et utilitaires ). SUSv4 inclut également des informations de justification qui s’appliquent en grande partie à POSIX, bien que n’y figurant pas explicitement.

POSIX.1-2017

POSIX.1-2017 ( IEEE Std 1003.1-2017 ) révise la version précédente (POSIX.1-2008) via deux corrigenda techniques.

POSIX.1-2024

POSIX.1-2024 ( IEEE Std 1003.1-2024 ) a été publié le 14 juin 2024.

À compter de POSIX 2024, la norme est alignée sur la norme de langage C17 .

Controverses

Blocs de 512 octets contre blocs de 1024 octets

POSIX impose une taille de bloc par défaut de 512 octets pour les utilitaires df et du , reflétant la taille typique des blocs sur les disques. Lors de l'implémentation de POSIX pour le système d'exploitation GNU , Richard Stallman et l' équipe GNU ont contesté cette exigence, arguant que la plupart des utilisateurs raisonnent en termes de blocs de 1024 octets (ou 1 Kio ). La variable d'environnement POSIX_ME_HARDER a été introduite pour permettre à l'utilisateur d'imposer le comportement conforme à la norme. Son nom a ensuite été modifié en POSIXLY_CORRECT . Depuis 2025, cette variable est également utilisée pour d'autres particularités de comportement.

Conformité

Un système d'exploitation peut être classé en fonction de son degré de conformité à une norme POSIX.

Agréé

Les versions actuelles des systèmes d'exploitation suivants ont été certifiées conformes à une ou plusieurs normes POSIX. Cela signifie qu'elles ont réussi les tests de conformité automatisés , que leur certification est toujours valide et que le système d'exploitation n'est pas abandonné.

Anciennement certifié

Certaines versions des systèmes d'exploitation suivants avaient été certifiées conformes à une ou plusieurs normes POSIX. Cela signifie qu'elles avaient réussi les tests de conformité automatisés. La certification a expiré et certains de ces systèmes d'exploitation ont été abandonnés.

Partiellement conforme

Les éléments suivants ne sont pas certifiés conformes à la norme POSIX, mais sont considérés comme partiellement conformes, ce qui est parfois qualifié de conforme :

Conforme partiellement via une couche de compatibilité

Les systèmes d'exploitation suivants ne sont pas certifiés conformes à POSIX, mais ils sont en grande partie conformes à la norme en implémentant la prise en charge de POSIX via une fonction de compatibilité (généralement des bibliothèques de traduction ou une couche au-dessus du noyau).

Conformité via sous-système

Certaines technologies permettent à un système d'exploitation de bénéficier d'un certain niveau de conformité à POSIX même si le système d'exploitation lui-même n'y est que peu ou pas conforme.

Pour Windows

Bien que Windows ne soit pas conforme à POSIX, les technologies suivantes offrent un niveau de conformité.

Cygwin
Fournit un environnement de développement et d'exécution largement conforme à la norme POSIX pour Microsoft Windows .
MinGW
Une version dérivée de Cygwin, offrant un environnement de développement moins conforme à POSIX et prenant en charge les applications compatibles programmées en C via Msvcrt , l'ancienne bibliothèque d'exécution Visual C de Microsoft .
libunistd
Une bibliothèque de développement largement conforme à POSIX, créée à l'origine pour compiler le code source C/ C++ de CinePaint sous Linux tel qu'il est utilisé dans Microsoft Visual Studio . Une implémentation légère dotée de fichiers d'en-tête compatibles POSIX qui permettent d'associer les API POSIX à leurs équivalents sous Windows.
Sous-système Microsoft POSIX
Un sous-système Windows optionnel inclus dans les systèmes d'exploitation basés sur Windows NT jusqu'à Windows 2000. Il prenait en charge POSIX.1 tel qu'il existait dans la révision de 1990, sans threads ni sockets .
Interix
OpenNT, développé initialement par Softway Systems, Inc., est une mise à niveau et un remplacement du sous-système POSIX de Microsoft , acquis par Microsoft en 1999. Commercialisé initialement comme module complémentaire autonome, il a ensuite été intégré aux Services Windows pour UNIX (SFU), puis à Windows Server 2003 R2 et aux versions ultérieures de Windows sous le nom de « Sous-système pour applications UNIX » (SUA). Déprécié en 2012 (Windows 8) , il a finalement été abandonné en 2013 (2012 R2, 8.1). Il permet une conformité POSIX complète pour certains produits Microsoft Windows .
Sous-système Windows pour Linux (WSL)
Une couche de compatibilité permettant d'exécuter nativement des fichiers binaires Linux sous Windows 10 et 11 à l'aide d'une image Linux telle qu'Ubuntu, Debian ou OpenSUSE, entre autres. Elle sert de mise à niveau et de remplacement aux Services Windows pour UNIX (WSU). Elle a été lancée en version bêta en avril 2016. La première distribution disponible était Ubuntu.
UWIN
AT&T Research implémente une couche POSIX au-dessus des API Win32.
Kit d'outils MKS
Initialement conçu pour MS-DOS, ce progiciel, produit et maintenu par MKS Inc. , offre un environnement de type Unix pour le scripting, la connectivité et le portage de logiciels Unix et Linux vers les systèmes Microsoft Windows 32 et 64 bits . Une partie de ce progiciel a été intégrée à la première version de Windows Services for UNIX (SFU) en 1998.
Bibliothèque d'exécution C de Windows et API des sockets Windows
Implémentation des fonctions API POSIX couramment utilisées pour l'accès aux fichiers, à l'heure, à l'environnement et aux sockets, bien que la prise en charge reste largement incomplète et ne soit pas entièrement interopérable avec les implémentations conformes à POSIX.

Pour OS/2

Environnements POSIX pour OS/2 :

emx+gcc
Largement conforme à la norme POSIX.

Pour DOS

Les environnements POSIX pour DOS comprennent :

emx+gcc
Largement conforme à la norme POSIX
DJGPP
Conforme partiellement à la norme POSIX
DR-DOS
Noyau multitâche via EMM386 /MULTI – une extension d'API frontale de threads POSIX est disponible