{"id":3624,"date":"2026-05-28T11:23:09","date_gmt":"2026-05-28T10:23:09","guid":{"rendered":"https:\/\/www.alpesjug.fr\/?p=3624"},"modified":"2026-05-28T12:11:59","modified_gmt":"2026-05-28T11:11:59","slug":"opendst-determinisme-au-service-du-test-distribue-mardi-9-juin-2026-19h","status":"publish","type":"post","link":"https:\/\/www.alpesjug.fr\/?p=3624","title":{"rendered":"OpenDST : d\u00e9terminisme au service du test de syst\u00e8mes distribu\u00e9s &#8211; Mardi 9 Juin 2026, 19h"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2026\/05\/WhatsApp-Image-2026-05-27-at-19.35.11-1024x572.jpeg\" alt=\"\" class=\"wp-image-3625\" srcset=\"https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2026\/05\/WhatsApp-Image-2026-05-27-at-19.35.11-1024x572.jpeg 1024w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2026\/05\/WhatsApp-Image-2026-05-27-at-19.35.11-300x167.jpeg 300w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2026\/05\/WhatsApp-Image-2026-05-27-at-19.35.11-768x429.jpeg 768w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2026\/05\/WhatsApp-Image-2026-05-27-at-19.35.11.jpeg 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">La conf\u00e9rence<\/h2>\n\n\n\n<p>Tout dev Java a d\u00e9j\u00e0 crois\u00e9 ce bug : il appara\u00eet en CI une fois sur cinquante, jamais en local, on n&rsquo;arrive pas \u00e0 le rejouer (sauf en prod, a\u00efe). Race condition ? Timeout r\u00e9seau bizarre ? Ordre de threads improbable ? On ne saura sans doute jamais \u2014 on relance le job, on esp\u00e8re, on passe \u00e0 autre chose.<br>Le Deterministic Simulation Testing (DST), n\u00e9 chez FoundationDB et popularis\u00e9 par TigerBeetle et Antithesis, propose une approche radicale : on rend le programme totalement d\u00e9terministe. Horloge, ordonnanceur, RNG, sockets \u2014 tout passe par un simulateur pilot\u00e9 par une seed. Le m\u00eame bug, \u00e0 la m\u00eame seed, se reproduit \u00e0 l&rsquo;identique. Ind\u00e9finiment. On peut enfin debugger ce qu&rsquo;on ne voyait que par accident.<br>Le DST est longtemps rest\u00e9 l&rsquo;apanage de Rust et Zig. OpenDST apporte la technique \u00e0 la JVM, sans toucher au code applicatif. Un agent Java intercepte les appels JDK (Thread, System.nanoTime, Socket, SecureRandom\u2026) gr\u00e2ce \u00e0 la ClassFile API (JEP 484), et redirige tout vers un simulateur b\u00e2ti sur les Virtual Threads.<\/p>\n\n\n\n<p>Au programme :<br>&#8211; pourquoi nos tests d&rsquo;int\u00e9gration laissent passer les bugs structurels,<br>&#8211; comment rendre une JVM d\u00e9terministe avec les apports r\u00e9cents du JDK (Virtual Threads, ClassFile API, &#8211;patch-module),<br>&#8211; une d\u00e9mo live<br>&#8211; ce qui marche, ce qui r\u00e9siste encore, et ce que vous pouvez essayer d\u00e8s demain \u2014 le projet est open-source (Apache 2.0).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le conf\u00e9rencier : Yannick Lecaillez<\/h2>\n\n\n\n<p>Yannick Lecaillez est ing\u00e9nieur logiciel chez Ping Identity, bas\u00e9 \u00e0 Grenoble. Il s&rsquo;int\u00e9resse depuis longtemps \u00e0 ce qui rend un syst\u00e8me distribu\u00e9 correct plut\u00f4t que simplement rapide \u2014 m\u00e9thodes formelles, swarm testing, et plus r\u00e9cemment Deterministic Simulation Testing. Inspir\u00e9 par FoundationDB, TigerBeetle et Antithesis, il a lanc\u00e9 en 2026 OpenDST, un framework open-source qui apporte le DST \u00e0 l&rsquo;\u00e9cosyst\u00e8me Java. Batteur le reste du temps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Inscription<\/h2>\n\n\n\n<p>Les inscriptions se font sur Meetup:&nbsp;<a href=\"https:\/\/www.meetup.com\/alpesjug\/events\/314979351\/?utm_medium=referral&amp;utm_campaign=share-btn_savedevents_share_modal&amp;utm_source=link&amp;utm_version=v2&amp;member_id=8930288\">https:\/\/www.meetup.com\/alpesjug\/events\/314979351<\/a><\/p>\n\n\n\n<p>Attention, nous nous r\u00e9unirons chez&nbsp;<a href=\"https:\/\/www.google.com\/maps\/place\/Salesforce\/@45.2030902,5.7696478,15z\/data=!4m5!3m4!1s0x0:0x49d5ff5337d1785!8m2!3d45.2030797!4d5.7694228\" target=\"_blank\" rel=\"noreferrer noopener\">SalesForce, 29 Bd des Alpes, 38240 Meylan<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La conf\u00e9rence Tout dev Java a d\u00e9j\u00e0 crois\u00e9 ce bug : il appara\u00eet en CI une fois sur cinquante, jamais en local, on n&rsquo;arrive pas \u00e0 le rejouer (sauf en prod, a\u00efe). Race condition&#46;&#46;&#46;<\/p>\n","protected":false},"author":6,"featured_media":3625,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[370,526,368,4,493,53,11,524],"class_list":["post-3624","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe","tag-code","tag-dst","tag-java","tag-jug","tag-jvm","tag-opensource","tag-soiree","tag-systemes-distribues"],"_links":{"self":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/3624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3624"}],"version-history":[{"count":3,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/3624\/revisions"}],"predecessor-version":[{"id":3628,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/3624\/revisions\/3628"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/media\/3625"}],"wp:attachment":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}