Qu'est-ce que POSIX?

139

Je vois POSIX mentionné souvent et partout, et j’avais supposé que c’était la norme UNIX de base. Jusqu’à ce que j’ai remarqué l’extrait suivant sur une page de Wikipedia: The Open Group

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

Si la définition officielle d'un système UNIX est une extension de POSIX, alors qu'est-ce que POSIX? ,,, Cela semble sûrement être une pierre de touche du monde UNIX, mais je ne sais pas comment il s'intègre dans la vue d'ensemble.

Peter.O
la source
2
SUS est la définition officielle d'UNIX puisque The Open Group, et non l'IEEE, est propriétaire de la marque UNIX. Voir ma réponse ci-dessous.
Penguin359
stackoverflow.com/questions/1780599/…
Ciro Santilli a annoncé

Réponses:

125

POSIX était d'abord une norme en 1988, bien avant la spécification Single UNIX. Ce fut l'une des tentatives d'unification de tous les divers systèmes UNIX et fourches. POSIX est un standard IEEE, mais comme IEEE n'est pas propriétaire de la marque UNIX®, le standard n'est pas UNIX®, bien qu'il soit basé sur l'API UNIX existante à ce moment-là. 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.

Open Group a publié la spécification Single UNIX (SUSv2) en 1997, basée sur les travaux IEEE de la norme POSIX. SUSv3 a été publié en 2001 par un groupe de travail conjoint entre l'IEEE et The Open Group, connu sous le nom de Austin Group. SUSv3 est également appelé POSIX: 2001 [ 2 ]. Il y a maintenant aussi POSIX: 2004 et POSIX: 2008 qui est le noyau de SUSv4. En ce qui concerne UNIX®, UNIX® correspond à ce que le titulaire actuel de la marque déposée déclare. Depuis 1994, c'est The Open Group.

Novell a acquis le secteur systèmes UNIX® auprès d’AT & T / USL, lieu de naissance d’UNIX®. En 1994, ils ont vendu le droit de la marque UNIX® à X / Open [ 3 ], désormais connu sous le nom de Open Group. Ils ont ensuite vendu le code source UNIX® à SCO UNIXWARE®. [ 3 ] UNIX® lui - même a fait bifurquer plusieurs fois [ 4 ] [ 5 ] en partie en raison du modèle de licence d'AT & T. L'achat d'UNIX® vous a fourni la source complète du système d'exploitation et la chaîne d'outils complète pour le construire. Les modifications apportées à la source peuvent être distribuées et utilisées par toute personne possédant une licence UNIX® d'AT & T. La redevance de licence était dans les milliers.

Le projet BSD de Berkeley apportait de nombreuses 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 n’exigeait pas de droit de licence, ni même une distribution obligatoire, à la différence de la GPL utilisée par le projet GNU et Linux. Cela a entraîné l'inclusion d'une bonne partie du code BSD dans diverses fourches UNIX commerciales. Vers la version 4.3BSD, ils avaient pratiquement remplacé le code source original UNIX® d’AT & T. FreeBSD / NetBSD / OpenBSD sont tous des forks de 4.3BSD qui constituent un système d’exploitation complet et n’ont aucun code source AT & T original. Ils n'ont pas non plus droit à la marque UNIX®, mais une grande partie de leur code est utilisée par les systèmes d'exploitation UNIX commerciaux.

Linux a été développé en 1991, mais contrairement à BSD, il a été développé à partir de zéro 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 des raisons de compatibilité et est de conception UNIX, mais il n’a pas la connexion étroite à AT & T ou UNIX® dont disposent les BSD.

pingouin359
la source
1
Une bonne réponse .. toutes les réponses (3) ont été bonnes, mais celle-ci était extrêmement informative (surtout après avoir été préparée par les deux autres); juste ce dont j'avais besoin ... et merci pour le commentaire (sous le corps de la question) sur le SUS, je le comprends assez bien maintenant, merci ... (et je n'avais pas remarqué qu'il n'y avait qu'un paragraphe ... c'était trop intéressant :)
Peter.O
2
@Mikel espérons que mon montage aide un peu
penguin359
1
C'est une réponse fantastique ici @ pingouin359!
boehj
Est-ce que quelqu'un a une bonne idée de ce que représente le X? Si c'est juste un suffixe pour indiquer une relation avec Unix, ne devrait-il pas être en minuscule?
Alex W
Excellent. Je vous remercie. Je suis dans l'informatique depuis une grande partie de cette histoire, mais les détails "dérisoires" de la façon dont les choses se sont passées ne sont pas quelque chose sur lequel je me suis concentré. C'est bien de voir le sentier.
Ken Ingram
55

Les choses les plus importantes que POSIX 7 définit

  1. API C

    Étend considérablement ANSI C avec des choses comme:

    • plus les opérations de fichier: mkdir, dirname, symlink, readlink, link() liens durs, poll(), stat, sync,nftw()
    • processus et threads: fork, execl, wait, pipe, semaphors sem_*, la mémoire partagée ( shm_*) kill, les paramètres d'ordonnancement ( nice, sched_*), sleep, mkfifo,setpgid()
    • la 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, forknécessitent un concept de processus.

    De nombreux appels système Linux existent pour mettre en œuvre une fonction API C POSIX spécifique et rendre conformes Linux, par exemple sys_write, sys_read... Beaucoup de ces syscalls ont également des extensions spécifiques à Linux cependant.

    Principale implémentation de bureau Linux: glibc, qui dans de nombreux cas ne fournit qu'un wrapper peu profond pour les appels système.

  2. Utilitaires CLI

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

    De nombreux utilitaires sont des interfaces clientes directes pour une fonction C API correspondante, par exemple mkdir.

    Major application de bureau Linux: GNU Coreutils pour les petits, les projets GNU séparés pour les grands: sed, grep, awk, ... Certains utilitaires CLI sont mises en œuvre par Bash comme built-ins .

  3. Langage shell

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

    Principale implémentation de bureau Linux: GNU Bash .

  4. Variables d'environnement

    Par exemple: HOME, PATH.

    PATH la sémantique de recherche est spécifiée , y compris la façonPATH dont les barres obliques empêchent la recherche .

  5. Statut de sortie du programme

    ANSI C dit 0ou EXIT_SUCCESSpour le succès, EXIT_FAILUREpour l’échec, et laisse le reste de l’implémentation défini.

    POSIX ajoute:

  6. Expression régulière

    Il existe deux types: BRE (Basic) et ERE (Extended). Basic est obsolète et n'est gardé que 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, grepaccepte les BRE par défaut et les ERE avec -E.

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

    Implémentation majeure de Linux: glibc implémente les fonctions sous regex.h que des programmes similaires greppeuvent utiliser comme back-end.

  7. Répertoire struture

    Par exemple: /dev/null,/tmp

    Le Linux FHS étend grandement 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 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

    Non obligatoire, utilisé par POSIX, mais presque nulle part ailleurs, notamment dans GNU. Mais, il est vrai qu’il est trop restrictif, par exemple, les indicateurs d’une seule lettre (par exemple -a), pas de version longue à double trait d’union (par exemple --all).

    Quelques conventions largement utilisées:

    • - signifie stdin où un fichier est attendu
    • --termine les drapeaux, par exemple ls -- -lpour lister un répertoire nommé-l

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

  10. "POSIX ACL" (Listes de contrôle d'accès), par exemple, utilisées comme back-end pour setfacl.

    Cela a été retiré, mais il a été mis en œuvre dans plusieurs systèmes d'exploitation, y compris sous Linux avecsetxattr .

Qui se conforme à POSIX?

De nombreux systèmes suivent POSIX de près, mais peu d’entre eux sont certifiés par Open Group, qui maintient la norme. Les notables certifiés incluent:

La plupart des distributions Linux sont très conformes, mais ne sont pas certifiées car elles ne veulent pas payer le contrôle de conformité. K-UX d'Inspur et EulerOS de Huawei en 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 la page du wiki .

les fenêtres

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

Comme il s’agissait d’une fonctionnalité facultative, les programmeurs ne pouvaient pas l’utiliser pour la plupart des applications des utilisateurs finaux.

Le support était obsolète dans Windows 8:

En 2016, une nouvelle API officielle de type Linux appelée "Windows Subsystem for Linux" a été annoncée. Il inclut les appels système Linux, l'exécution d'ELF, des parties du /procsystème de fichiers, Bash, GCC ((Globh)), apt-getet plus encore: https://channel9.msdn.com/Events/Build/2016/P488, donc je le crois permettra à Windows d’exécuter beaucoup, sinon tous, de POSIX. Cependant, il est axé sur les développeurs / le 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é Microsoft POSIX officielle: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin est un projet tiers bien connu de la GPL pour lequel "fournit une fonctionnalité substantielle d'API POSIX" pour Windows, mais nécessite que vous "reconstruisiez votre application à partir de la source si vous souhaitez qu'elle s'exécute sous Windows". MSYS2 est un projet associé qui semble ajouter davantage de fonctionnalités à Cygwin.

Android

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

Niveau bonus

La base standard Linux étend davantage POSIX.

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

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

Ciro Santilli 改造 心 心 心
la source
La question portait sur POSIX et le SUS, mais cette réponse ne mentionne pas du tout le SUS ...
Kidburla
1
@Kidburla une excellente occasion d'ajouter votre propre réponse et d'obtenir un représentant :-) (ou modifiez-le dans le mien et donnez-moi le représentant)
Ciro Santilli a écrit:
@phuclv merci, j'ai ajouté cela à la réponse.
Ciro Santilli au
16

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 les threads), ainsi que des conventions sur la manière dont ils 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 sur un autre système d'exploitation compatible POSIX que de le transférer entre des systèmes d'exploitation non compatibles POSIX. C’est pourquoi il est beaucoup plus facile de transférer une application de FreeBSD, par exemple, vers Linux que de la transférer de FreeBSD vers Windows (bien que Windows prenne apparemment en charge un sous-ensemble de POSIX).

Andrew Lambert
la source
14

POSIX est un sous-ensemble d'UNIX destiné à couvrir divers environnements de type Unix pour d'autres systèmes d'exploitation. Cela incluait à 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 de système d'exploitation dont le comportement est commun à Unix et à d'autres systèmes. Voir http://standards.ieee.org/develop/wg/POSIX.html pour plus d'informations.

geekosaur
la source
J'en ai lu plus à ce sujet maintenant, et il semble bien qu'Uinx était la poule et POSIX était l'œuf .. mais je me demande si UNIX fait toujours la loi… c.-à-d. et UNIX doivent se conformer à POSIX? ... btw. il semble que le nom POSIX ait été inventé par Richard Stallman ....
Peter.O
@ fred.bear: réponse courte: UNIX (la marque) doit être conforme à POSIX; Unix (le produit) était la base principale de POSIX; les unices (la famille des systèmes d’exploitation) sont généralement conformes mais ont plus en commun. Voir Est-ce que Linux est un Unix? et Mac OS X, UNIX? pour des discussions connexes.
Gilles
@ fred-bear Beaucoup de gens disent que le standard POSIX est aujourd'hui guidé par la communauté de développement du noyau Linux, qui (si vrai) à
mon humble avis
1
@faif Je n'ai jamais entendu cela et trouve cela improbable. Pouvez-vous poster une référence?
Penguin359
2
@Gilles The Open Group, propriétaire de la marque UNIX®, est également responsable de la certification UNIX® et de la spécification qu’ils appellent Single UNIX Specification ou SUS. POSIX est développé par l'IEEE qui n'est pas responsable d'UNIX®. Depuis 2001, ils ont été développés en grande partie de manière synchronisée, mais techniquement, SUS est maintenant à la version 4 pour définir UNIX®.
Penguin359