Unikernels : MirageOS vs. OSv

Intéressant, pas d’exemple

En quoi les unikernels diffèrent-t-ils des noyaux de systèmes d’exploitation
traditionnels ? Quel impact a l’adoption d’un unikernel sur l’application à
déployer sur celui-ci ? En particulier, quel impact de Mirage OS ? Et d’OSv ?

API Graphiques : OpenGL vs. Direct3D 12+ et Vulkan

Déjà pris

Quel est le rôle d’une API graphique comme DirectX, OpenGL ou Vulkan ?
Pourquoi dit-on que DirectX 12+ et Vulkan sont des API de bas niveau ? Quel
est l’impact sur la programmation graphique ? Quelle différence avec Direct3D
11- et OpenGL ? Quels facteurs ont motivé cette évolution des API ? Quels en
sont les avantages et les inconvénients ?

POO : nominal (Java) vs. structurel (OCaml) vs. prototype (JavaScript)

Intéressant, exemple disponible, déjà pris

Qu’est-ce qui distingue la programmation orientée objet avec classes de celle
avec prototypes ? Dans un langage à classe comme Java, qu’est-ce que le
typage nominal ? Même question pour le typage structurel en OCaml. Quels
sont les avantages et inconvénients de ces trois disciplines ? Quels exemples
d’utilisation de l’un ou l’autre dans un logiciel réel ? A-t-on vu des
évolutions récentes en la matière ?

Langages pour la JVM : Kotlin vs. Scala

Déjà pris, exemple disponible

Quelle est l’histoire de la /Java Virtual Machine/ ? Quelles sont ses
caractéristiques techniques essentielles ? Pourquoi a-t-on vu l’essor
d’alternatives à Java ces quinze dernières années ? Quels sont les points
communs de Kotlin et Scala ? Leurs différences ? Peut-on identifier des
points forts ou faibles pour chaque langage ?

Tests unitaires (JUnit) vs. à base de propriétés (QuickCheck) vs. par comparaison (Monolith)

Déjà pris

Qu’est-ce qui distingue ces techniques de test ? Ont-elles des domaines
d’application qui les favorise préféremment ? Quels exemples illustrent mieux
leurs forces et leurs faiblesses respectives ?

Envoi de message : Go vs. Erlang vs. Akka

Pourquoi trouve-t-on des primitives d’envoi de message dans beaucoup de
langages ou bibliothèques dédiées à la programmation d’applications réparties
? À quel point ces primitives sont-elles similaires ? Qu’est-ce qui les
différencie, le cas échéant ? Comment sont-elles implémentées dans les trois
technologies en question ?

Effets dans les langages fonctionnels : OCaml vs. Haskell vs. Koka

Déjà pris

Qu’est-ce qu’un effet de bord ? Qu’est-ce qui distingue le traitement des
effets de bord dans les trois langages cités ? Pourquoi cherche-t-on à
contrôler les effets de bords dans certains de ces langages, et comment ?
Comment illustrer simplement la différence entre les solutions retenues ?

Virtualisation : QEMU vs. Firecracker

Quelle est l’architecture logicielle de chacune de ces deux solutions de
virtualisation ? QEMU et Firecracker reposent-ils sur les mêmes techniques
pour virtualiser un jeu d’instruction ? Comment est-ce que leurs choix
techniques favorisent ou au contraire découragent certaines utilisations ?

Programmation modulaire : modules (ML/OCaml) vs. traits (Scala)

Exemple disponible

Que désigne-t-on par le terme /programming in the large/ ? Comment le système
de modules d’OCaml ou le système de traits de Scala peuvent aider en la
matière ? Peut-on facilement illustrer les forces et faiblesses de chacun ?
Quels programmes réels les utilisent, et comment ?

Métaprogrammation : OCaml PPX vs. MetaOCaml

Intéressant, exemple disponible, déjà pris

Pour quel genre de tâche utiliser les PPX ? Et MetaOCaml ? Y a-t-il des
tâches qui se prêtent aux deux technologies ?

Programmation objet pour les GUI : Gtkmm/C++ vs. lablgtk/OCaml

Déjà pris

Pourquoi les bibliothèques de /widgets/ graphiques sont-elles presque
toujours des bibliothèques objets ? Que se passe-t-il lorsqu’on doit
interfacer des modèles objets différents, comme ici GObject, le modèle C++ et
le modèle OCaml ? Comment est-ce que cela influe sur l’utilisation de la
bibliothèque en C++ et en OCaml ? Les solutions adoptées semblent-elles
simples ou complexes du point de vue de l’utilisateur ? Et du mainteneur de
la bibliothèque ?

Programmation événementielle pour les GUI : Gtkmm vs. Qt

Déjà pris

Qu’est-ce que la programmation événementielle ? Pourquoi les bibliothèques de
GUI reposent sur cette approche ? Quelles sont les similarités et les
différences des systèmes d’événements employés en C++ par les bibliothèques
Gtk (sous la forme du binding Gtkmm) et Qt ? Quels avantages et inconvénients
en termes de facilité d’utilisation, performance, génie logiciel, etc. ?

Gestion mémoire : manuelle (p. ex. C), GC traçant (Java, OCaml…), basée sur RAII/borrowing (Rust)

Intéressant, exemple disponible

Quels sont les inconvénients des différentes solutions en termes de sûreté et
productivité des développeurs ? De performance ? Peut-on estimer la
complexité des implémentations de ces différentes solutions ?

Calcul parallèle : OpenMP vs. Cilk

Déjà pris, exemple disponible

Qu’est-ce qu’un programme parallèle, par opposition à concurrent ? Dans quels
domaines d’application ces programmes interviennent-ils ? Comment ces deux
solutions se distinguent à l’usage ?

Implémentation Java : compilateur GraalVM vs. JIT HotSpot

Exemple disponible

Qu’appele-t-on un compilateur “en avance” (/ahead of time/) dans le monde
Java ? Pourquoi un mot spécifique ? Et un compilateur “juste à temps” ? Quels
avantages et inconvénients en termes de performance et génie logiciel ?
Quelles difficultés spécifiques rencontrées lors de la compilation d’un
programme Java peuvent influer sur le choix de l’une ou l’autre technologie ?

Extensibilité linguistique : CPP vs. décorateurs Python vs. OCaml PPX

Déjà pris

Quand a-t-on besoin des systèmes cités ? Quels exemples d’utilisation dans
des programmes réels ? Comment ces solutions se distinguent-elles en termes
de flexibilité ? De coût à l’exécution ? À la compilation ?

Shells : Bash vs. Zsh vs. Fish

Intéressant, exemple disponible, déjà pris

Qu’est-ce qu’un shell ? Quels sont les pièges de la programmation shell
traditionnelle ? Que font les projets cités pour améliorer la robustesse de
la programmation shell ?

Programmation web backend : Node vs. Spring

Déjà pris

Comment se distinguent ces deux solutions du point de vue de l’utilisateur ?
Et du développeur du framework ? Ont-elles des domaines d’application où
elles sont particulièrement populaires pour des raisons techniques ?

Utilisation du compilateur LLVM : GHC vs. Clang

Intéressant, exemple disponible, déjà pris

Qu’est-ce qu’un “dorsal” (/backend/) de compilateur ? Comment le projet LLVM
fournit-il un tel composant ? Comment est-il utilisé dans les compilateurs
GHC (Haskell) et Clang (C, C++, Objective-C) ? Existe-t-il des alternatives ?

Isolation des moteurs JavaScript : Firefox vs. Chromium

Intéressant, exemple disponible, Déjà pris

De quoi isole-t-on le moteur JavaScript d’un navigateur ? Pourquoi ? Comment
est-ce réalisé dans Chromium ? Dans Firefox ? Éventuellement dans d’autres
navigateurs ? Pouvez-vous décrire les solutions employées dans le code de
chacun de ces navigateurs ?

Web client : HTML/CSS/JS avec ou sans bibliothèques JS modernes (Vue/React/…)

Déjà pris

Programmation iOS : Flutter vs. React Native vs. Swift

Exemple disponible, déjà pris

Focus : le parallélisme à mémoire partagée en OCaml 5

Déjà pris

Intérêt ? Difficultés dans un langage comme OCaml ?

Focus : les implémentations formellement vérifiées de TLS

Intérêt ? Inconvénients pour les développeurs de ces outils ? Comment ça
marche d’un point de vue génie logiciel ?

Programmer du code numérique, C++ vs. Fortran

Exemple disponible, déjà pris

Qu’appelle-t-on “code numérique” ? Fortran, premier langage de programmation
“de haut niveau” de l’histoire, a-t-il encore un intérêt dans ce domaine ? Si
oui, pourquoi ? À quoi ressemble un code numérique réel simple ?

Langages cibles pour le web : générer du webasm ou du JavaScript ?

Exemple disponible

Plusieurs langages choisissent de générer directement du JavaScript, comme
TypeScript et OCaml (via js_of_ocaml). Une alternative est de générer du
webassembly. Pourquoi choisir l’un ou l’autre ?

Filtrage dépendant : à la Coq / Agda

Intéressant, exemple disponible

En quoi la construction de filtrage (/match/) de langages comme Coq et Agda
diffère-t-elle de celle présente en OCaml, Rust ou Haskell ? En quoi
améliore-t-elle l’expressivité du langage, au prix d’un système de types
rendu beaucoup plus complexe ? Quelles sont les différences d’approche entre
Coq et Agda en la matière ?

Focus : preuve de programme genéraliste en SPARK Ada

Qu’est-ce que la variante SPARK du langage Ada ? Pourquoi l’utiliser ? Quels
programmes l’utilisent ? Pour quel genre de programme peut-on l’exploiter ?

APIs webs : REST vs. GraphQL vs. SOAP

Déjà pris, exemple disponible

Programmation iOS : Flutter vs. React Native vs. Swift

Déjà pris

Focus : Rust dans le noyau Linux

Intéressant, exemple disponible

Quel est l’intérêt ? Quels problèmes spécifiques a-t-il fallu résoudre pour
permettre le développement Rust dans le noyau Linux ? S’agit-il de
modifications importantes à l’infrastructure du noyau ? Peut-on développer
n’importe quelle partie du noyau en Rust, ou bien y a-t-il des secteurs
privilégiés ? Si oui, lesquels ?

Focus : récursion terminale sur la JVM et en JavaScript

Exemple disponible

Pourquoi la compilation des langages fonctionnels repose-t-elle sur
l’implémentation correcte des appels terminaux ? Et qu’est-ce qu’une
implémentation correcte, d’ailleurs ? Qu’est-ce qui pose problème avec la JVM
ou JavaScript ? Quelles sont les solutions disponibles ? Sont-elles
satisfaisantes ?

Configuration : Puppet vs. Chef

Exemple disponible, déjà pris

Quel est le modèle d’utilisation de ces outils ? Comment sont-ils implémentés
? Quels sont les avantages et inconvénients de ces approches ?

Distributions Linux déclaratives : NixOS vs. GUIX

Intéressant, exemple disponible

Pourquoi ces distributions sont-elles dites “déclaratives” ? Qu’est-ce qui
différencie NixOS et GUIX ?

Exécutables portables sous Linux : Flatpak vs. Snap

Intéressant

Comment ces technologies fonctionnent-elles ? Comment les utilise-t-on en
tant que développeur ? Comment se comparent-elles à d’autres approches pour
produire des binaires portables, notamment celle du compilateur Go ?

Libc : glibc vs. musl

Intéressant, exemple disponible

Compatibilité, tailles, sécurité, communautés, etc. ?

Authentification fédérée : OAuth2 vs OpenID Connect vs SAML

Intéressant

Pourquoi ces standards ont-ils émergé ? Quels usages pour chacun et quels sont leurs défis ?

Approches “Serverless” : AWS Lambda vs Google Cloud Functions vs Azure Functions

Déjà pris

Quels avantages les architectures serverless apportent-elles ? Comment se distinguent ces plateformes cloud majeures ?

Frameworks front-end : React vs Vue.js vs Angular

Déjà pris

Que signifie l’injection de dépendances ? Qu’est-ce qu’un DOM virtuel ? Qu’est-ce que le data binding bi-directionnel ?

Bases de données SQL vs NoSQL : cas d’usage et limitations.

Déjà pris

L’inférence de types.

Quels liens avec la surcharge et les classes de types, les objets ?
Auto en C++, typescript, Haskell, Ocaml.

Comment on programme un démon UNIX moderne en terme de sécurité

En exploitant les technologies modernes (systemd, cgroups…).

Builds reproductibles : diffoscope vs … Référence

Reflections on Trusting Trust/ de Ken Thompson.

Bootstrap du compilateur OCaml vs. GHC + lien vers le bootstrap

Cf. exposé de N. Courant prévu au meeting OUPS 8 déc (Camlboot: debootstraping the OCaml compiler)

Pourquoi est-ce que des langages antiques comme Fortran, Cobol, Lisp sont encore très utilisés ?

Est-ce plus que du conservatisme ?