Comment Linux moderne diffère les uns des autres

Depuis plus de 15 ans, je travaille pour Fast Reports et de par la nature de mon travail, je suis souvent confronté à Linux, en fournissant un support pour l'un des produits. Je connais Linux depuis un peu plus longtemps - j'ai installé Slackware pour la première fois en 1997. En conséquence, ayant une certaine expérience, je souhaite partager avec vous mon opinion sur la façon dont, à mon avis, les distributions Linux modernes diffèrent les unes des autres. Tout ce qui est décrit dans l'article est une opinion subjective et ne prétend pas être une vérité absolue.



Le système d'exploitation Linux remonte à 1991, lorsque l'étudiant finlandais Linus Torvalds a commencé à développer un nouveau système d'exploitation, inspiré des idées d'Unix et de Minix. Le choix réussi d'une licence gratuite a prédéterminé le succès de son entreprise - des dizaines et des centaines de passionnés ont rejoint le développement, chacun apportant quelque chose de nouveau. Par la suite, de grandes entreprises ont rejoint le développement - Intel, IBM et autres. Les raisons exactes qui ont poussé les leaders de l'industrie à prendre en charge un système d'exploitation gratuit ne me sont pas connues, mais les «mauvaises langues» disent que de nombreuses entreprises ont décidé de déplacer Microsoft, qui à l'époque détenait le monopole absolu des systèmes d'exploitation pour ordinateurs de bureau.



Evolution du noyau Linux exprimée en nombre de lignes



image



Linux aurait-il pu, sans le soutien des maîtres de l'industrie, devenir ce qu'il est maintenant? Loin d'être un fait - les anciens se souviennent des guerres de brevets entre l'opération Santa Cruz et les entreprises soutenant Linux. SCO a perdu cette guerre et n'existe plus.



Le nombre d'engagements au cœur par entreprise



image



Ainsi, au cours de sa vie, le système d'exploitation Linux a parcouru un long chemin d'évolution et est maintenant devenu un système d'exploitation populaire capable de remplacer Windows pour résoudre de nombreuses tâches urgentes des utilisateurs.



Avant de commencer à comparer les distributions Linux modernes, nous devons définir deux aspects importants - le premier aspect est en quoi consiste le système d'exploitation et le second est de quel point de vue nous allons comparer. Par kit de distribution, nous entendons une solution complète composée d'un noyau OS, d'un serveur graphique (X-server), d'un environnement (un ensemble de programmes fournis), d'un utilitaire d'installation et d'une configuration initiale. Il est possible de comparer les distributions du point de vue de l'utilisateur final, de l'administrateur système et du programmeur d'application.



Linux du point de vue d'un administrateur système



À l'aube de son développement, Linux était le lot des technologues et des prêtres de la technologie avec des connaissances spécifiques en programmation et en administration. Le précurseur de Linux était le système d'exploitation Unix, et un spécialiste expérimenté en administration Unix pouvait facilement installer et configurer le système. Cela était inaccessible à l'utilisateur moyen, et le processus d'administration pour lui était quelque chose de magique. Linux moderne est devenu convivial - le processus d'installation se résume à répondre à quelques questions, et il suffit souvent d'accepter l'option de configuration proposée par l'installateur, simplement en répondant positivement à toutes les questions - l'installateur analysera la configuration matérielle et sélectionnera les pilotes et paramètres de configuration nécessaires. Habituellement, le kit de distribution contient des progiciels prêts à l'emploi,fourni sous forme d'archives DEB ou RPM contenant, en plus des programmes eux-mêmes, des scripts de configuration et des informations sur les dépendances sur des bibliothèques tierces. Cependant, il existe des exceptions, par exemple, la distribution Gentoo est fournie en tant que source lorsque tous les programmes et règles de construction, et le système d'exploitation lui-même est littéralement construit sur l'ordinateur de l'utilisateur pour sa configuration de processeur. La question de l'efficacité d'une telle méthode est controversée, nous ne nous y plongerons pas, je noterai seulement qu'il ne s'agit que d'un des degrés de liberté déclarés par la communauté - l'utilisateur est libre de choisir "si cela vaut la chandelle". En général, les formats de package RPM et DEB sont similaires et lors du choix d'un kit de distribution, vous pouvez ignorer ce point. À de rares exceptions près - cela arrive parfoisque l'auteur du programme pour une raison quelconque n'a pas fourni la deuxième version de l'installateur et qu'il n'existe qu'au format RPM (RedHat Linux et ses dérivés) ou DEB (Debian Linux et ses dérivés). Dans ce cas, vous devrez peut-être faire un effort pour installer un tel programme - même en décompressant manuellement le package d'installation, vous risquez de tomber sur des dépendances non satisfaites. L'installation d'un tel programme demandera beaucoup d'efforts, et en cas d'erreur, en essayant de remplacer les bibliothèques requises, vous pouvez entraîner un plantage du système. Heureusement, cette situation est extrêmement rare et 99,9% des utilisateurs de Linux ne seront jamais confrontés à ce problème. De plus, tous les fabricants de distributions bien connus conservent leurs référentiels avec un riche ensemble de programmes, où chaque programme est compilé et testé pour une version spécifique de la distribution.



Donc, nous savons que l'une des différences entre Linux est le format des paquets. Cependant, du point de vue de l'administrateur système, il y a une autre différence: le format des scripts de démarrage. De la famille de systèmes d'exploitation Unix, Linux a deux formats concurrents - le style System V et le style BSD. Pour comprendre de quoi il s'agit, voyons comment cela fonctionne. Le chargeur de démarrage charge le noyau du système d'exploitation et lui transfère le contrôle, le noyau démarre et démarre le premier processus - init. À proprement parler, au lieu d'init, vous pouvez glisser n'importe quel processus, par exemple bash. Dans ce cas, nous obtenons quelque chose comme un système de console mono-utilisateur, mono-tâche, sans réseau, sans interface graphique et avec un système de fichiers racine en lecture seule. De plus, une partie du matériel dans ce cas peut ne pas fonctionner si les pilotes correspondants ne sont pas présents dans le noyau, mais sont chargés en tant que modules.Dans le mode de fonctionnement classique, le processus d'initialisation lit le fichier / etc / inittab et, conformément à celui-ci, lance le processus de démarrage du système - monte les partitions, charge les pilotes, initialise les interfaces réseau, démarre les programmes de service (qui étaient auparavant appelés démons), charge le sous-système graphique. Init ne le fait pas directement, mais en utilisant le concept de niveau d'exécution et de scripts spéciaux. Il existe généralement jusqu'à six niveaux d'exécution - les modes d'exécution qui décrivent les modes de fonctionnement du système - démarrage, mono-utilisateur, multi-utilisateur avec un sous-système réseau, multi-utilisateur avec une interface graphique. En fonction des conditions d'utilisation, l'administrateur peut définir un niveau d'exécution standard, vers lequel le système basculera après le démarrage,il s'agit généralement du mode multi-utilisateurs avec réseau et interface graphique pour le bureau et du mode multi-utilisateurs avec réseau pour les serveurs. C'est dans ces scripts que réside la différence entre les styles SystemV et BSD. Cependant, ayant connaissance du format inittab, vous pouvez consulter le contenu des scripts et comprendre comment fonctionnent le démarrage, l'arrêt et la transition entre les niveaux d'exécution du système.



En 2010, les ingénieurs de RedHat ont développé un remplaçant pour init, le service systemd. Ce service a apporté de nouvelles fonctionnalités au système:



  • services activés par socket ( remplace les compléments inetd);
  • lancement de services selon un calendrier ( remplace les compléments cron);
  • travailler avec une minuterie de surveillance matérielle (remplace le chien de garde);
  • changement de racine (remplace chroot);
  • les volumes de montage automatique et les ressources réseau ( remplace les compléments mount et fstab);
  • journalctl - service de journalisation;
  • systemd-analyz - analyse du démarrage du service (comprend la vitesse de chargement (à la fois du système et des services individuels), rendu du démarrage des services, etc.);
  • systemd-boot - chargeur de démarrage UEFI (remplacement de grub et lilo).


Actuellement, la grande majorité des distributions Linux sont passées à systemd, des distributions autrefois populaires, seul Slackware résiste à la transition vers le nouveau sous-système.



Ainsi, la transition vers systemd, pour ainsi dire, efface l'une des différences entre Linux - le système de scripts de démarrage et conduit à l'unification. En même temps, la prise en charge des scripts de démarrage classiques est préservée - par exemple, certains volumes à monter peuvent être spécifiés de manière classique via / etc / fstab, tandis que d'autres volumes peuvent être montés à l'aide des outils systemd.



Dans le passé, les administrateurs système avaient l'habitude de dire quel système était meilleur que SystemV ou BSD, mais maintenant le débat s'est calmé. Un administrateur système expérimenté pourra configurer n'importe quel système, mais pour les débutants sur le Web, il y a suffisamment d'informations qui révèlent n'importe quel aspect de la configuration Linux.



Linux du point de vue de l'utilisateur



Du point de vue de l'utilisateur final, Linux diffère légèrement plus. Examinons plus en détail la question. Le sous-système graphique était à l'origine facultatif sous Unix. Unix fonctionnait souvent sur des ordinateurs puissants et les utilisateurs y étaient connectés via des terminaux X. L'interaction a eu lieu sur le réseau - le programme a été exécuté sur l'ordinateur hôte, a reçu des informations sur les pressions du clavier et les événements de la souris, et en réponse a envoyé des commandes au terminal pour dessiner des primitives graphiques et du texte. Les terminaux graphiques étaient des appareils coûteux et rares, de sorte que les ordinateurs personnels sont devenus populaires en tant que terminaux. À propos, voici un point intéressant qui est souvent source de confusion - le serveur X est exécuté sur le terminal, pas sur l'hôte. Le programme lui-même s'exécute sur l'hôte, qui utilise la bibliothèque xlib,fournir une interface de bas niveau de base pour travailler avec un serveur graphique. Cette interface est assez bas niveau, elle introduit le concept de fenêtre, i.e. zone rectangulaire de l'écran, peut afficher du texte vectoriel dans différentes polices et fournit également le dessin de diverses primitives graphiques - points, lignes, rectangles, cercles et images.



Étant donné que les primitives graphiques de base sont assez simples, cela a conduit à l'émergence de bibliothèques de widgets - ces bibliothèques fournissent un niveau d'abstraction plus élevé et simplifient grandement l'écriture de programmes avec une interface graphique. Par exemple, la bibliothèque X Athena Widgets est devenue une partie du système graphique X Window System. Cette bibliothèque présente le concept de boutons, boutons radio, menus, champs de saisie et primitives similaires. Cependant, selon les normes modernes, il semble assez "tordu".



Et c'est là que les différences commencent pour les utilisateurs. L'apparence de ce que l'utilisateur voit à l'écran dépend de plusieurs sous-systèmes - c'est l'environnement de bureau qui fournit un espace appelé bureau, c'est le gestionnaire de fenêtres qui détermine l'apparence des fenêtres du programme (décorations de fenêtre) et souvent, mais pas nécessairement, intégré dans l'environnement de bureau, et enfin, c'est une bibliothèque d'éléments d'interface. Ce que et comment l'utilisateur voit à l'écran est déterminé par des combinaisons des composants ci-dessus.



En pratique, cela conduit au fait que le même programme lancé dans différents gestionnaires de fenêtres peut avoir différentes décorations de fenêtre - différents titres, tailles de bordure de fenêtre, différentes minimisations, boutons plein écran et fermeture. Le gestionnaire de fenêtres définit tout cela. Cependant, au sein d'un même gestionnaire de fenêtres, différents programmes peuvent avoir différents types d'éléments d'interface, selon la bibliothèque utilisée. Par souci d'équité, il convient de noter que vous pouvez observer une telle variété dans Windows, mais beaucoup moins souvent, car la grande majorité des programmes Windows utilisent GDI + standard ou s'enroulent autour de lui.



À quoi sera confronté l'utilisateur Linux sur le bureau? Tout d'abord, c'est GNOME ou KDE, la plupart des distributions sont basées sur ces environnements de bureau. Cependant, ils ne sont pas limités à et divers fournisseurs Linux offrent une douzaine d'environnements différents. En ce qui concerne les bibliothèques d'éléments d'interface, deux bibliothèques sont ici en tête - GTK et Qt. Les deux bibliothèques sont multiplateformes, et si un programme existe à la fois sous Linux et Windows, il est probablement écrit en utilisant GTK ou Qt. Cependant, il existe des exceptions, par exemple, Xamarin a créé une version de la bibliothèque Windows Forms pour Linux et macOS. Parfois aussi, les développeurs de gestionnaires de fenêtres distribuent leurs bibliothèques de widgets. Ainsi, il devient clair d'où vient une telle variété d'interfaces utilisateur graphiques pour Linux.



Linux du point de vue des programmeurs d'applications



Tout ce qui précède s'applique également à la programmation. Si vous écrivez un serveur ou un utilitaire de console, dans la grande majorité des cas, vous n'avez pas besoin d'utiliser des directives de compilation conditionnelle - le Linux moderne est assez bien standardisé et entièrement compatible POSIX. De plus, utiliser autoconf vous permet d'écrire des programmes non seulement pour Linux, mais également pour tout système compatible POSIX, de BSD à toutes sortes d'exotiques.



Vous n'aurez probablement pas à choisir un format de package - utilisez à la fois DEB et RPM et vous couvrirez presque tous les cas d'utilisation. Pour les programmes de service, vous devrez probablement faire attention au format des scripts de démarrage afin que le programme d'installation enregistre correctement le démarrage automatique de votre service. Dans mon cas, j'ai dû faire attention à l'emplacement des polices, car différents fournisseurs utilisent des chemins différents pour stocker les polices, cependant, une recherche récursive commençant par / usr / share / fonts vous aidera ici - toutes les polices, à l'exception des polices personnalisées, seront situées le long de ce chemin. En ce qui concerne les polices personnalisées installées dans / home / user, il y a une certaine confusion et des oscillations, et différents fournisseurs proposent au moins deux hiérarchies - ~ / .fonts et ~ / .local / share / fonts.



Pour les programmes graphiques, la complexité est un peu plus grande. Compte tenu des différents environnements de bureau du zoo, vous devez tenir compte de leurs particularités. Par exemple, les notifications dites de bureau seront prises en charge par la plupart des environnements de bureau, mais peuvent ne pas fonctionner avec certains gestionnaires de fenêtres exotiques.



Enfin, quelques points plus importants qui font des différences significatives entre les distributions. Malgré la similitude de tous les Linux modernes, vous pouvez rencontrer des problèmes sur les distributions avec une protection accrue, c.-à-d. ceux où le système d'accès obligatoire est utilisé. Par exemple, certaines ressources sont disponibles par défaut dans toutes les distributions classiques, mais provoquent une erreur d'accès dans la version protégée de Linux. Il est impossible de prédire à l'avance où et comment le programme échouera dans ce cas, la seule solution est donc de tester sur des distributions protégées. Ou une solution rapide du problème après que l'utilisateur a contacté le support technique.



Le deuxième point est la popularité de la distribution. Si vous utilisez une bibliothèque ou un framework peu courant dans le cadre du produit, il est possible qu'une telle distribution contienne une version ancienne ou incomplète de cette bibliothèque. Dans ma pratique, cette situation s'est produite dans l'une des distributions avec prise en charge de la page de codes 1251 dans la bibliothèque System.Text.Encoding pour C #. Il n'y a qu'une seule façon de traiter de tels problèmes - puisque le problème n'est pas observé dans les autres distributions Linux, vous devriez écrire au développeur du support technique de cette distribution, décrivant le problème en détail et dire qu'il n'y a pas de problème dans les autres distributions.



Production. Si vous ne considérez pas les versions protégées de Linux, alors du point de vue des administrateurs système et des programmeurs, les distributions modernes sont très similaires. Souvent, les différences entre les différentes générations d'une distribution du même fournisseur sont plus importantes que les différences entre les distributions modernes. Du point de vue des utilisateurs, la principale différence réside dans le choix et la configuration de l'environnement de bureau et du logiciel fourni avec la distribution.



All Articles