Linux, l'environnement de développement par excellence

Pourquoi apprendre l’environnement Linux ?

Qu’est-ce qu’on de commun 23 des 25 sites les plus visités au monde, votre télé ou frigo connecté, votre lecteur DVD/Blu-Ray, votre terminal d’accès Internet (par exemple la Freebox), votre téléphone Android, l’intégralité des supercalculateurs (appelés également supercomputers) et une bonne partie des systèmes embarqués des trains, des avions et même des fusées de SpaceX ?

D’autres faits amusants ? Le gouvernement chinois, la Maison Blanche, le département de la Défense américain, l’US Navy, la Police Nationale et la Gendarmerie Nationale française, les services de renseignements, les gouvernements Turc, Russe, Autrichien, Vénézuélien…, des systèmes de contrôle des centrales nucléaires, les bourses (notamment la plus importante, le New York Stock Exchange (NYSE)) utilisent tous des distributions Linux.

Pourquoi toutes les administrations, gouvernements et toutes les institutions sensibles utilisent des distributions Linux et pas Windows ou Mac ? Car elles sont beaucoup plus sécurisées, bien plus configurables et bien plus performantes.

Et ce n’est pas fini, avec l’arrivée des voitures autonomes et des objets connectés en masse, Linux a de beaux jours devant lui !

Pour vous donner d’autres statistiques : entre 70% et 85% des serveurs (suivant les études) utilisent Linux comme système d’exploitation.

Selon le principal sondage de développeurs (Stackoverflow Survey 2020), plus de 56% des développeurs professionnels travaillent sur Linux et 75% des développeurs adorent Linux (comparé à 57% pour Windows). Il s’agit de la plateforme la plus appréciée pour le développement !

Qu’est-ce que Linux ?

Le plus souvent, on entend par Linux un système d’exploitation.

C’est un raccourci impropre qui sert simplement à sa démocratisation pour les néophytes.

Le noyau Linux

En fait, Linux est uniquement un noyau.

Un noyau (kernel) est la partie qui gère toutes les ressources d’une machine et qui permet aux composants de communiquer entre eux.

Le terme kernel vient en fait d’une métaphore d’une noix avec le cerneau (kernel) et la coque (shell).

Le shell est un programme du système d’exploitation qui permet d'interagir avec le kernel. Il va parser, traduire et les exécuter en envoyant des instructions au kernel. Nous le verrons en détails mais sachez déjà qu’il en existe des dizaines (sh, csh, ksh, bash, zsh etc).

Le noyau est le cœur du système d’exploitation qui permet à tous les composants physiques (CPU, RAM, carte graphique etc) ou logiciels (GUI, pilotes, programmes etc) de communiquer entre eux. Il permet également de gérer le multi-tâches (plusieurs programmes s’exécutant en même temps).

Deux exemples du rôle fondamental d’un noyau sont l’ordonnancement des tâches et la <s gestion mémoire.

L’ordonnancement des tâches

Une machine exécute plusieurs tâches contenant de nombreuses instructions.

Le noyau va décider avec un algorithme l’ordre d’exécution des instructions.

Dans le schéma ci-dessous, il y a 4 tâches parallèles et le noyau va décider de la file d’exécution et donc de l’ordre dans lequel le CPU va exécuter les instructions :

4 tâches ordonnancées. La tâche 3 est en priorité haute, la tâche 4 est en priorité faible. (Ce diagramme est explicatif, en pratique les instructions ordonnées sont directement exécutées.)
4 tâches ordonnancées. La tâche 3 est en priorité haute, la tâche 4 est en priorité faible. (Ce diagramme est explicatif, en pratique les instructions ordonnées sont directement exécutées.)


La gestion des tâches

Le noyau est aussi chargé d’allouer la mémoire (RAM et disque dur) aux processus qui en demandent.

Il utilise de la mémoire virtuelle pour ne pas divulguer aux programmes les emplacements physiques dans la mémoire. Il est également chargé de ne pas autoriser d’autres processus à accéder à la mémoire dédiée à un processus (c’est ce qui est appelée la privatisation de la mémoire).

L’origine de Linux.

Linux vient de Linus, le prénom de Linus Torvald son créateur, il a toujours écrit du code open source et a refusé un emploi à Apple. Il est également le créateur de Git, le système de gestion de versions utilisé par à peu près tous les développeurs professionnels sur terre.

Il aurait pu être multimilliardaire avec son système le plus utilisé au monde, mais il n’est pas à plaindre : il a une fortune de 150 millions de dollars et est payé 10 millions par an par la fondation Linux).

Le noyau a été démarré en 1991 avec seulement 10239 lignes de code (LOC), il en fait en 2020, 28 millions de LOC écrites principalement par le finlandais Linus Torvald (environ 3.2% des commits), mais également par des milliers d’autres contributeurs (plus de 75% des contributeurs travaillant pour les plus grandes entreprises : Intel, Google, Microsoft etc). Vous pouvez retrouver le code ici. La quasi totalité du code est écrit en C mais il y a aussi un peu de C++ et de langage assembleur.

Le symbole de Linux est Tux, son nom vient de Tuxedo (smoking en anglais) :


Quelques autres informations intéressantes :

- selon certaines sources, Windows aurait dépensé plus de 421 millions de dollars en 2002 pour lutter contre Linux et le développement des logiciels libres. L'ancien PDG de Microsoft Steve Ballmer avait même qualifié Linux d'un "horrible cancer".

- une étude menée par l’Union Européenne a évalué le coût de développement d’un noyau semblable à Linux à 1,14 milliards de dollars.

- seulement 1.47% des ordinateurs de bureau utilisent Linux. Bien sûr parce que Windows a signé des contrats avec l'intégralité des fabricants et assembleurs d’ordinateurs (sauf Apple bien sûr).

Qu’est-ce que GNU/Linux ?

Heckert GNU white.svg


Le projet GNU est antérieur au noyau Linux, il date de 1984 et a été fondé par un autre développeur de génie, Richard Stallman passé par Harvard puis chercheur en intelligence artificielle au MIT. Il a été rejoint par de très nombreux contributeurs au fil du temps.

C’est un projet visant à créer un environnement totalement libre de droits permettant d’offrir à tous l’accès à des logiciels libres de qualité. Dans le manifeste GNU, il est ainsi indiqué : “Une fois GNU achevé, tout le monde pourra se procurer de bons logiciels système, gratuits comme l'air qui nous entoure”.

GNU est l'acronyme de GNU's Not Unix pour GNU n’est pas UNIX. Nous reviendrons sur UNIX plus tard.

GNU est totalement libre, la seule restriction est justement celle d’empêcher les modifications de GNU pour les rendre propriétaires (à savoir modifier un peu GNU pour ensuite vendre des licences).

Aujourd’hui, l’ensemble des paquets (ou logiciels) du projet GNU sont au nombre de 395.

GNU/Linux est l’utilisation du noyau Linux avec la suite de logiciels libres GNU pour former un système d’exploitation libre.

GNU comporte par exemple : un chargeur d’amorçage (permettant de lancer le noyau Linux, appelé grub), une librairie d’utilitaires de programmes en C (GNU C ou glibc), des compilateurs (par exemple GNU compiler collection), une librairie de programmes utilitaires (GNU Core Utilities) que nous étudierons en détails.

Par exemple chmod, cp, ls, mkdir, mv, rm et probablement toutes les commandes que vous connaissez, sont des commandes de cette librairie.

Vous ne serez ainsi plus surpris de retrouver le nom de Richard Stallman et d’autres contributeurs à chaque fois que vous irez dans le manuel pour une commande. Vous pourrez ainsi trouver pour la commande ls :

AUTHOR
Written by Richard M. Stallman and David MacKenzie.


Et vous pourrez maintenant comprendre pourquoi vous avez sous Licence ou Copyright, dans le manuel de la plupart des commandes :

This  is  free  software:  you  are free to change and redistribute it.

Traduction : c’est un logiciel libre : vous être libre de le modifier et de le redistribuer.

Tout en bas de la commande vous verrez aussi la version de GNU Core Utilities, par exemple :

GNU coreutils 8.30

Bien sûr, tout cela est étudié en détails dans notre cours.

Qu’est-ce qu’Unix ?

A l’origine UNIX était un système d’exploitation multi-tâches et multi-utilisateurs créé par AT&T un opérateur américain dans les années 1970.

Aujourd’hui, lorsqu’on parle d’UNIX, on désigne une famille de systèmes dont GNU/Linux fait partie (mais aussi les systèmes BSD et macOS). Ce sont des systèmes inspirés par le système UNIX d’origine.


Cet ensemble de programmes permet à un utilisateur d’entrer des informations (avec un clavier et une souris) pour manipuler le CPU et la RAM afin d’afficher d’autres informations sur un moniteur et d’effectuer des calculs.

Voici un historique de la famille des systèmes UNIX :

File:Unix timeline.en.svg


Qu’est-ce que POSIX ?

POSIX est un ensemble de normes permettant de standardiser des API afin de pouvoir rendre des programmes utilisables sur l’ensemble des systèmes de la famille UNIX (que nous venons de voir).

Le nom POSIX, pour Portable Operating System Interface et le X pour dénoter de l’héritage UNIX, a été proposé par Richard Stallman. La première version de cet ensemble de normes a été établi en 1988 par l’IEEE (Institute of Electrical and Electronics Engineers).

Ces spécifications évoluent régulièrement depuis et la dernière version est POSIX 7 qui date de 2018. Ces spécifications sont gigantesques, elles comportent principalement :

- une librairie standard pour C (ensemble de fonctions C utilitaires pour le système qui concernent par exemple les opérations sur les fichiers, les opérations réseaux (sockets), les processus et les threads, la gestion mémoire, et des fonctions utilitaires par exemple pour les expressions régulières).

- des commandes utilitaires (c’est dans ces spécifications que sont standardisées toutes les commandes comme cd, cat, mkdir et des centaines d’autres). Vous pouvez retrouver ces spécifications ici. Pour les systèmes GNU/Linux, ces commandes sont implémentées par la librairie GNU core utils pour les plus simples (ls, mkdir etc), par des librairies GNU propres pour les plus complexes (grep, sed etc) et par le shell pour certaines commandes qui doivent être built-in, c’est-à-dire incluses dans le shell et exécutés par le shell (comme les commandes cd, pwd ou exit, nous y reviendrons en détails, la liste peut se trouver ici).

- le langage shell (Shell Command Language) : c’est le langage standardisé pour exécuter des commandes ou des scripts avec un shell (les spécifications sont ici).

- les variables d’environnement : HOME, PATH etc.

- les statuts d’erreur et de sortie des programmes.

- les expressions régulières qui sont de deux types BRE (basic regular expressions) et ERE (Extended regular expressions). Elles sont par exemple implémentées en C dans la librairie GNU glibc.

- la structure des répertoires et des noms de fichiers : les séparateurs / , . pour  current working directory, .. pour parent directory, les caractères utilisables (a-zA-Z0-9._-) etc.

Les systèmes s’y conformant totalement ou en quasi totalité sont notamment : la quasi totalité des distributions GNU/Linux, OS X (Apple), AIX (IBM), Android et Solaris (Oracle).

Environnement de bureau et gestion des fenêtres

A l’origine GNU/Linux est dépourvu d’interface graphique (GUI) : toutes les actions s’effectuaient avec un terminal.

C’est toujours le cas si vous utilisez des serveurs sous GNU/Linux : vous n’utiliserez pas de GUI mais la plupart du temps simplement un terminal avec le protocole ssh.

Plusieurs projets d’environnement de bureau libre ont vu le jour, les principaux sont KDE et GNOME. Ces environnements permettent d’utiliser GNU/Linux sur un ordinateur de bureau.

L’environnement KDE

Screenshot of the Plasma Desktop with Dolphin and the launcher open


KDE (pour K Desktop Environment) est aujourd’hui à la fois un ensemble de logiciels multi-plateformes, un environnement de bureau (KDE Plasma) et un ensemble d’applications (KDE Applications).

La première version date de 1998 et il est toujours activement développé par une communauté d’environ 800 contributeurs. Le langage utilisé est C++ et il utilise la librairie graphique Qt.

Le projet est maintenant traduit en plus de 100 langues, et est disponible sur GNU/Linux, sur Windows et sur Mac OS.

Pour l’anecdote Linus Torvald utilisait KDE  sur Fedora mais utilise maintenant GNOME. Il avait jugé d’abord que GNOME était mené par des “nazis de l’interface”, puis que KDE 4 était un “désastre”. Toujours très sympa, il aime visiblement créer des polémiques !

L’environnement GNOME

Featured image showing GNOME shell


GNOME est l’acronyme de GNU Network Object Model Environment, il s’agit d’un projet concurrent de KDE qui a été débuté en 1999.

Il est également très actif et propose régulièrement des améliorations. Il est principalement écrit en C et utilise l’ensemble de librairies graphiques GTK (The GIMP Toolkit).

GNOME est traduit dans plus de 50 langues et est l’environnement graphique utilisé par Ubuntu notamment.

Les points communs

Ces deux environnements de bureau utilisent plusieurs librairies communes comme par exemple le système de fenêtrage X Window (X11) qui est le système permettant de gérer les interactions graphiques : souris, clavier et écran.

Qu’est-ce qu’une distribution ?

En 2020, il existait plus de 300 distributions GNU/Linux actives (dont le développement se poursuit).

Une distribution vient de software distribution et signifie une collection de logiciels.

Une distribution GNU/Linux peut être à usage spécifique (pare-feu, routeur etc), à usage professionnel (avec licence et support payants, par exemple REHL ou SUSE) et les distributions généralistes qui peuvent être utilisées sur des serveurs, des ordinateurs de bureau etc (par exemple Debian, Ubuntu, Fedora, CentOS etc).

Une distribution généraliste contient un noyau (le plus souvent Linux mais cela peut être par exemple FreeBSD), un ensemble de logiciels libres utilitaires (souvent issues du projet GNU), un environnement de bureau (le plus souvent GNOME ou KDE), des logiciels applicatifs (pouvant être installé suivant les besoins à l’aide d’un gestionnaire de paquets), des pilotes (Wi-Fi, imprimantes etc), des lecteurs (vidéo, audio, PDF etc), un navigateur et un client email par défaut.

Vous pouvez retrouver les distributions GNU/Linux ici.

Les trois distributions les plus utilisées sont : Ubuntu (environ 45% des serveurs), CentOS (environ 18%) et Debian (environ 18% également).

La distribution payante la plus utilisée est Red Hat Enterprise Linux (REHL) qui représenterait environ 2% des serveurs.

La distribution Debian

Debian est le projet principal avec plus de 500 millions de lignes de code. Oui, vous avez bien lu, cela représente un effort humain titanesque pour arriver à un système stable, performant et sécurisé.

La distribution Debian est une distribution non commerciale car elle est éditée par une organisation à but non lucratif et les choix sont donc effectués par des comités de contributeurs bénévoles.

Le nom est issu de la contraction de Debra, la femme du créateur, et Ian (prénom du créateur Ian Murdock). Ce projet a débuté en 1993 et se poursuit très activement encore aujourd’hui.

Nous utiliserons plusieurs librairies de cette distribution (par l’intermédiaire d’Ubuntu), comme par exemple le célèbre gestionnaire de paquets APT (advanced packaging tool).

La distribution Debian actuelle contient environ 60 000 logiciels avec par exemple Linux, apt, python, nginx, GNOME, LibreOffice.

La distribution Ubuntu

Ubuntu 20.04 Focal Fossa.


La distribution Ubuntu, comme la distribution Linux Mint sont des sous-distributions issues de Debian.

Il s’agit de la distribution la plus utilisée aussi bien pour les serveurs que pour les ordinateurs de bureau.

Il s’agit d’une distribution dite commerciale, car elle est distribuée par la société Canonical qui vend des licences pour des versions entreprises et surtout du support.

Son développement a débuté en 2006 et est toujours très actif aujourd’hui.

Ubuntu vient de la culture africaine (Canonical est une société d’Afrique du Sud). C’est un terme qui signifie humanité ou générosité.

Ubuntu est réputé plus simple et plus facile pour les débutants, Debian est réputé pour être plus sécurisé et plus performant. C’est l’une des distributions les plus utilisées en entreprise avec CentOS et Fedora.

Conclusion

Maintenant vous avez une vision claire de l’environnement : lorsque vous utilisez par exemple Ubuntu en version bureau, vous utilisez en réalité plusieurs milliers de projets libres (ou a minima open source) regroupant plus d’un milliard de lignes de code.