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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  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>The forbidden topics (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://drewdevault.com/2023/09/29/The-forbidden-topics.html">
  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>The forbidden topics</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://drewdevault.com/2023/09/29/The-forbidden-topics.html" title="Lien vers le contenu original">Source originale</a>
  70. </p>
  71. </nav>
  72. <hr>
  73. <p>There are forbidden topics in the hacker community. One is sternly reprimanded
  74. for bringing them up, by their peers, their leaders, and the community at large.
  75. In private, one can expect threats and intimidation; in public, outcry and
  76. censorship. The forbidden topics are enforced by the moderators of our spaces,
  77. taken off of forums, purged from chat rooms, and cleaned up from GitHub issues
  78. and mailing lists; the ban-hammers fall swiftly and resolutely. My last article
  79. to touch these subjects was removed from Hacker News by the moderators within 30
  80. minutes and landed several death threats in my inbox. The forbidden topics, when
  81. raised, are met with a resounding, aggressive dismissal and unconditional
  82. condemnation.</p>
  83. <p>Some years ago, the hacker community possessed near-unanimous praise for the
  84. ideals of free speech; the hacker position was generally that of what we would
  85. now understand as “radical” free speech, which is to say the kind of “shout
  86. ‘fire’ in a crowded movie theater” radical, but more specifically the kind that
  87. tolerates hate speech. The popular refrain went, “I disapprove of what you say,
  88. but I will defend to the death your right to say it”. Many hackers hold this as
  89. a virtue to this day. I once held this as a virtue for myself.</p>
  90. <p>However, this was a kind of free speech which was unconsciously contingent on
  91. being used for speech with which the listener was comfortable. The hacker
  92. community at this time was largely homogeneous, and as such most of the speech
  93. we were exposed to was of the comfortable sort. As the world evolved around us,
  94. and more people found their voice, this homogeneity began to break down. Critics
  95. of radical free speech, victims of hate speech, and marginalized people of
  96. all kinds began to appear in hacker communities. The things they had to say were
  97. not comfortable.</p>
  98. <p>The free speech absolutists among the old guard, faced with this discomfort,
  99. developed a tendency to defend hate speech and demean speech that challenged
  100. them. They were not the target of the hate, so it did not make them personally
  101. uncomfortable, and defending it would maintain the pretense of defending free
  102. speech, of stalwartly holding the line on a treasured part of their personal
  103. hacker ethic. Speech which challenged their preconceptions and challenged their
  104. power structures was not so easily acceptable. The pretense is dropped and they
  105. lash out in anger, calling for the speakers to be excluded from our communities.</p>
  106. <p>Some of the once-forbidden topics are becoming less so. There are carefully
  107. chalked-out spaces where we can talk about them, provided they are not too
  108. challenging, such as LGBTQ identities or the struggles of women in our spaces.
  109. Such discussions are subject to careful management by our leaders and
  110. moderators, to the extent necessary to preserve power structures. Those who
  111. speak on these topics are permitted to do so relatively free of retaliation
  112. provided that they speak from a perspective of humility, a voice that “knows its
  113. place”. Any speech which suggests that the listener may find themselves subject
  114. to a non-majority-conforming person in a position of power, or even that of a
  115. peer, will have crossed the line; one must speak as a victim seeking the pity
  116. and grace of your superiors to be permitted space to air your grievances.</p>
  117. <p>Similarly, space is made for opposition to progressive speech, again moderated
  118. only insofar as it is necessary to maintain power structures. Some kinds of
  119. overt hate speech may rouse a response from our leaders, but those who employ a
  120. more subtle approach are permitted their voice. Thus, both progressive speech
  121. and hate speech are permitted within a carefully regulated framework of power
  122. preservation.</p>
  123. <p>Some topics, however, remain strictly forbidden.</p>
  124. <p>Our community has persistent and pervasive problems of a particular sort which
  125. we are not allowed to talk about: sexual harassment and assault. Men who
  126. assault, harass, and even rape women in our spaces, are protected. A culture of
  127. silence is enforced, and those who call out rape, sexual assault, or harassment,
  128. those who criticise they who enable and protect these behaviors, are punished,
  129. swiftly and aggressively.</p>
  130. <p>Men are terrified of these kinds of allegations. It seems like a life sentence:
  131. social ostracization, limited work opportunities, ruined relationships. We may
  132. have events in our past that weigh on our conscience; was she too drunk, did she
  133. clearly consent, did she regret it in the morning? Some of us have events in our
  134. past that we try not to think about, because if we think too hard, we might
  135. realize that we crossed the line. This fills men with guilt and uncertainty, but
  136. also fear. We know the consequences if our doubts became known.</p>
  137. <p>So we lash out in this fear. We close ranks. We demand the most stringent
  138. standards of evidence to prove anything, evidence that we know is not likely to
  139. be there. We refuse to believe that our friends were not the men we thought they
  140. were, or to confront that we might not be ourselves. We demand due process under
  141. the law, we say they should have gone to the police, that they can’t make
  142. accusations of such gravity without hard proof. Think of the alleged
  143. perpetrator; we can’t ruin their lives over frivolous accusations.</p>
  144. <p>For victims, the only recourse permitted by society is to suffer in silence.
  145. Should they speak, victims are subject to similar persecutions: they are
  146. ostracized, struggle to work, and lose their relationships. They have to manage
  147. the consequences of a traumatic experience with support resources which are
  148. absent or inadequate. Their trauma is disbelieved, their speech is punished, and
  149. their assailants walk free among us as equals while they are subject to
  150. retaliatory harassment or worse.</p>
  151. <p>Victims have no recourse which will satisfy men. Reporting a crime is traumatic,
  152. especially one of this nature. I have heard many stories of disbelief from the
  153. authorities, disbelief in the face of overwhelming evidence. They were told it
  154. was their fault. They were told they should have been in a different place, or
  155. wearing something else, or should have simply been a different person. It’s
  156. their fault, not the aggressor’s. It’s about what they, the victim, should
  157. have done differently, never mind what the perpetrator should have done
  158. differently. It’s estimated that less than 1% of rapes end with the rapist in
  159. jail<sup id="fnref:1"></sup> – the remainder go unreported, unprosecuted or fail after years of
  160. traumatic legal proceedings for the victims. The legal system does not provide
  161. justice: it exacerbates harm. A hacker will demand this process is completed
  162. before they will seek justice, or allow justice to be sought. Until then, we
  163. will demand silence, and retaliate if our demands are not met.</p>
  164. <p>The strict standards of evidence required by the justice system are there
  165. because of the state monopoly on violence: a guilty verdict in a crime will lead
  166. to the imprisonment of the accused. We have no such recourse available in
  167. private, accordingly there is no need to hold ourselves to such standards. Our
  168. job is not to punish the accused, but rather to keep our communities safe. We
  169. can establish the need to take action to whatever standard <em>we</em> believe is
  170. sufficient, and by setting these standards as strict as the courts we will fail
  171. to resolve over 99% of the situations with which we are faced – a standard
  172. which is clearly not sufficient to address the problem. I’m behind you if you
  173. want to improve the justice system in this regard, but not if you set this as a
  174. blocker to seeking any justice at all. What kind of hacker puts their faith in
  175. authority?</p>
  176. <p>I find the state of affairs detestable. The hypocrisy of the free speech
  177. absolutist who demands censorship of challenging topics. The fact that the
  178. famous hacker curiosity can suddenly dry up if satisfying it would question our
  179. biases and preconceptions. The complicity of our moderators in censoring
  180. progressive voices in the defense of decorum and the status quo. The duplicitous
  181. characterization of “polite” hate speech as acceptable in our communities. Our
  182. failure to acknowledge our own shortcomings, our fear of seeing the “other” in a
  183. position of power, and the socially enforced ignorance of the “other” that
  184. naturally leads to failing to curtail discrimination and harassment in our
  185. communities. The ridiculously high standard of evidence we require from victims,
  186. who simply ask for our <em>belief</em> at a minimum, before we’ll consider doing
  187. anything about their grievance, if we could even be convinced in the first
  188. place.</p>
  189. <p>Meanwhile, the problems that these forbidden topics seek to discuss are present
  190. in our community. That includes the “polite” problems, such as the conspicuous
  191. lack of diversity in our positions of power, which may be discussed and
  192. commiserated only until someone suggests doing something about it; and also the
  193. impolite problems up to and including the protection of the perpetrators of
  194. sexual harassment, sexual assault, and, yes, rape.</p>
  195. <p>Most hackers live under the comfortable belief that it “can’t happen here”, but
  196. it can and it does. I attended a hacker event this year – HiP Berlin – where I
  197. discovered that some of the organizers had cooperated to make it possible for
  198. multiple known rapists to participate, working together to find a way to
  199. circumvent the event’s code of conduct – a document that they were tasked with
  200. enforcing. One of the victims was in attendance, believing the event to be safe.
  201. At every hacker event I have attended in recent memory, I have personally
  202. witnessed or heard stories of deeply problematic behavior and protection for its
  203. perpetrators from the leadership.</p>
  204. <p>Our community has problems, important problems, that every hacker should care
  205. about, and we need the bravery and humility to face them, not the cowardice to
  206. retaliate against those who speak up. Talk to, listen to, and believe your peers
  207. and their stories. Stand up for what’s right, and speak out when you see
  208. something that isn’t. Demand that your leaders and moderators do the right
  209. thing. Make a platform where people can safely speak about what our community
  210. needs to do right by them, and have the courage to listen to them and confront
  211. yourself.</p>
  212. <p>You need to be someone who will <em>do something about it</em>.</p>
  213. <hr>
  214. <p><strong>Edit</strong>: Case in point: this post was quietly removed by Hacker News moderators
  215. within 40 minutes of its submission.</p>
  216. </article>
  217. <hr>
  218. <footer>
  219. <p>
  220. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  221. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  222. </svg> Accueil</a> •
  223. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  224. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  225. </svg> Suivre</a> •
  226. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  227. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  228. </svg> Pro</a> •
  229. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  230. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  231. </svg> Email</a> •
  232. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  233. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  234. </svg> Légal</abbr>
  235. </p>
  236. <template id="theme-selector">
  237. <form>
  238. <fieldset>
  239. <legend><svg class="icon icon-brightness-contrast">
  240. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  241. </svg> Thème</legend>
  242. <label>
  243. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  244. </label>
  245. <label>
  246. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  247. </label>
  248. <label>
  249. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  250. </label>
  251. </fieldset>
  252. </form>
  253. </template>
  254. </footer>
  255. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  256. <script>
  257. function loadThemeForm(templateName) {
  258. const themeSelectorTemplate = document.querySelector(templateName)
  259. const form = themeSelectorTemplate.content.firstElementChild
  260. themeSelectorTemplate.replaceWith(form)
  261. form.addEventListener('change', (e) => {
  262. const chosenColorScheme = e.target.value
  263. localStorage.setItem('theme', chosenColorScheme)
  264. toggleTheme(chosenColorScheme)
  265. })
  266. const selectedTheme = localStorage.getItem('theme')
  267. if (selectedTheme && selectedTheme !== 'undefined') {
  268. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  269. }
  270. }
  271. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  272. window.addEventListener('load', () => {
  273. let hasDarkRules = false
  274. for (const styleSheet of Array.from(document.styleSheets)) {
  275. let mediaRules = []
  276. for (const cssRule of styleSheet.cssRules) {
  277. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  278. continue
  279. }
  280. // WARNING: Safari does not have/supports `conditionText`.
  281. if (cssRule.conditionText) {
  282. if (cssRule.conditionText !== prefersColorSchemeDark) {
  283. continue
  284. }
  285. } else {
  286. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  287. continue
  288. }
  289. }
  290. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  291. }
  292. // WARNING: do not try to insert a Rule to a styleSheet you are
  293. // currently iterating on, otherwise the browser will be stuck
  294. // in a infinite loop…
  295. for (const mediaRule of mediaRules) {
  296. styleSheet.insertRule(mediaRule.cssText)
  297. hasDarkRules = true
  298. }
  299. }
  300. if (hasDarkRules) {
  301. loadThemeForm('#theme-selector')
  302. }
  303. })
  304. </script>
  305. </body>
  306. </html>