Programmation système sous linux et windows
Ref: 2EL6040
Description
Cet électif fait partie du parcours InfoSec, mais est pour autant accessible à tout étudiant de deuxième année le souhaitant.
Le langage C reste un des langages les plus utilisés pour programmer des applications dans les couches basses du logiciel telles que des systèmes d'exploitation ou des applications proches de celui-ci. En particulier, il est encore très largement utilisé pour programmer les services tournant en tâche de fond dans les systèmes GNU/Linux et Microsoft Windows (serveurs Web, serveurs de bases de données, serveur de messagerie électronique, serveurs de fichiers, etc). Bien que de conception très ancienne (années 70), cet état de fait s’explique par les performances inégalées des programmes écrits dans ce langage grâce aux progrès constants des chaînes de compilation disponibles actuellement. Les inconvénients d’écrire dans un langage peu abstrait sont donc (partiellement) compensés par des performances quasiment optimales au prix d’un effort substantiel lors de la mise au point des programmes.
Ce cours s’adresse donc à des étudiants désireux d’approfondir leur pratique de la programmation au travers de l’apprentissage du langage C, en écrivant des applications proches du système d’exploitation en utilisant les interfaces standards d’un système Unix (norme POSIX, gestion des entrées-sorties, communications interprocessus, programmation multiprocessus et multithreads, gestion des signaux systèmes, déverminage et mise au point d’une application) et leurs équivalents pour l’API Win32/Win64 de Microsoft Windows.
Ce cours sera aussi l’occasion de se rendre compte des difficultés inhérentes à la programmation en langage C (notamment la gestion explicite de la mémoire et les conséquences de choix de conception discutables sur l’implémentation des tableaux et des chaînes de caractères) et des problèmes de fiabilité et de sécurité qu’elles engendrent.
Nous profiterons de cette expérience pour introduire un nouveau langage de programmation (Rust) qui permet de garantir à la fois plus de sécurité et de fiabilité par la conception même du langage (qui fait usage des derniers progrès en matière de système de typage) et qui dans le même temps permet d’obtenir les mêmes performances qu’un programme écrit en langage C. À notre connaissance, c’est la première fois que cette synthèse est assurée par un langage de programmation (les autres tentatives butant toujours sur soit des problèmes de performances à l’exécution, soit des erreurs durant le fonctionnement aboutissant généralement à des mises en défaut de la sécurité de l’application pouvant se répercuter sur celle de la plateforme qui l’exécute). Le langage Rust est déjà actuellement utilisé par les équipes de Mozilla pour refondre entièrement le code de leur navigateur Web Firefox.
L’électif permettra aux étudiants de mettre en pratique les connaissances acquises au cours de travaux de laboratoires, qui consisteront en la programmation de services systèmes sous Unix et Windows en C.
Numéro de trimestre
SG8
Prérequis
Systèmes d'information et programmation, Algorithmique & Complexité, réalisation préalable d’un projet de développement logiciel (1A)
Syllabus
Part 1 : Le langage C
Part 2 : The Rust language
Part 3 : APIs Système Unix et Windows, standard POSIX
Composition du cours
50% cours magistraux, 50% TP, mini-projet
Notation
Examen Final (présentation orale du projet): 33%
Examen de la réalisation: 33%
TP noté: 33%
Ressources
Un environnement Linux et Windows
Résultats de l'apprentissage couverts par le cours
Créer des programmes efficaces en C et Rust sur les plateformes Linux et Windows.
Sélectionner et utiliser les fonctions du noyau d'un système d'exploitation et ses API.
Description des compétences acquises à la fin du cours
C2 Thoroughly master a domain or discipline based on the fundamental sciences or the engineering sciences.
C6 Conceive of, design, implement and authenticate complex software.
C7 Convince
Support de cours, bibliographie
- Le langage C - 2e édition - Norme ANSI (August 20, 2014) , Brian W. Kernighan and Dennis M. Ritchie.
- The Rust Programming Language, May 2018, Steve Klabnik and Carol Nichols.
- Programming Rust (August 2016), Jim Blandy.
- La norme POSIX.
- Windows System Programming, (4th Edition) (Addison-Wesley Microsoft Technology) by Johnson M. Hart (2015-10-01).