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 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  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>« Logiciel libre » et « Open Source », c'est pareil ou pas ? (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. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <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>
  31. <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>
  32. <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>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://www.bortzmeyer.org/free-software-open-source.html">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>« Logiciel libre » et « Open Source », c'est pareil ou pas ?</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://www.bortzmeyer.org/free-software-open-source.html" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <div class="para"><p>On entend parfois, dans les discussions autour des
  71. <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Licence%20de%20logiciel" title="Consultez l'article &quot;Licence de logiciel&quot; de l'encyclopédie libre Wikipedia">licences logicielles</a></b>, des affirmations du
  72. genre « tel logiciel n'est pas libre mais il est <i class="foreign" xml:lang="en">open
  73. source</i> ». Quelle est la différence ? Y en a-t-il une,
  74. d'ailleurs ?</p></div>
  75. <div class="para"><p>Commençons par les textes originaux. Le concept de
  76. <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Logiciel%20libre" title="Consultez l'article &quot;Logiciel libre&quot; de l'encyclopédie libre Wikipedia">logiciel libre</a></b> a été popularisé par
  77. <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Richard%20Stallman" title="Consultez l'article &quot;Richard Stallman&quot; de l'encyclopédie libre Wikipedia">Richard Stallman</a></b> et la
  78. <i class="foreign" xml:lang="en"><b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Free%20Software%20Foundation" title="Consultez l'article &quot;Free Software Foundation&quot; de l'encyclopédie libre Wikipedia">Free Software
  79. Foundation</a></b></i>. Le
  80. logiciel libre se définit par <b class="emphasis"><a href="https://www.gnu.org/philosophy/free-sw.html">quatre libertés</a></b> :
  81. </p><ul>
  82. <li>Liberté de faire tourner le logiciel, c'est-à-dire de
  83. l'utiliser à des fins quelconques.</li>
  84. <li>Liberté d'étudier le programme, ce qui implique notamment
  85. l'accès à son <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Code%20source" title="Consultez l'article &quot;Code source&quot; de l'encyclopédie libre Wikipedia">code source</a></b>.</li>
  86. <li>Liberté de distribuer des copies du logiciel,</li>
  87. <li>y compris des copies modifiées.</li>
  88. </ul><p>
  89. On notera que la gratuité n'est pas mentionnée. En
  90. <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/anglais" title="Consultez l'article &quot;anglais&quot; de l'encyclopédie libre Wikipedia">anglais</a></b>, le terme de
  91. <i class="foreign" xml:lang="en">free software</i> a parfois engendré des
  92. malentendus, <i class="foreign" xml:lang="en"><a href="https://en.wiktionary.org/wiki/free" hreflang="en">free</a></i> pouvant vouloir dire « libre »
  93. mais aussi « gratuit ». Comme souvent en politique, ces malentendus
  94. étaient parfois de bonne foi, et malhonnêtes dans
  95. d'autres, certains faisant semblant de ne pas comprendre que la
  96. liberté n'a rien à voir avec la gratuité.</p></div>
  97. <div class="para"><p>Stallman aime donc répéter que, dans <i class="foreign" xml:lang="en">free
  98. software</i>, c'est <i class="foreign" xml:lang="en">free as in free speech, not
  99. free as in free beer</i>. Bonne explication, mais difficile
  100. à traduire en <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/fran%C3%A7ais" title="Consultez l'article &quot;français&quot; de l'encyclopédie libre Wikipedia">français</a></b> puisque, justement,
  101. en français, il y a deux mots différents pour « libre »
  102. et « gratuit ».</p></div>
  103. <div class="para"><p>Et <i class="foreign" xml:lang="en">open source</i> ? Notons que ce n'est pas un
  104. hasard si le terme en anglais est populaire chez les gens dont le
  105. métier est d'embrouiller le langage, les vendeurs ou les politiciens, par
  106. exemple. Utiliser un terme en anglais permet de rester dans le
  107. flou, et d'essayer de plaire à tout le monde, en n'utilisant pas
  108. de termes précis. Le terme a été
  109. popularisé par <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Eric%20Raymond" title="Consultez l'article &quot;Eric Raymond&quot; de l'encyclopédie libre Wikipedia">Eric Raymond</a></b> et quelques
  110. autres en 1998. Ils avançaient deux arguments essentiels en faveur de ce
  111. nouveau terme : l'ambiguité entre « libre »
  112. et « gratuit » (qui, on l'a vu, n'existe pas en français, rendant
  113. tout à fait inutile l'utilisation du terme <i class="foreign" xml:lang="en">open
  114. source</i>), et surtout le fait que la liberté faisait peur,
  115. notamment au patronat, et que, si on voulait populariser le
  116. logiciel libre auprès des gens qui ont la main sur la carte de
  117. crédit de l'entreprise, il fallait changer le nom. (Il y avait
  118. bien sûr également des raisons non avouées, comme essayer de
  119. remplacer Stallman au poste de symbole du logiciel libre.)</p></div>
  120. <div class="para"><p>Le terme a clairement été un grand succès, malgré le fait qu'il
  121. soit tout aussi ambigu que l'autre (<i class="foreign" xml:lang="en">open source</i>
  122. ou « source ouverte » désignait déjà <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Renseignement%20d'origine%20source%20ouverte" title="Consultez l'article &quot;Renseignement d'origine source ouverte&quot; de l'encyclopédie libre Wikipedia">tout
  123. à fait autre chose</a></b>). Que mettaient-ils derrière ce
  124. terme ? Les promoteurs du terme <i class="foreign" xml:lang="en">open source</i> ont
  125. produit une <a href="https://opensource.org/osd">définition</a>. Elle est moins
  126. percutante que les « quatre libertés », et plus longue, mais elle
  127. revient quasiment au même. Notamment, elle précise clairement
  128. qu'<i class="foreign" xml:lang="en">open source</i> ne veut pas uniquement dire
  129. qu'on a accès au <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Code%20source" title="Consultez l'article &quot;Code source&quot; de l'encyclopédie libre Wikipedia">code source</a></b>.</p></div>
  130. <div class="para"><p>Si on regarde la <a href="https://www.gnu.org/licenses/license-list.html">liste des
  131. licences libres reconnues par la FSF</a>, et qu'on la compare
  132. avec <a href="https://opensource.org/licenses/category">celle des promoteurs du terme open source</a>, on ne
  133. voit en effet pas de différence. On cite parfois la question de
  134. l'obligation de réciprocité
  135. (<i class="foreign" xml:lang="en"><b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/copyleft" title="Consultez l'article &quot;copyleft&quot; de l'encyclopédie libre Wikipedia">copyleft</a></b></i> en anglais, ou
  136. « partage à l'identique » - <i class="foreign" xml:lang="en">Share Alike</i> - dans
  137. les <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Licence%20Creative%20Commons" title="Consultez l'article &quot;Licence Creative Commons&quot; de l'encyclopédie libre Wikipedia">licences Creative Commons</a></b>)
  138. comme différence entre logiciel libre et <i class="foreign" xml:lang="en">open
  139. source</i>. Mais cette distinction n'est jamais faite par
  140. des gens qui participent au logiciel libre, elle n'arrive que dans
  141. des raccourcis médiatiques. L'obligation de réciprocité (un
  142. individu ou une entreprise peuvent
  143. distribuer le logiciel, même modifié, et même le vendre, mais on a
  144. l'obligation de reconnaitre au destinataire les mêmes libertés que
  145. celles dont ils ont bénéficié) n'est en effet pas mentionnée dans
  146. les quatre libertés qui définissent le logiciel libre. Les
  147. personnes qui ne se sont pas renseignées avant et qui disent que
  148. le logiciel libre requiert l'obligation de réciprocité sont donc
  149. plus stricts sur la définition <a href="https://www.gnu.org/licenses/gpl-faq.html#DoesFreeSoftwareMeanUsingTheGPL">que
  150. Richard Stallman lui-même</a>, alors qu'il est généralement
  151. considéré comme un modèle de strictitude.
  152. </p></div>
  153. <div class="para"><p>Bien qu'il existe des cas
  154. compliqués de licences qui peuvent être vues comme libres selon
  155. une définition et pas selon une autre, ces cas sont très
  156. marginaux. L'immense majorité des <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Logiciel%20%20%20%20%20libre" title="Consultez l'article &quot;Logiciel libre&quot; de l'encyclopédie libre Wikipedia">logiciels libres</a></b> est sous une licence que les
  157. deux définitions classent comme libre. Parmi les
  158. exceptions, on note (trouvée par Exagone313) l'amusante licence
  159. <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/WTFPL" title="Consultez l'article &quot;WTFPL&quot; de l'encyclopédie libre Wikipedia">Foutez ce que
  160. vous voulez</a></b>, apparemment <a href="https://opensource.org/minutes20090304">refusée par
  161. l'Open Source Initiative</a> mais <a href="https://www.gnu.org/licenses/license-list.html">acceptée par la
  162. FSF</a>. Mais elle est peu utilisée. (Si vous avez
  163. d'autres références <b class="emphasis">précises</b> d'une exception, d'une licence
  164. qui est dans une des listes de licences libres mais pas dans
  165. l'autre, je suis preneur. En indiquant des logiciels qui utilisent
  166. cette licence, car la plupart des licences candidates pour cet
  167. exercice sont peu ou pas utilisées.)</p></div>
  168. <div class="para"><p>Cette rareté des licences acceptées sous une définition mais
  169. pas sous l'autre semble plaider pour une conclusion simple « logiciel libre
  170. ou <i class="foreign" xml:lang="en">open source</i>, on s'en fiche, c'est
  171. pareil ».</p></div>
  172. <div class="para"><p>À noter que <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Wikip%C3%A9dia" title="Consultez l'article &quot;Wikipédia&quot; de l'encyclopédie libre Wikipedia">Wikipédia</a></b> <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Open%20source" title="Consultez l'article &quot;Open source&quot; de l'encyclopédie libre Wikipedia">reprend
  173. cette définition</a></b> : « La désignation open source, ou
  174. "code source ouvert", s'applique aux logiciels (et s'étend
  175. maintenant aux œuvres de l'esprit) dont la licence respecte des
  176. critères précisément établis par l'Open Source Initiative,
  177. c'est-à-dire les possibilités de libre redistribution, d'accès au
  178. code source et de création de travaux dérivés. » Et ajoute « La
  179. différence formelle entre open source et logiciel libre (en
  180. anglais : free software) n'a quasiment pas de conséquence dans
  181. l'évaluation des licences. » (Le bandeau en haut de
  182. l'article dit « Ne doit pas être confondu avec Logiciel libre »,
  183. alors même que l'article explique que c'est pareil...) Le
  184. <b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Wiktionnaire" title="Consultez l'article &quot;Wiktionnaire&quot; de l'encyclopédie libre Wikipedia">Wiktionnaire</a></b> dit également que les deux
  185. termes sont synonymes.</p></div>
  186. <div class="para"><p>Mais, évidemment, en matière de langage, les arguments
  187. d'autorité et les références aux textes antiques ont leurs
  188. limites. Le langage évolue (pas toujours dans le bon sens) et ce
  189. qui est important, c'est aussi ce que veulent dire les gens. L'usage
  190. compte. Ceux et
  191. celles qui utilisent le terme <i class="foreign" xml:lang="en">open source</i>
  192. veulent-ils dire la même chose que celles et ceux qui disent
  193. logiciel libre ? Il est difficile de répondre à cette question. En
  194. effet, si on n'utilise pas la définition « officielle », laquelle
  195. utilise-t-on ? J'ai la nette impression que les gens qui utilisent
  196. <i class="foreign" xml:lang="en">open source</i> n'ont pas de définition précise et
  197. l'utilisent un peu au petit bonheur la chance. Quand on demande à
  198. quelqu'un qui a utilisé le terme <i class="foreign" xml:lang="en">open source</i> ce
  199. qu'ielle entend par là, on reçoit en général une réponse vague, et
  200. souvent fausse (comme par exemple de définir <i class="foreign" xml:lang="en">open
  201. source</i> par « accès au code source »). Les commerciaux
  202. utilisent ce terme pour dire « logiciel libre » mais en moins
  203. politique (la liberté, ça fait peur aux clients), les journalistes
  204. l'utilisent parce que dans un article sur l'informatique, il faut
  205. mettre de l'anglais, beaucoup de gens répètent simplement le terme
  206. qu'ils ont entendu dans les médias, sans réfléchir. Si on veut une
  207. définition fondée sur l'usage (et non pas sur la définition
  208. formelle de l'<b><a class="wikipedia" hreflang="fr" href="https://fr.wikipedia.org/wiki/Open%20Source%20%20%20%20Initiative" title="Consultez l'article &quot;Open Source Initiative&quot; de l'encyclopédie libre Wikipedia">OSI</a></b>), on pourrait arriver à quelque chose du
  209. genre « quelque chose qui va du logiciel libre [inclus] à diverses
  210. formes de logiciels privateurs manifestant un peu d'ouverture ».</p></div>
  211. <div class="para"><p>En conclusion et résumé :
  212. </p><ul>
  213. <li>« Logiciel libre » et « <i class="foreign" xml:lang="en">Open Source</i> »
  214. désignent quasiment exactement les mêmes licences et donc les
  215. mêmes logiciels. Il n'y a donc pas de différence pratique.</li>
  216. <li>Mais dans l'usage, la plupart des emplois de
  217. « <i class="foreign" xml:lang="en">Open Source</i> » désignent quelque chose de
  218. vague et de pas bien défini.</li>
  219. <li>Et les mots sont importants : utiliser « <i class="foreign" xml:lang="en">Open
  220. Source</i> » n'est pas neutre et veut dire en général qu'on
  221. n'est pas spécialement attaché à la liberté.</li>
  222. </ul></div>
  223. </article>
  224. <hr>
  225. <footer>
  226. <p>
  227. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  228. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  229. </svg> Accueil</a> •
  230. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  231. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  232. </svg> Suivre</a> •
  233. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  234. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  235. </svg> Pro</a> •
  236. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  237. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  238. </svg> Email</a> •
  239. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  240. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  241. </svg> Légal</abbr>
  242. </p>
  243. <template id="theme-selector">
  244. <form>
  245. <fieldset>
  246. <legend><svg class="icon icon-brightness-contrast">
  247. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  248. </svg> Thème</legend>
  249. <label>
  250. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  251. </label>
  252. <label>
  253. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  254. </label>
  255. <label>
  256. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  257. </label>
  258. </fieldset>
  259. </form>
  260. </template>
  261. </footer>
  262. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  263. <script>
  264. function loadThemeForm(templateName) {
  265. const themeSelectorTemplate = document.querySelector(templateName)
  266. const form = themeSelectorTemplate.content.firstElementChild
  267. themeSelectorTemplate.replaceWith(form)
  268. form.addEventListener('change', (e) => {
  269. const chosenColorScheme = e.target.value
  270. localStorage.setItem('theme', chosenColorScheme)
  271. toggleTheme(chosenColorScheme)
  272. })
  273. const selectedTheme = localStorage.getItem('theme')
  274. if (selectedTheme && selectedTheme !== 'undefined') {
  275. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  276. }
  277. }
  278. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  279. window.addEventListener('load', () => {
  280. let hasDarkRules = false
  281. for (const styleSheet of Array.from(document.styleSheets)) {
  282. let mediaRules = []
  283. for (const cssRule of styleSheet.cssRules) {
  284. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  285. continue
  286. }
  287. // WARNING: Safari does not have/supports `conditionText`.
  288. if (cssRule.conditionText) {
  289. if (cssRule.conditionText !== prefersColorSchemeDark) {
  290. continue
  291. }
  292. } else {
  293. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  294. continue
  295. }
  296. }
  297. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  298. }
  299. // WARNING: do not try to insert a Rule to a styleSheet you are
  300. // currently iterating on, otherwise the browser will be stuck
  301. // in a infinite loop…
  302. for (const mediaRule of mediaRules) {
  303. styleSheet.insertRule(mediaRule.cssText)
  304. hasDarkRules = true
  305. }
  306. }
  307. if (hasDarkRules) {
  308. loadThemeForm('#theme-selector')
  309. }
  310. })
  311. </script>
  312. </body>
  313. </html>