Un système d’exploitation de type Unix (en anglais : Unix-like) est un système d’exploitation qui se comporte d’une façon semblable à un système Unix, bien que n’étant pas nécessairement conforme ou certifié par une quelconque version de la Single UNIX specification. Le terme peut regrouper les systèmes d’exploitations libres ou open source inspirés par Unix des laboratoires Bell ou conçu pour imiter ses fonctionnalités.
Le système UNIX
Le système UNIX est multi-utilisateur et multitâche, il a été construit pour être sûr, vis-à-vis des manipulations illicites des utilisateurs pour accéder à des données d'un autre utilisateur ou vis-à-vis des erreurs lors de l'exécution d'un programme. Il permet donc à un ordinateur mono ou multi-processeurs d'exécuter apparemment simultanément plusieurs programmes dans des zones protégées appartenant chacune à un utilisateur en minimisant tout risque de fraude ou d'incident. Contrairement aux systèmes antérieurs sur mainframes, l'utilisateur de ce système ne doit savoir manipuler que deux concepts de base, celui des fichiers et celui des processus, autrement dit les données et les traitements. Chacun de ceux-ci se complexifie cependant par exemple avec respectivement la gestion des droits d'accès ou les IPC (communications inter-processus).
Le système de fichier
Le fichier est l'unité élémentaire de stockage de l'information, ou plus exactement la ressource élémentaire sous UNIX, il est accessible via l'« espace de nommage », une arborescence de fichier. Il existe des fichiers spéciaux et des fichiers normaux. Les fichiers spéciaux permettent d'accéder aux informations lues ou écrites dans des périphériques, par exemple les imprimantes, la mémoire, l'écran.
Un fichier sous UNIX n'est intrinsèquement pas typé, ce qui veut dire que le système ne connaît pas le format des données qu'il contient, et peut représenter différentes ressources telles qu'une suite de caractères stockée sur un support physique, un périphérique, tel que: disque dur, imprimante, dérouleur à bandes, mémoire, interface réseau. Le système d'exploitation gère toutes les informations nécessaires au traitement de ce fichier : propriétaire, groupe (chaque fichier étant détenu par un propriétaire faisant partie d'un ou plusieurs groupes, le propriétaire et chaque groupe possèdent des droits particuliers), droits d'accès des différentes catégories d'utilisateurs, taille, date de dernière modification, date du dernier accès, références des blocs de données sur le disque s'il représente une suite de caractères.
Processus
Unix est par définition multi-utilisateur et multi-tâche. Le processus est l'unité élémentaire de gestion des traitements sous UNIX et initialement la seule. Il s'agit d'une abstraction comprenant un espace d'adressage et supportant un ou plusieurs flots d'exécution de programme, les threads noyaux apparus plus tard, chacun possédant une pile et son propre contexte d'exécution. UNIX étant un système multitâche, il permet de partager les ressources de calcul entre les threads. D'autre part il est préemptif, ce qui implique que ce partage est effectué de manière transparente pour les threads. Ce partage transparent est réalisé grâce à un ordonnanceur adapté à l'usage auquel est destiné le système. Dans un système à temps partagé, l'ordonnanceur tente de répartir les ressources de calcul de manière équitable entre les threads tout en privilégiant le temps de réponse des entrées/sorties. Dans un système temps-réel, les threads sont ordonnancés selon des contraintes temporelles qui doivent être garanties strictement (temps-réel dur) ou bien avec un certain taux d'échec (temps-réel souple).
Contrôle d'accès aux ressources
Au niveau logiciel, la politique de sécurité du système UNIX est fondée sur le principe que chaque ressource admet un identificateur, un propriétaire et un ensemble de droits d'accès (en lecture, en écriture, en exécution) répartis en trois groupes :
- les droits du propriétaire ;
- les droits du groupe auquel appartient le propriétaire ;
- les droits des autres utilisateurs.
La plupart des systèmes UNIX actuels proposent un modèle plus fin, celui des listes de contrôle d'accès (ACL - Access Control List). Un utilisateur spécial appelé root possède tous les droits sur toutes les ressources. Il est en général utilisé uniquement pour des tâches d'administration. Par souci d'une meilleure sécurité, certains systèmes UNIX permettent de mieux nuancer l'acquisition de droits supplémentaires par les utilisateurs. Ainsi Linux propose-t-il les « capacités » (capabilities) et Mac OS X permet d'installer des applications et d'intervenir sur la configuration du système au moyen d'un compte administrateur distinct de root (qui est d'ailleurs désactivé par défaut), en ce qu'il ne peut modifier les fichiers fondamentaux du système.
Au niveau matériel, le contrôle d'accès aux ressources se base d'une part sur des mécanismes inhérents aux principes de fonctionnement de la mémoire virtuelle, et d'autre part sur un modèle de protection à 2 niveaux : le mode superviseur (le plus privilégié, réservé au fonctionnement du noyau) et le mode utilisateur (le moins privilégié). Ce type de contrôle d'accès est possible sur la plupart des processeurs modernes supportant un UNIX. Certains processeurs fournissent des possibilités de protection plus étendues. Ainsi les processeurs de la famille Intel x86 comportent 4 niveaux (ou anneaux) de protection. Des systèmes d'exploitation (peu nombreux à l'heure actuelle), tels que OS/2, exploitent cette possibilité.