web-dev-qa-db-fra.com

Qu'est-ce que POSIX exactement?

Je vois POSIX mentionné souvent et partout, et je l'avais supposé être la norme UNIX de base .. jusqu'à ce que je remarque l'extrait suivant sur une page Wikipedia: The Open Group =

L'Open Group est le plus célèbre en tant qu'organisme de certification pour la marque UNIX et sa publication de la norme technique Single UNIX Specification, qui étend les normes POSIX et est la définition officielle d'un système UNIX.

Si la définition officielle d'un système UNIX est une extension de POSIX, que signifie exactement POSIX? , Cela semble sûrement être une pierre de touche du monde UNIX, mais je ne sais pas comment il s'intègre dans l'image globale.

144
Peter.O

POSIX a d'abord été une norme en 1988 bien avant la spécification UNIX unique. C'était l'une des tentatives d'unification de toutes les différentes fourches UNIX et systèmes de type UNIX. POSIX est une norme IEEE, mais comme l'IEEE ne possède pas la marque UNIX®, la norme n'est pas UNIX® bien qu'elle soit basée sur l'API UNIX existante à l'époque. La première norme POSIX.1 est officiellement connue sous le nom IEEE std 1003.1-1988. [ 1 ] L'IEEE a facturé des frais substantiels pour obtenir une copie de la norme.

L'Open Group a publié la spécification UNIX unique (SUSv2) en 1997 sur la base des travaux de l'IEEE sur la norme POSIX. SUSv3 est sorti en 2001 d'un groupe de travail conjoint entre l'IEEE et The Open Group connu sous le nom de Austin Group. SUSv3 est également connu sous le nom de POSIX: 2001 [ 2 ]. Il existe désormais également POSIX: 2004 et POSIX: 2008 qui sont au cœur de SUSv4. Quant à ce qu'est UNIX®, UNIX® est ce que le titulaire actuel de la marque déposée le dit. Depuis 1994, c'est The Open Group.

Novell a acquis l'activité de systèmes UNIX® d'AT & T/USL, où est né UNIX®. En 1994, ils ont vendu le droit à la marque UNIX® à X/Open [] maintenant connu sous le nom de The Open Group. Ils ont ensuite vendu le code source UNIX® à SCO en tant qu'UNIXWARE®. [] UNIX® lui-même a bifurqué plusieurs fois [ 4 ] [ 5 ] en partie à cause du modèle de licence d'AT & T. L'achat d'UNIX® vous a donné la source complète du système d'exploitation et la chaîne d'outils complète pour le construire. Les modifications de la source peuvent être distribuées et utilisées par n'importe qui qui détenait une licence UNIX® d'AT & T. La redevance était de plusieurs milliers.

BSD était un projet à Berkeley qui a ajouté un certain nombre d'améliorations au système d'exploitation UNIX®. Le code BSD a été publié sous une licence beaucoup plus libérale que la source d'AT & T et ne nécessitait pas de frais de licence ni même d'exigence pour être distribué avec la source, contrairement à la GPL que le GNU Project et Linux utilisent. Cela a fait qu'une bonne partie du code BSD a été inclus avec diverses fourches UNIX commerciales. Vers 4.3BSD, ils avaient presque remplacé tout besoin pour le code source AT&T UNIX® original. FreeBSD/NetBSD/OpenBSD sont tous des fourches de 4.3BSD qui sont un système d'exploitation complet et qui n'ont pas le code source AT&T d'origine. Ils n'ont pas non plus droit à la marque UNIX®, mais une grande partie de leur code est utilisé par les systèmes d'exploitation UNIX commerciaux. L'API Socket utilisée sur UNIX a été développée sur BSD et le code Unix Fast Filesystem a été emprunté et utilisé sur divers systèmes d'exploitation UNIX comme Solaris avec leurs propres améliorations.

Linux a été développé en 1991, mais a été développé à partir de zéro contrairement à BSD et utilise le projet GNU existant qui est une implémentation en salle blanche d'une grande partie de l'espace utilisateur UNIX. Il implémente une grande partie de POSIX pour est compatible avec UNIX, mais il n'a pas la connexion étroite avec AT&T ou UNIX® que les BSD ont.

130
penguin359

Les choses les plus importantes POSIX 7 définit

  1. API C

    Très bien étend ANSI C avec des choses comme:

    • plus d'opérations sur les fichiers: mkdir, dirname, symlink, readlink, link (liens durs), poll() , stat, sync, nftw()
    • processus et threads: fork, execl, wait , pipe, sémaphores sem_* , mémoire partagée (shm_*), kill, paramètres de planification (Nice, sched_*), sleep, mkfifo, setpgid()
    • mise en réseau: socket()
    • gestion de la mémoire: mmap, mlock, mprotect, madvise, brk()
    • utilitaires: expressions régulières (reg*)

    Ces API déterminent également les concepts de système sous-jacents dont elles dépendent, par exemple fork nécessite un concept de processus.

    De nombreux appels système Linux existent pour implémenter une fonction API POSIX C spécifique et rendre Linux conforme, par ex. sys_write, sys_read, ... Beaucoup de ces appels système ont également des extensions spécifiques à Linux.

    Implémentation de bureau Linux majeure: glibc, qui dans de nombreux cas fournit simplement un wrapper peu profond aux appels système.

  2. tilitaires CLI

    Par exemple: cd, ls, echo, ...

    De nombreux utilitaires sont des frontaux directs de Shell pour une fonction API C correspondante, par exemple mkdir.

    Implémentation de bureau Linux majeure: GNU Coreutils pour les petits, séparés GNU projets pour les grands: sed, grep, awk, ... Certains utilitaires CLI sont implémentés par Bash comme intégrés .

  3. langage Shell

    Par exemple, a=b; echo "$a"

    Implémentation de bureau Linux principale: GNU Bash .

  4. variables d'environnement

    Par exemple: HOME, PATH.

    PATHla sémantique de recherche est spécifiée , y compris comment les barres obliques empêchent PATH la recherche .

  5. État de sortie du programme

    ANSI C indique 0 Ou EXIT_SUCCESS Pour le succès, EXIT_FAILURE Pour l'échec et laisse l'implémentation du reste définie.

    POSIX ajoute:

  6. Expression régulière

    Il existe deux types: BRE (de base) et ERE (étendu). Basic est obsolète et uniquement conservé pour ne pas casser les API.

    Celles-ci sont implémentées par les fonctions de l'API C et utilisées dans tous les utilitaires CLI, par exemple grep accepte les BRE par défaut et les ERE avec -E.

    Par exemple: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Implémentation Linux majeure: la glibc implémente les fonctions sous regex.h que des programmes comme grep peuvent utiliser comme backend.

  7. Structure du répertoire

    Par exemple: /dev/null, /tmp

    Linux FHS étend considérablement POSIX.

  8. Noms de fichiers

    • / Est le séparateur de chemin
    • NUL ne peut pas être utilisé
    • . Est cwd, .. Parent
    • noms de fichiers portables
      • utiliser au maximum 14 caractères et 256 au maximum pour le chemin complet
      • ne peut contenir que: a-zA-Z0-9._-

    Voir aussi: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Conventions de l'API de l'utilitaire de ligne de commande

    Pas obligatoire, utilisé par POSIX, mais presque nulle part ailleurs, notamment pas dans GNU. Mais c'est vrai, c'est trop restrictif, par exemple drapeaux à une seule lettre (par exemple -a), pas de versions longues à double trait d'union (par exemple --all).

    Quelques conventions largement utilisées:

    • - Signifie stdin où un fichier est attendu
    • -- Termine les indicateurs, par exemple ls -- -l Pour répertorier un répertoire nommé -l

    Voir aussi: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "ACL POSIX" (listes de contrôle d'accès), par ex. utilisé comme backend pour setfacl .

    Ceci a été retiré mais il a été implémenté dans plusieurs OS, y compris sous Linux avec setxattr .

Qui se conforme à POSIX?

De nombreux systèmes suivent POSIX de près, mais peu sont en fait certifiés par l'Open Group qui maintient la norme. Les certifiés notables comprennent:

La plupart des distributions Linux sont très conformes, mais non certifiées car elles ne veulent pas payer le contrôle de conformité. K-UX d'Inspur et EulerOS de Huawei sont deux exemples certifiés.

La liste officielle des systèmes certifiés se trouve sur: https://www.opengroup.org/openbrand/register/ et également sur page wiki .

Windows

Windows a implémenté POSIX sur certaines de ses distributions professionnelles.

Comme il s'agissait d'une fonctionnalité facultative, les programmeurs ne pouvaient pas compter sur elle pour la plupart des applications d'utilisateur final.

La prise en charge a été déconseillée dans Windows 8:

En 2016, une nouvelle API de type Linux officielle appelée "Windows Subsystem for Linux" a été annoncée. Il comprend les appels système Linux, ELF en cours d'exécution, des parties du système de fichiers /proc, Bash, GCC, (TODO probablement glibc?), apt-get Et plus: https: // channel9. msdn.com/Events/Build/2016/P488 donc je crois que cela permettra à Windows d'exécuter une grande partie, sinon la totalité, de POSIX. Cependant, il se concentre sur les développeurs/déploiement plutôt que sur les utilisateurs finaux. En particulier, il n'était pas prévu d'autoriser l'accès à l'interface graphique Windows.

Aperçu historique de la compatibilité officielle Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-Microsoft-posix-subsystem/

Cygwin est un projet tiers GPL bien connu qui "fournit des fonctionnalités substantielles de l'API POSIX" pour Windows, mais vous oblige à "reconstruire votre application à partir de la source si vous voulez qu'elle s'exécute sur Windows". MSYS2 est un projet connexe qui semble ajouter plus de fonctionnalités au-dessus de Cygwin.

Android

Android possède sa propre bibliothèque C (Bionic) qui ne prend pas entièrement en charge POSIX à partir de Android O: https://stackoverflow.com/questions/27604455/is-Android-posix -compatible

Niveau bonus

Linux Standard Base étend encore POSIX.

Utilisez les index non-frames, ils sont beaucoup plus lisibles et consultables: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Obtenez une version zippée complète des pages HTML pour le grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

POSIX est la norme du système d'exploitation portable. Il décrit certains utilitaires, API et services qu'un système d'exploitation conforme doit fournir aux logiciels (par exemple les sockets, les E/S de fichiers et le threading) ainsi que les conventions sur la façon dont ceux-ci doivent être appelés à partir d'un programme.

L'idée est qu'un programme écrit pour un système d'exploitation compatible POSIX serait plus facile à porter vers un autre système d'exploitation compatible POSIX que le portage entre des systèmes d'exploitation non conformes POSIX. C'est pourquoi il est beaucoup plus facile de porter une application de, disons, FreeBSD vers Linux que de la porter de FreeBSD vers Windows (bien que Windows supporte ostensiblement un sous-ensemble de POSIX.)

16
Andrew Lambert

POSIX est un sous-ensemble d'UNIX qui est destiné à couvrir divers environnements de type Unix pour d'autres systèmes d'exploitation; cela comprenait à l'origine des environnements tels que Eunice pour VMS, la personnalité POSIX de Windows NT et Apollo Domain/OS. Vous pouvez le considérer comme une API de portabilité standard pour le sous-ensemble de services du système d'exploitation dont le comportement est commun entre Unix et non-Unix. Voir http://standards.ieee.org/develop/wg/POSIX.html pour plus d'informations.

14
geekosaur