Il n'y a rien de mieux que le langage de programmation C pour le développement de systèmes d'exploitation
D'après Linus Torvalds

Le , par Patrick Ruiz

154PARTAGES

10  1 
La déclaration est de Linus Torvalds – le créateur du système d’exploitation open source Linux – lors d’une de ses interventions à l’Intel Open source Technology Center en 2012. Il répondait à la question de savoir s’il voit un autre langage de programmation à part le C qui soit taillé sur mesure pour le développement de systèmes d’exploitation. Quelques extraits de sa réponse …

Citation Envoyé par Linus Torvalds
Je dois dire que je suis assez vieux jeu sur des sujets comme celui-là. La raison pour laquelle je me suis lancé dans Linux et les systèmes d’exploitation en général est que j’aime vraiment le hardware ; j’aime explorer l’aspect matériel. Je ne le dis pas pour souligner que je suis un expert en hard parce que me tendre un fer à souder serait une mauvaise idée. Ce que je veux dire c’est que j’aime interagir avec le matériel à partir du logiciel. Vu sous cet angle, je n’ai pas encore vu un langage de programmation qui approche seulement le langage C. Cette affirmation ne tient pas uniquement à ce que le C soit utile pour générer du bon code pour piloter le matériel. Ce qu’il faut dire en plus c’est que l’usage du C fait sens pour des personnes qui pensent comme un ordinateur. Je crois que la raison pour laquelle il en est ainsi est que les personnes qui ont conçu le langage C l’ont fait à un moment où les compilateurs devaient être simples ; à un moment où le langage devait être adapté à la sortie ou au résultat attendu. Donc lorsque je lis du code en langage C, je sais à quoi va ressembler le code assembleur et c’est ce qui m’intéresse.
Certes, la déclaration de Linus Torvalds date, mais 7 années plus tard, des avis récoltés sur la toile lui donnent un coup de neuf.

Citation Envoyé par un internaute
Le C est à bien des égards un langage ingénieux. C'est une très bonne abstraction du matériel sous-jacent. Assez transparent pour "voir" ce qui se passe à un niveau inférieur et juste assez haut niveau pour fournir quelques constructions utiles et éviter la peine de faire usage de l'assembleur.

Bon nombre de ses "défauts" sont en fait la conséquence directe de cette conception. Si vous comprenez le processeur et la mémoire, vous trouverez le C naturel. D'autres langages qui sont vantés comme modernes, plus faciles et tout le reste, font tellement abstraction de l'aspect matériel qu'une grande partie du contrôle fin est perdue. C'est un compromis.

C a certainement des défauts. Il porte en lui un héritage dont il est difficile de se débarrasser, mais la façon dont il garde le programmeur près du matériel n'est pas un défaut, c'est une caractéristique dont il faut dire qu'elle est de plus en plus difficile à trouver.

La sortie de Linus Torvalds est antérieure à la publication de la première version stable de Rust – l’un des langages de programmation pressentis comme remplaçant du C sur le terrain du contrôle du hardware. En fait, au moment où Linus s’exprime, Rust n’en est qu’au stade de l’enfance.

Citation Envoyé par un internaute
De nos jours, Rust est une véritable alternative et offre des caractéristiques qui le rendent tout simplement plus polyvalent. Nous avons d'abord besoin d'un code sûr et donner des garanties de sécurité élevées est l'un des aspects les plus importants d'un système d'exploitation ou d'un programme. Je suis absolument sûr que quelque chose de similaire à Rust sera utilisé pour écrire le système d'exploitation qui remplacera Linux sur le long terme.
Ce qu’il faut en effet souligner à propos de Rust est que le langage garde une vision proche de la machine. Il est clairement prévu pour être utilisable pour des applications de très bas niveau comme un noyau, des pilotes de périphériques ou de l'embarqué temps réel. Il permet aussi d'éviter certains points complexes du C++, mais n'est pas aussi radical. Il s’appuie pour cela sur des génériques et un système de macros plus propre que celui de C++. Il est par contre plus complexe sur un point particulier : il surveille à la compilation la durée de chaque variable ; il vient qu'une utilisation des pointeurs qu'il ne peut garantir sûre refusera de compiler. Pour éviter cela le développeur doit bien assimiler les notions de propriété et de durée de vie d'un pointeur qui permettent de garantir que le code est sûr. Cela permet d'avoir une garantie absolue qu'il n'y aura aucune erreur de sécurité mémoire.

Dans la liste des systèmes d’exploitation créés à partir de Rust on compte Redox. L’équipe de développeurs derrière cet OS le présente comme un « système d’exploitation open source qui vise l’intégration des innovations au sein de Rust à un microkernel et un ensemble complet d’applications. » Le système d’exploitation est publié sous licence MIT.

Le GUI Orbital sous Redox


De façon générale, l’intervention de Linus Torvalds relance le débat sur la question de savoir quel langage pourrait remplacer le C. Il y a 4 ans, l’architecte logiciel Andrei Alexandrescu a dressé un comparatif de Go, Rust et D. De façon brossée, il en resssortait que pour ses caractéristiques d’introspection statique, son temps de compilation rapide ajouté à d’autres atouts uniques, le langage D est le remplaçant idéal du C.

Sources : YouTube, Redox

Et vous ?

Que pensez-vous de la déclaration de Linus Torvalds ?

Depuis 2012, quel langage de programmation s’est d’après vous positionné en véritable remplaçant du C ?

Pourquoi le langage C pourrait encore avoir de longues années devant lui ?

Voir aussi :

Programmation : un « Pony » peut cacher un langage, l'outil adéquat, d'avis d'utilisateurs, pour le développement d'applications concurrentes

C2 : un langage qui se présente comme une évolution de C, plus rapide, sans fichiers d'en-tête, avec système de build intégré et d'autres changements

Quel avenir pour le langage C ? Un développeur expérimenté fait ses adieux au langage et livre ses inquiétudes quant à son avenir

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de KsassPeuk
Membre confirmé https://www.developpez.com
Le 25/03/2019 à 13:18
Le gros soucis ça reste qu'atteindre un haut niveau de fiabilité dans un composant aussi critique d'un OS nécessite un boulot de dingue. Et à l'échelle d'un truc qui fait plusieurs millions de lignes de code, c'est juste infaisable d'obtenir des vraies garanties de fiabilité avec un effort raisonnable. Et C est définitivement l'un des langages où c'est le plus difficile. Ce n'est pas parce qu'un langage est de plus haut niveau que nécessairement il occulte tous les détails de bas niveau (et on pourrait aussi arguer que C occulte lui aussi énormément de détails selon comment on l'utilise). Mais si on prend des retours d'expérience comme HACL* (F-Star) ou Pip protokernel (Coq), on peut voir que l'utilisation d'un langage de haut niveau n'implique pas de cacher les détails nécessaires au bas niveau, simplement de devoir effectivement les prendre complètement en compte et pas juste de tester un ensemble restreint de scénarios.
Avatar de redcurve
Membre confirmé https://www.developpez.com
Le 25/03/2019 à 17:08
Le top reste le combo C/C++/C#, j'arrive la lire de l'object-c sans problème mais je n'aime pas trop la syntaxe quoique le délire de considérer que tout est un dictionnaire est assez funky
Avatar de KsassPeuk
Membre confirmé https://www.developpez.com
Le 25/03/2019 à 17:21
Citation Envoyé par redcurve Voir le message
Le top reste le combo C/C++/C#
Ça dépend des objectifs, encore une fois. Faire du code sûr en C, c'est pas simple. Il y a qu'à voir comment des projets comme seL4 en ont chié pour arrivé à un niveau EAL7 de sûreté (25 personnes-année pour 10K lignes de C - sachant que c'est la preuve qui a été hardcore, pas le process de certif en lui même). Et honnêtement, pour des composants aussi critiques qu'un OS, avoir des vraies garanties de sécurité et sûreté, ça serait pas un mal.
Avatar de hotcryx
Membre extrêmement actif https://www.developpez.com
Le 25/03/2019 à 17:25
Je me demande si à l'époque de Torvalds, il y avait des pattern de programmation comme actuellement.

Bien découper le code ça aide
Avatar de SimonDecoline
Membre émérite https://www.developpez.com
Le 25/03/2019 à 21:14
Citation Envoyé par hotcryx Voir le message
Je me demande si à l'époque de Torvalds, il y avait des pattern de programmation comme actuellement.

Bien découper le code ça aide
Non non. A l'époque de Torvalds (paix à son âme), on faisait marcher un chaton sur le clavier et quand ça compilait on sortait une nouvelle release. https://en.wikipedia.org/wiki/Design_Patterns
Avatar de Se7h22
Membre actif https://www.developpez.com
Le 25/03/2019 à 21:36
Citation Envoyé par Patrick Ruiz Voir le message
La déclaration est de Linus Torvalds – le créateur du système d’exploitation open source Linux – […]
Pour rappel, Linus Torvalds est le créateur du noyau Linux, et non du système d'exploitation GNU/Linux ;-)

Sinon, je n'ai pas vraiment d'avis sur la question, même si j'imagine qu'il a plus ou moins raison vu que le langage C à fait ses preuves, je pense. Mais il n'est pas inimaginable qu'il soit remplacé un jour pour réaliser des systèmes d'exploitation.
Avatar de kilroyFR
Membre éclairé https://www.developpez.com
Le 25/03/2019 à 23:41
Personnellement en 30 ans de dev, j'ai toujours decoupé mes softs en couches (regle d'or) et jamais eu aucun probleme de conception, quel que soit le langage.
Le principe des micros services on en faisait deja a l'epoque sous Linux - c'etait meme un principe elementaire, combiner des applications/utiltaires faisant individuellement des choses tres simples. Tu peux batir un OS avec ce simple principe.
Alors oui on a inventé C# parce que C/C++ etait considéré comme trop compliqué (oui avoir de la rigueur c'est pas donné a tout le monde). Du coup maintenant on code en C# sans se poser des questions (sauf que nombre de devs ne comprennent meme plus pourquoi des fois y a des problemes de GC et autres). C# a permis de democratiser la programmation et mettre le C au niveau du visual basic - n'importe qui peut faire du C#, c'est sa force.
C'est la base de tout. Les patterns on les suivait sans le savoir; tout comme je me rends compte qu'on a toujours ete agile dans les devs. Cycle en vie etant plus theorique car dans la pratique c'etait une forme d'agilité qui prevalait.
Avatar de Médinoc
Expert éminent sénior https://www.developpez.com
Le 26/03/2019 à 17:03
Pour un truc bas niveau comme ça, je tendrais à privilégier le C++, qui permet de descendre exactement à aussi bas niveau que le C quand on en a besoin, avec l'ajout de la sécurité sur la manipulation des ressources.
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 28/03/2019 à 20:55
Je reste septique sur l'utilisation d'autre chose que le C pour un OS, (du moins pour le noyau et les pilotes). L'intérêt qu'autre chose que le C reste à prouver.
Avatar de SimonDecoline
Membre émérite https://www.developpez.com
Le 28/03/2019 à 22:24
Citation Envoyé par chrtophe Voir le message
Je reste septique sur l'utilisation d'autre chose que le C pour un OS, (du moins pour le noyau et les pilotes). L'intérêt qu'autre chose que le C reste à prouver.
Entre les bugs de gestion mémoire ou de concurrence, les failles de sécurité à la buffer overflow et autres, les codes inmaintenables, etc, l'intérêt du C reste également à prouver.

Concernant les alternatives au C, Rust semble quand même avoir des vrais intérêts.
https://www.rust-lang.org/what/embedded
https://www.redox-os.org/
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web