Qu'est-ce qui rend un système d'exploitation «Unix-Like»?

20

Je rencontre fréquemment le terme "unix-like" sur de nombreux sites Web.

Il n'y a pas de norme; c'est juste dans la façon dont il se comporte.

Mais si je devais développer un noyau à partir de zéro, qu'est-ce qui le rendrait "unix-like"?

En gros, quelles sont les choses qui font du code écrit comme Unix?

il manque un axone
la source
1
en.wikipedia.org/wiki/Unix-like (qui en soi est lié à linfo.org/unix-like.html )
Drav Sloan

Réponses:

15

Il n'y a pas de norme; c'est juste dans la façon dont il se comporte.

Je crois que la plupart des systèmes d'exploitation "de type Unix" font un effort très sérieux pour adhérer au standard POSIX , qui est supervisé par l'Open Group, qui contrôle également la spécification UNIX unique qui définit un "vrai UNIX". Le premier est au cœur du second.

Il existe donc, en fait, une norme qui définit les aspects pratiques des systèmes d' exploitation de type Unix. Jetez un œil à la liste des systèmes d'exploitation "entièrement" et "principalement" conformes à la fin de l'article de wikipedia sur POSIX.

Il y a des raisons évidentes pour lesquelles Linux en particulier pourrait ne pas être considéré comme entièrement conforme ou certifiable par la spécification Single Unix (SUS), mais ce n'est pas parce qu'un système Linux donné est nécessairement incompatible avec lui. L'article de wikipedia résume la spécification de cette façon:

SUSv3 totalise environ 3700 pages, qui sont divisées par thème en quatre parties principales:

Définitions de base (XBD) - une liste de définitions et de conventions utilisées dans les spécifications et une liste de fichiers d'en-tête C qui doivent être fournis par des systèmes conformes. 84 fichiers d'en-tête au total sont fournis.

Shell et utilitaires (XCU) - une liste d'utilitaires et une description du shell, sh. 160 utilitaires au total sont spécifiés.

Interfaces système (XSH) - contient la spécification de diverses fonctions implémentées en tant qu'appels système ou fonctions de bibliothèque. 1123 interfaces système au total sont spécifiées.

Justification (XRAT) - l'explication derrière la norme.

La ligne de commande utilisateur standard et l'interface de script sont le shell POSIX, une extension du Bourne Shell basé sur une version antérieure du Korn Shell.

Les autres programmes, services et utilitaires de niveau utilisateur incluent awk, echo, ed, vi et des centaines d'autres. Les services requis au niveau du programme incluent les services d'E / S de base (fichier, terminal et réseau).

Une suite de tests accompagne la norme. Il est appelé PCTS ou POSIX Certification Test Suite.

De plus, SUS inclut la spécification CURSES (XCURSES), qui spécifie 372 fonctions et 3 fichiers d'en-tête. Dans l'ensemble, SUSv3 spécifie 1742 interfaces.

Cela fait évidemment référence à de nombreux composants de l'espace utilisateur (tels que le shell) qui ne font tout simplement pas partie du noyau Linux. Il n'y a donc aucun moyen que linux.org et. Al. peut avoir le noyau seul certifié - en ce sens, ce n'est pas du tout un système d'exploitation. Ils pourraient, bien sûr, essayer de certifier un système particulier en utilisant le noyau, mais cela n'aurait aucun sens à la lumière du schéma de distribution général: le noyau et les personnes qui le maintiennent sont indépendants des personnes qui maintiennent le noyau utilisateur (GNU) qui sont indépendants des personnes qui gèrent les distributions OS assemblées (Debian, Fedora, etc.).

Je suppose que Debian ou Fedora eux-mêmes pourraient s'engager dans le processus de certification (ainsi, par exemple, RedHat Enterprise pourrait devenir un "unix certifié"), mais cela soulève la question que ce soit réellement souhaitable. Je suppose que la principale raison des systèmes SUS est d'exécuter des logiciels (à l'échelle commerciale, non grand public) écrits pour cela, ce qui n'est tout simplement pas le créneau Linux - les gens qui font cela paieront des milliers de dollars par licence pour le système d'exploitation, y compris les lots de support, etc., car ils paient également des dizaines ou des centaines de milliers de dollars par licence pour tout logiciel supplémentaire qu'ils souhaitent exécuter sur le système. Linux et les autres valeurs aberrantes, d'autre part, ont poursuivi des objectifs de conception au-delà de la simple conformité à des fins commerciales, et il existe divers exemples de cela, par exemple (dehttp://en.wikipedia.org/wiki/STREAMS ):

STREAMS était requis pour la conformité avec les versions 1 (UNIX 95) et 2 (UNIX 98) de la spécification UNIX unique, mais en raison du refus des développeurs BSD et Linux de fournir STREAMS, [la citation nécessaire] a été marquée comme facultative pour POSIX conformité par le groupe Austin dans la version 3 (UNIX 03).

Un hébergement intéressant qui met en évidence le fait que SUS et The Open Group! = Linux,! = BSD, etc.

boucle d'or
la source
2
Notez qu'être certifié est différent de se conformer. Par exemple, il n'est pas pratique pour la Fondation Linux d'obtenir la certification de chaque version du noyau, en raison du coût et du taux de développement. Mais cela ne signifie pas qu'il (le noyau) ne se conforme pas totalement ou presque.
strugee
2
@strugee La norme POSIX ne s'applique pas au noyau ou ne se soucie pas de lui. Ce qui est standardisé, ce sont les commandes (shell, ls, cat, ...) et les API (ce que la libc fournit, les threads). Ce qui rend une distribution basée sur Linux comme Unix, ce sont principalement les composants GNU (commandes et glibc). Le noyau est en dehors du domaine de certification / conformité.
jlliagre
1
Ne pas réfuter mais clarifier (je le répète de mon commentaire sur la réponse d'illuminÉ): les standards sont "quoi", le noyau est "comment". Je n'ai lu que des morceaux des normes, mais je ne pense pas qu'elles se réfèrent à un "noyau" (c'est juste le "système"). Donc, certification et conformité WRT: c'est "ce que" fait un noyau / OS, pas "comment" il le fait.
goldilocks
3
@strugee La spécification Unix unique s'applique aux interfaces utilisateur. Le noyau est bien sûr éventuellement impliqué, mais mon commentaire concernait votre déclaration sur la certification de noyaux par la Linux Foundation. Un noyau ne peut pas être certifié, il manque tous les composants avec lesquels le processus de certification interagit. Ce qui peut être certifié (ou du moins tenté d'être rendu aussi conforme que possible) est un système d'exploitation, c'est-à-dire ce qu'on appelle communément une distribution dans la communauté Linux.
jlliagre
2
@strugee Ce serait une raison possible, cependant, ce n'est pas tant le roulement rapide qui importe, mais le fait qu'il n'y a aucun engagement à s'assurer qu'aucun changement incompatible n'est ajouté. Par exemple, Solaris 10 est conforme, garantissez cette compatibilité et il y a eu une dizaine de mises à jour depuis sa certification Unix03. De plus, la combinaison Gnu / Linux essaie d'être aussi conforme qu'elle peut / veut mais pas plus. Il n'a (presque) jamais tenté d'être certifié car il s'agit à la fois d'un processus coûteux et il ne serait pas conforme de toute façon car certaines exigences sont manquantes (délibérément) et certaines extensions sont incompatibles
jlliagre
12

Pour développer la première réponse à propos de POSIX, pour comprendre ce que "unix-like" signifie, il faut d'abord essayer de comprendre ce qu'est exactement UNIX. En consultant la documentation de l' Open Group , propriétaire de la marque Unix, vous trouverez des détails sur l' évolution de la spécification UNIX - voici UNIX03 :

La norme de produit UNIX 03 est la marque des systèmes conformes à la version 3 de la spécification UNIX unique. Il s'agit d'une version considérablement améliorée de la norme de produit UNIX 98. Les améliorations obligatoires comprennent l'alignement avec le langage de programmation ISO / IEC 9989: 1999 C, IEEE Std 1003.1-2001 et ISO / IEC 9945: 2002. Cette norme de produit comprend les normes de produit obligatoires suivantes: appels système internationaux et bibliothèques étendues V3, commandes et utilitaires V4, langage C V2 et interfaces de terminal internationalisées.

UNIX98 :

La norme de produit UNIX 98 est une version considérablement améliorée de la norme de produit UNIX 95. Les améliorations obligatoires incluent (1) les interfaces Threads, (2) l'extension de support multi-octets (MSE), (3) la prise en charge des fichiers volumineux, (4) la liaison dynamique, (5) les modifications pour supprimer les dépendances ou restrictions de longueur des données matérielles, et (6 ) Changements de l'an 2000. En outre, les améliorations facultatives suivantes sont incluses: des fonctions d'administration de logiciels et un ensemble d'API pour une prise en charge en temps réel. Cette norme de produit comprend les normes de produit obligatoires suivantes: Appels système internationaux et bibliothèques étendues V2, commandes et utilitaires V3, langage C, service de transport (XTI) V2, sockets V2 et interfaces de terminal internationalisées. En outre, il peut également être conforme à la norme de produit d'administration de logiciel.

UNIX95 (c'est moi qui souligne):

Cette norme produit définit une plate-forme consolidée pour la prise en charge d'une large gamme d'applications développées à l'origine pour l'une des classes de systèmes d'exploitation dérivées du code du système d'exploitation UNIX et / ou des interfaces développées à l'origine par AT&T , en plus des installations fournies par la norme de produit de base. Il a une portée plus large que Base. Cette norme de produit comprend les normes de produit suivantes: appels système internationaux et bibliothèques étendues, commandes et utilitaires V2, langage C, service de transport (XTI), sockets et interfaces de terminal internationalisées.

Les versions serveur de la norme ajoutent Internet Server et IPv6 dans certains cas.

Donc, bien sûr, nous voyons la référence aux laboratoires AT&T Bell et le langage C est au cœur de ce qu'est UNIX: le langage C, les outils de base modulaires et le shell et comment le noyau, le système de fichiers et d'autres composants clés du système d'exploitation ont été conçus et mis en œuvre .

entrez la description de l'image ici

entrez la description de l'image ici

C'est là que le livre La conception du système d'exploitation UNIX de Maurice J. Bach devient une lecture inestimable car il s'agit de questions historiques à ce stade. Il convient de noter bien sûr comment cela est lié à d' autres inventions comme le langage C. C a été développé par AT&T Bell pour implémenter Unix avec un langage qui pourrait être aussi rapide que l'assemblage mais portable sur différents matériels, et beaucoup de POSIX est une extension de la norme C.

En ce qui concerne le noyau lui-même, vous trouverez souvent un schéma conceptuel tel que celui-ci pour illustrer ce qu'était traditionnellement un noyau UNIX:

entrez la description de l'image ici

Voici quelques extraits du livre classique de M. Bach (1986) qui discutent des fondements du noyau UNIX System V:

Cependant, ils [les sous-systèmes d'application et les programmes] utilisent tous des services de niveau inférieur finalement fournis par le noyau, et ils se prévalent de ces services via l'ensemble des appels système. Le système V compte environ 64 appels système, dont moins de 32 sont fréquemment utilisés. Ils ont des options simples qui les rendent faciles à utiliser mais fournissent beaucoup de puissance à l'utilisateur. L'ensemble des appels système et les algorithmes internes qui les implémentent forment le corps du noyau [...]

[...] ses deux principaux composants sont le sous-système de fichiers et le sous-système de processus.

Les fichiers sont organisés en systèmes de fichiers, qui sont traités comme des périphériques logiques; un périphérique physique tel qu'un disque peut contenir plusieurs périphériques logiques (systèmes de fichiers). Chaque système de fichiers a un superbloc qui décrit la structure et le contenu du système de fichiers, et chaque fichier dans un système de fichiers est décrit par un inode qui donne les attributs du fichier. Les appels système qui manipulent des fichiers le font via des inodes. [et le pool de tampons]

[...] Il existe deux versions de l'inode: la copie de disque qui stocke les informations d'inode lorsque le fichier n'est pas utilisé et la copie in-core qui enregistre des informations sur les fichiers actifs.

L'exécution des processus utilisateur sur les systèmes UNIX est divisée en deux niveaux: utilisateur et noyau. Lorsqu'un processus exécute un appel système, le mode d'exécution du processus passe du mode utilisateur au mode noyau : le système d'exploitation exécute et tente de traiter la demande de l' utilisateur [...]

[...] la philosophie du système UNIX est de fournir des primitives de système d'exploitation qui permettent aux utilisateurs d'écrire de petits programmes modulaires qui peuvent être utilisés comme blocs de construction pour créer des programmes plus complexes. Une telle primitive visible pour les utilisateurs shell est la capacité de rediriger les E / S .

[...] En plus de gérer les appels système, le noyau s'occupe de la comptabilité générale pour la communauté des utilisateurs, contrôlant la planification des processus, gérant le stockage et la protection des processus dans la mémoire principale, alignant les interruptions, gérant les fichiers et les périphériques et prenant soin des erreurs système conditions.

Si vous êtes intéressé par les différentes implémentations des noyaux dans les systèmes d'exploitation de type Unix, vous pouvez également jeter un œil à l' implémentation de FreeBSD (4.4BSD) ou au noyau Mach ou regarder cette comparaison de leurs fonctionnalités.

Plus vous en savez sur la conception d'UNIX, plus vous comprenez ce qui s'est passé dans le diagramme suivant sur l'ascendance d'UNIX et son histoire . M. Bach parle principalement du système V dans son livre, mais il parle également de BSD:

entrez la description de l'image ici

Il y a plus que cela ne semble vraiment. Par exemple, Mac OSX est certifié UNIX03, mais le voyez-vous connecté à l'un des UNIX purs (en rouge principalement)?

entrez la description de l'image ici

Ci-dessus, vous pouvez voir comment BSD, GNU, Microsoft et diverses personnes ont contribué à cet univers. Même si GNU et finalement Linux n'ont pas de lignée directe avec UNIX, vous voyez que GNU est un effort pour réorganiser dans le monde open source les outils et logiciels d'UNIX commerciaux qui étaient devenus fermés. Donc, regarder le logiciel GNU maintenu donne une idée, par exemple, des applications et bibliothèques de prototype initiales.

Les guerres de licences ont joué un rôle dans l'évolution (et parfois la stagnation) d'UNIX. Vous pouvez voir immédiatement que les UNIX sont alignés selon le type de licence - fermé vs BSD ( BSD permet de rendre le code source fermé ... voir OSX) et GPL qui permet à Linux et GNU de se compléter dans le monde du copyleft. Voici la carte classique du noyau Linux initialement développée par Linus Torvalds, qui révèle également ce qu'un noyau "peut" être dans un système d'exploitation de type Unix:

entrez la description de l'image ici

Cela suggère l'idée qu'un type de conception " noyau " n'est pas ce qui fait la norme UNIX ou ce qui définit un système d'exploitation de type Unix. Cela est démontré par le fait que de nombreux systèmes d'exploitation de type Unix peuvent avoir un noyau monolithique ou un micro-noyau - monolithique était le type de conception classique pour UNIX. En fait, même au sein d'UNIX purs, HPUX a un noyau monolithique tandis qu'AIX utilise un micro-noyau. Ce débat sur le design concerne la performance et n'est pas lié à l'ascendance ou à l'identité Unix. D'autre part, il existe une approche conceptuelle traditionnelle pour fournir des services aux logiciels, traiter des systèmes de fichiers, etc. sous des systèmes d'exploitation de type UNIX / unix.

Je pense que de telles considérations ajouteront du contexte à la partie OS de votre question.

Communauté
la source
3
+1 Quelques bons points ici: 1) À propos de la relation entre C et Unix (pour ajouter: C a été développé par AT&T Bell pour implémenter Unix avec un langage qui pourrait être aussi rapide que l'assemblage mais portable sur différents matériels, et beaucoup de POSIX est une extension de la norme C). 2) La conception du noyau est indépendante des normes. Les normes sont "quoi", les noyaux sont "comment".
goldilocks
1
@goldilocks Merci, j'ai ajouté votre commentaire sur C verbatim. J'ai essayé de préciser que les considérations relatives au noyau ne sont pas liées à la norme. La question suppose qu'il y a quelque chose de spécifique à propos du noyau de type Unix mais il n'y en a pas. D'un autre côté, historiquement, les premiers noyaux Unix auraient pu être de telle ou telle manière. Ma compréhension est limitée, mais je suppose que les noyaux ont beaucoup changé car le matériel a beaucoup changé depuis les années 70. Ce qui est clair, c'est que le noyau ne définit pas Unix / unix-like, pensant que le noyau linux définit clairement GNU / Linux ou Linux.