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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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>Introduction to SourceHut culture (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://man.sr.ht/staff/culture.md">
  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>Introduction to SourceHut culture</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.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://man.sr.ht/staff/culture.md" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p>Welcome to SourceHut!</p>
  71. <p>SourceHut's mission statement is as follows:</p>
  72. <blockquote>
  73. <p>We are here to make free software better. We will be honest, transparent, and
  74. empathetic. We care for our users, and we will not exploit them, and we hope
  75. that they will reward our care and diligence with success.</p>
  76. </blockquote>
  77. <p>This is the philosophical ethos that underlies our business. This presents
  78. itself in the way we act. Because we are empathetic, we value accessibility,
  79. working to make our UI easy to use for anyone, or prioritizing performance on
  80. low-end hardware and networks, so that access to our software does not depend on
  81. income level. We are transparent, which motivates our public ops, financial
  82. reports, and the fact that this page is on a public wiki. We are honest, by
  83. telling users quickly and frankly when we make mistakes that affect them, and in
  84. explaining our incentives and motivations so they can make informed decisions
  85. about their relationship with us.</p>
  86. <p>This extends to our internal culture as well. When we make mistakes or aren't
  87. sure what to do, we talk to each other about it, as an extension of our
  88. principle of honesty. We are empathetic, which is why we understand and forgive
  89. those mistakes, and care for each other as human beings before anything else.
  90. We have a steadfast commitment to integrity in all of our affairs that we hope
  91. can set an example for the industry as a whole, and it is our hope that you will
  92. keep these principles in mind in all of your work with SourceHut.</p>
  93. <h4 id="in-practical-terms"><a href="#in-practical-terms" rel="nofollow noopener">#</a>In practical terms</h4>
  94. <p>Think of SourceHut's engineering culture as a dynamic, mutual collaboration
  95. between equals, who aim to support each other in achieving our shared ambitions
  96. in free software. We have essentially attempted to reproduce the FOSS
  97. community's collaboration environment, and to some extent, governance model, in
  98. the context of a business.</p>
  99. <h5 id="what-should-i-work-on"><a href="#what-should-i-work-on" rel="nofollow noopener">#</a>What should I work on?</h5>
  100. <p>Most SourceHut engineers choose their own work. You may work on the projects
  101. that you find interesting and important, at your own discretion, including
  102. projects which are not maintained by or in the direct interests of SourceHut.
  103. You can also choose your own tasks and priorities within those projects. The
  104. only caveat is that it must be free and open source software.</p>
  105. <p>You must do this with an attitude that honors and values the feedback and advice
  106. of your peers, and seek to establish mutual trust. For example, junior engineers,
  107. and senior engineers who are junior to a new project or field, will generally be
  108. well-advised to seek the advice of the more experienced peers (be it fellow
  109. SourceHut staff, or the maintainers of a third-party project) regarding what
  110. tasks to work on. And likewise, those maintainers and mentors will honor and
  111. value your growth, experience, feedback, and opinions, to create a healthy
  112. balance of trust between participants.</p>
  113. <h5 id="rely-on-your-peers"><a href="#rely-on-your-peers" rel="nofollow noopener">#</a>Rely on your peers</h5>
  114. <p><strong>Ask questions early</strong>. We are here to support each other. There is no shame in
  115. not being sure of what to do, struggling with a hard problem, or having made a
  116. mistake. The shame is in not trusting your peers to help.</p>
  117. <h5 id="accepting-responsibilities"><a href="#accepting-responsibilities" rel="nofollow noopener">#</a>Accepting responsibilities</h5>
  118. <p>In addition to proactively choosing to work on projects and tasks that you find
  119. important, you may also accept long-term responsibilities that you find
  120. important. A simple example of this is your long-term commitments as the
  121. maintainer of your personal FOSS projects, which you may have already made
  122. before even joining SourceHut. You will have similar opportunities to accept
  123. responsibilities in the future. For example, you may become responsible for
  124. various subsystems of sr.ht software, or in third-party projects, or have
  125. certain responsibilities to your peers and users, such as being on-call for
  126. infrastructure issues.</p>
  127. <p>This is also done at your discretion, according to your wisdom on what
  128. responsibilities are important and suited to your skills. This is also a means
  129. by which you can build trust with your peers and the larger community, by being
  130. someone they can depend on.</p>
  131. <h5 id="communication"><a href="#communication" rel="nofollow noopener">#</a>Communication</h5>
  132. <p>We have a private channel on Libera.Chat at #sr.ht.staff, which you will be
  133. invited to. We also have the #sr.ht and #sr.ht.watercooler channels, which are
  134. open to the public and respectively handle forge support and SourceHut-adjacent
  135. discussions. Aim to use the right channel: if appropriate, many matters should
  136. be discussed in public, but we needn't bother these spaces with the day-to-day
  137. activities internal to SourceHut.</p>
  138. <p>Also remember that you represent SourceHut when you communicate with the outside
  139. world — something you are expected to do often. Remember to be respectful,
  140. to remember the human, and to avoid flamewars. You are building a relationship
  141. with the community. This is not to say that you shouldn't stand by your
  142. principles, but to be respectful of those who disagree. Give your peers
  143. feedback, but remember to praise in public and criticise in private.</p>
  144. <h5 id="meetings"><a href="#meetings" rel="nofollow noopener">#</a>Meetings</h5>
  145. <p>Everyone has a bi-weekly 1-on-1 meeting with their assigned mentor. This person
  146. is there to help you smooth along your work, lend you their ear when you ask for
  147. advice or are having trouble, and be your advocate to the broader organization.
  148. The scope and goals of these meetings is a matter for you and your mentor to
  149. agree upon, and it can evolve over time. This person is also your first stop for
  150. any formal businessy business, for anything you would talk to a manager about.
  151. They are not, however, a manager in the traditional sense, and don't have
  152. special authority over you.</p>
  153. <p>We also have monthly all-hands meetings where we will discuss our long-term
  154. interests, matters relevant to the whole company, updates on interesting things
  155. that are being worked on, and so on.</p>
  156. <p>Beyond this, meetings are established on an as-needed basis. For example, we may
  157. schedule meetings with consulting clients.</p>
  158. <h5 id="planning"><a href="#planning" rel="nofollow noopener">#</a>Planning</h5>
  159. <p>Informal planning is done in the meetings described above, but formal planning,
  160. such as ticket tracking, agile-style planning, and so on, is minimal at
  161. SourceHut. We find that formal systems are often the product of non-engineers
  162. wanting to boil their engineering teams down to numbers and apersonal measures
  163. of progress, which is not appropriate for an organization built on mutual trust
  164. and communication.</p>
  165. <p>However, it is often <em>useful</em> to have some means of tracking the things on our
  166. mind and communicate our intentions to others. Many of the projects we work on
  167. have bug trackers, and mailing list archives are a good place to put proposals
  168. and RFCs. We leverage planning tools and systems as they are helpful for us to
  169. achieve our goals, and remove them when they are not. Work with your peers to
  170. figure out what works for your projects.</p>
  171. <h5 id="time-off"><a href="#time-off" rel="nofollow noopener">#</a>Time off</h5>
  172. <p>If you need time off, take it. It is important for you to be healthy and happy,
  173. and that means taking time off work sometimes. There are no formal limits on
  174. time off, and no formal process to request it. Let people know when you'll be
  175. away so that they can work around your absence. If you have responsibilities
  176. that you won't be tending to, see to it that they're accounted for first.</p>
  177. <h5 id="how-and-when-do-i-get-paid"><a href="#how-and-when-do-i-get-paid" rel="nofollow noopener">#</a>How and when do I get paid?</h5>
  178. <p>Make sure Drew has your bank information for wire transfers or direct deposit.
  179. We prepare invoices on or near the first of the month to send out to our
  180. clients, and we pay the monthly base to staff on this date as well. We will also
  181. wire you payment for any consulting invoices which were paid over the previous
  182. month at this time.</p>
  183. <h5 id="expenses"><a href="#expenses" rel="nofollow noopener">#</a>Expenses</h5>
  184. <p>If you have reasonable work expenses, for instance on work-related equipment,
  185. books, and so on, ask Drew and he'll comp you. SourceHut will also cover your
  186. travel and accommodations for work-related events, such as conferences, if
  187. agreed upon in advance.</p>
  188. </article>
  189. <hr>
  190. <footer>
  191. <p>
  192. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  193. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  194. </svg> Accueil</a> •
  195. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  196. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-rss2"></use>
  197. </svg> Suivre</a> •
  198. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  199. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-user-tie"></use>
  200. </svg> Pro</a> •
  201. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  202. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-mail"></use>
  203. </svg> Email</a> •
  204. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  205. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-hammer2"></use>
  206. </svg> Légal</abbr>
  207. </p>
  208. <template id="theme-selector">
  209. <form>
  210. <fieldset>
  211. <legend><svg class="icon icon-brightness-contrast">
  212. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-brightness-contrast"></use>
  213. </svg> Thème</legend>
  214. <label>
  215. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  216. </label>
  217. <label>
  218. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  219. </label>
  220. <label>
  221. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  222. </label>
  223. </fieldset>
  224. </form>
  225. </template>
  226. </footer>
  227. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  228. <script>
  229. function loadThemeForm(templateName) {
  230. const themeSelectorTemplate = document.querySelector(templateName)
  231. const form = themeSelectorTemplate.content.firstElementChild
  232. themeSelectorTemplate.replaceWith(form)
  233. form.addEventListener('change', (e) => {
  234. const chosenColorScheme = e.target.value
  235. localStorage.setItem('theme', chosenColorScheme)
  236. toggleTheme(chosenColorScheme)
  237. })
  238. const selectedTheme = localStorage.getItem('theme')
  239. if (selectedTheme && selectedTheme !== 'undefined') {
  240. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  241. }
  242. }
  243. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  244. window.addEventListener('load', () => {
  245. let hasDarkRules = false
  246. for (const styleSheet of Array.from(document.styleSheets)) {
  247. let mediaRules = []
  248. for (const cssRule of styleSheet.cssRules) {
  249. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  250. continue
  251. }
  252. // WARNING: Safari does not have/supports `conditionText`.
  253. if (cssRule.conditionText) {
  254. if (cssRule.conditionText !== prefersColorSchemeDark) {
  255. continue
  256. }
  257. } else {
  258. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  259. continue
  260. }
  261. }
  262. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  263. }
  264. // WARNING: do not try to insert a Rule to a styleSheet you are
  265. // currently iterating on, otherwise the browser will be stuck
  266. // in a infinite loop…
  267. for (const mediaRule of mediaRules) {
  268. styleSheet.insertRule(mediaRule.cssText)
  269. hasDarkRules = true
  270. }
  271. }
  272. if (hasDarkRules) {
  273. loadThemeForm('#theme-selector')
  274. }
  275. })
  276. </script>
  277. </body>
  278. </html>