A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>TousAntiCovid : vu depuis Codeureuses en Liberté (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Is that even respected? Retrospectively? What a shAItshow…
  28. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  29. <meta name="robots" content="noai, noimageai">
  30. <!-- Documented, feel free to shoot an email. -->
  31. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  32. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  36. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  37. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  38. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  39. <script>
  40. function toggleTheme(themeName) {
  41. document.documentElement.classList.toggle(
  42. 'forced-dark',
  43. themeName === 'dark'
  44. )
  45. document.documentElement.classList.toggle(
  46. 'forced-light',
  47. themeName === 'light'
  48. )
  49. }
  50. const selectedTheme = localStorage.getItem('theme')
  51. if (selectedTheme !== 'undefined') {
  52. toggleTheme(selectedTheme)
  53. }
  54. </script>
  55. <meta name="robots" content="noindex, nofollow">
  56. <meta content="origin-when-cross-origin" name="referrer">
  57. <!-- Canonical URL for SEO purposes -->
  58. <link rel="canonical" href="https://www.codeursenliberte.fr/blog/tous_anti_covid/">
  59. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  60. <article>
  61. <header>
  62. <h1>TousAntiCovid : vu depuis Codeureuses en Liberté</h1>
  63. </header>
  64. <nav>
  65. <p class="center">
  66. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  68. </svg> Accueil</a> •
  69. <a href="https://www.codeursenliberte.fr/blog/tous_anti_covid/" title="Lien vers le contenu original">Source originale</a>
  70. <br>
  71. Mis en cache le 2024-02-22
  72. </p>
  73. </nav>
  74. <hr>
  75. <p>TousAntiCovid a refait récemment l’<a href="https://www.huffingtonpost.fr/justice/article/application-stopcovid-la-justice-enquete-sur-des-soupcons-de-favoritisme_181078.html">actualité</a> sur les montants de l’hébergement et les modalités d’attribution du marché. À l’époque, Codeureuses en Liberté avait été approchée pour envisager la réalisation de cette application. On vous livre ici nos reflexions de l’époque.</p>
  76. <p>Au début de l’épidémie de covid-19, il y a eu la croyance qu’une solution informatique pourrait être utile pour atténuer l’engorgement des hôpitaux grace au <a href="https://fr.wikipedia.org/wiki/Recherche_des_contacts">contact tracing (recherche de contacts)</a>. L’état français a donc voulu une application qui deviendrait <a href="https://fr.wikipedia.org/wiki/TousAntiCovid">TousAntiCovid</a> (initialement <em>StopCovid</em>).</p>
  77. <p>En 2020, Codeureuses en Liberté est co-attributaire<sup id="fnref:1"></sup> d’un contrat cadre avec la <a href="https://www.numerique.gouv.fr/dinum/">Direction interministérielle du numérique (DINUM)</a><sup id="fnref:2"></sup>. Dans ce cadre, nous étions souvent intermédiaires d’autres indépendant·e·s qui intervenaient sur des <a href="https://beta.gouv.fr/startups/">startup d’état</a> de <em>beta.gouv.fr</em><sup id="fnref:3"></sup>.</p>
  78. <p>Le 11 avril 2020, la DINUM nous contacte et s’ensuivent des discussions sur notre messagerie :</p>
  79. <blockquote>
  80. <p><cite>Tristram</cite><br>
  81. Question assez importante : [notre contact à beta] demande quelle serait notre position sur porter les développement de l’app stop covid.<br>
  82. À première vue, j’ai du mal à me convaincre qu’on obtiendra des garanties suffisantes sur le respect de la vie privée, de l’autre c’est peut-être l’occasion de forcer (dans le devis, vis-à-vis des sous-traitants) de s’assurer qu’il n’y aura aucune donnée stockée, que le développement soit libre depuis le jour 1.<br>
  83. <code>@here</code> je me permet une notif, vu la complexité éthique du sujet et l’urgence (une réponse mardi serait souhaitée)</p>
  84. <p><cite>Vincent</cite><br>
  85. En fait j’aimerai bien avoir l’avis d’un infectiologue, je vois passer beaucoup de personnes sur les libertés publiques mais rien de l’avis de médecin.</p>
  86. <p><cite>Pierre</cite><br>
  87. Je pense qu’on peut peut-être faire légèrement moins pire que d’autres, mais que de toute manière, entre Google/Apple et le gouvernement, on aura une marge de manœuvre à peu près nulle.</p>
  88. <p><cite>Vincent</cite><br>
  89. J’ai l’impression qu’en refusant on se donne le beau rôle de «non ça c’est pas pour moi» mais bon on sait très bien qu’[une ESN] va le prendre derrière.</p>
  90. <p><cite>Tristram</cite><br>
  91. Il y a un risque de dérive et c’est là qu’on pourra ralentir, surtout en posant à chaque bon de commande des clauses et en étant très clair qu’on arrête tout si on dérive. Ce qui aurait l’avantage de ralentir pas mal, car ils devront retrouver d’autres personnes pour le faire.</p>
  92. <p><cite>Nicolas</cite><br>
  93. Si on fait juste du portage, on aura pas notre mot à dire sur le produit; est-ce que vous proposez qu’on lâche nos projets actuels pour nous consacrer à ça?</p>
  94. <p><cite>Kheops</cite><br>
  95. J’ai presque l’impression que le simple fait qu’on soit mis devant ce choix mérite déjà qu’on publie quelque chose à ce propos.</p>
  96. <p><cite>Thibaut</cite><br>
  97. L’application ne sera pas suffisante en elle-même pour juguler l’épidémie, ça serait trop beau. Mais elle peut être un outil efficace pour éviter des décès.<br>
  98. L’application ne pourra pas ne pas exister, donc donnons lui le meilleur cadre de développement possible.<br>
  99. Si elle devient obligatoire pour les possésseurs de smartphone, et que c’est finalement le consortium qui la développe, j’imagine qu’on aura des regrets.</p>
  100. </blockquote>
  101. <p>Après plein d’autres débats, de visios, nous avions fini par décider de participer en posant nos conditions. Voici l’email que nous nous préparions à envoyer.</p>
  102. <blockquote>
  103. <p>Nous exigeons de pouvoir communiquer publiquement (blog post sur notre site)sur ce projet dès la fin des débats parlementaires.</p>
  104. <p>Le blog post reprendra les lignes rouges suivantes, qui amènerait à ne pas reconduire le portage et a publier le refus de continuer : L’application et le serveur ne doivent servir qu’à lutter contre l’épidémie de coronavirus.</p>
  105. <p>On ne doit récolter que le minimum nécessaire de données. Aucun moyen de géolocalisation ne sera utilisé (par exemple GPS).</p>
  106. <p>Aucun identifiant ni identité ne sera associée à l’application.</p>
  107. <p>Les données sur le téléphone et sur le serveur ne seront conservées qu’une durée définie explicitement et argumentée (justifiée tant par l’état des connaissances médicales que par le besoin de respect de la vie privée).</p>
  108. <p>Les données utilisateurs ne seront transmises sur le serveur central qu’avec une action explicite et informée de l’utilisateur.</p>
  109. <p>Le code source intégral est publié sous une licence libre avant le déploiement et par la suite l’intégralité du processus de développement sera public.</p>
  110. <p>L’installation de l’application ne doit pas être discriminante et donc ne doit ni être un devoir ni conditionner l’accès à des droits (tel que le droit de se déplacer librement, ou donner l’exclusivité de l’accès aux tests du CoVid-19).</p>
  111. <p>L’appli ne doit pas embarquer de SDK d’analytics.</p>
  112. <p>Elle passera le crible d’exodus privacy sans problème.</p>
  113. </blockquote>
  114. <p>Ces discussions — comme toute discussion collective sur un sujet complexe — ont pris du temps. Cela n’a pas été facilité par la coordination avec le groupement, la DINUM et surtout l’évocation d’un accord de confidentialité. Au moment où nous allions envoyer cet email, nous apprenions que le projet était finalement confié au <a href="https://www.capgemini.com/fr-fr/actualites/communiques-de-presse/stopcovid/">consortium de l’angoisse</a> qui inclut Capgemini, Orange, Dassault Systèmes, Withing, d’autres structures privées et publiques, et, « dans l’écosystème », Atos, Accenture, Thalès ou encore Sopra Steria.</p>
  115. <p>Il n’y a pas vraiment de conclusion à tout ça. Nous avons été témoins, par le petit bout de la lorgnette, du tout début de cette histoire; nous avons imaginé un instant avoir l‘opportunité, ou le devoir, d’y faire quelque chose. Finalement, nous n’avons jamais vraiment donné notre avis. 🤷</p>
  116. </article>
  117. <hr>
  118. <footer>
  119. <p>
  120. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  121. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  122. </svg> Accueil</a> •
  123. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  124. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  125. </svg> Suivre</a> •
  126. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  127. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  128. </svg> Pro</a> •
  129. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  130. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  131. </svg> Email</a> •
  132. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  133. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  134. </svg> Légal</abbr>
  135. </p>
  136. <template id="theme-selector">
  137. <form>
  138. <fieldset>
  139. <legend><svg class="icon icon-brightness-contrast">
  140. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  141. </svg> Thème</legend>
  142. <label>
  143. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  144. </label>
  145. <label>
  146. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  147. </label>
  148. <label>
  149. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  150. </label>
  151. </fieldset>
  152. </form>
  153. </template>
  154. </footer>
  155. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  156. <script>
  157. function loadThemeForm(templateName) {
  158. const themeSelectorTemplate = document.querySelector(templateName)
  159. const form = themeSelectorTemplate.content.firstElementChild
  160. themeSelectorTemplate.replaceWith(form)
  161. form.addEventListener('change', (e) => {
  162. const chosenColorScheme = e.target.value
  163. localStorage.setItem('theme', chosenColorScheme)
  164. toggleTheme(chosenColorScheme)
  165. })
  166. const selectedTheme = localStorage.getItem('theme')
  167. if (selectedTheme && selectedTheme !== 'undefined') {
  168. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  169. }
  170. }
  171. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  172. window.addEventListener('load', () => {
  173. let hasDarkRules = false
  174. for (const styleSheet of Array.from(document.styleSheets)) {
  175. let mediaRules = []
  176. for (const cssRule of styleSheet.cssRules) {
  177. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  178. continue
  179. }
  180. // WARNING: Safari does not have/supports `conditionText`.
  181. if (cssRule.conditionText) {
  182. if (cssRule.conditionText !== prefersColorSchemeDark) {
  183. continue
  184. }
  185. } else {
  186. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  187. continue
  188. }
  189. }
  190. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  191. }
  192. // WARNING: do not try to insert a Rule to a styleSheet you are
  193. // currently iterating on, otherwise the browser will be stuck
  194. // in a infinite loop…
  195. for (const mediaRule of mediaRules) {
  196. styleSheet.insertRule(mediaRule.cssText)
  197. hasDarkRules = true
  198. }
  199. }
  200. if (hasDarkRules) {
  201. loadThemeForm('#theme-selector')
  202. }
  203. })
  204. </script>
  205. </body>
  206. </html>