nus-talk/nus.html
2024-09-14 21:28:53 +08:00

554 lines
22 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta name="author" content="Julian Ospald" />
<title>Two decades of Open Source</title>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
/* CSS for syntax highlighting */
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<link rel="stylesheet" type="text/css" media="screen, projection, print"
href="https://www.w3.org/Talks/Tools/Slidy2/styles/slidy.css" />
<script src="https://www.w3.org/Talks/Tools/Slidy2/scripts/slidy.js"
charset="utf-8" type="text/javascript"></script>
</head>
<body>
<div class="slide titlepage">
<h1 class="title">Two decades of Open Source</h1>
<p class="author">
Julian Ospald
</p>
<p class="date">Sep 20, 2024</p>
</div>
<div id="introduction" class="title-slide slide section level1">
<h1>Introduction</h1>
</div>
<div id="about-me" class="slide section level2">
<h1>About me</h1>
<ul>
<li>From Germany</li>
<li>Studied CS</li>
<li>Haskell developer</li>
<li>I love open source</li>
</ul>
</div>
<div id="professional-career" class="slide section level2">
<h1>Professional career</h1>
<ul>
<li>Software Engineer in R&amp;D (automotive industry)</li>
<li>Go Backend Developer (online advertisement platform</li>
<li>Haskell Developer at <strong>Capital Match</strong> (invoice
financing platform in Singapore)</li>
<li>Haskell Developer at <strong>IOHK</strong> (Cardano Blockchain)</li>
<li>Haskell Freelancer (blockchain and others)</li>
<li>Haskell Developer at <strong>Standard Chartered Bank</strong></li>
<li>Haskell Freelancer (chimney sweeper app for german businesses)</li>
</ul>
</div>
<div id="open-source-career" class="slide section level2">
<h1>Open Source career</h1>
<ul>
<li>Gentoo Linux developer (core team), 2012-2016
<ul>
<li>Ebuild development (packaging)</li>
<li>Code review</li>
<li>Development of a <a
href="https://www.gentoo.org/glep/glep-0066.html">git workflow</a></li>
</ul></li>
<li>Author of GHCup (the Haskell installer), ca. 2019</li>
<li>Maintainer of Haskell core libraries: filepath, unix, os-string,
file-io</li>
<li>Implementation of the <a
href="https://hasufell.github.io/posts/2022-06-29-fixing-haskell-filepaths.html">Abstract
FilePath Proposal</a></li>
<li>Member of the Haskell Core Libraries Comittee 2023-2026</li>
<li>Haskell Influencer (Haskell Foundation, …)</li>
</ul>
</div>
<div id="open-source" class="title-slide slide section level1">
<h1>Open Source</h1>
</div>
<div id="what-is-open-source" class="slide section level2">
<h1>What is Open Source</h1>
<ul>
<li><img src="osi.png" id="id" class="class" height="32" /> A group of
licenses (see OSI)
<ul>
<li><em>Not</em> free software</li>
<li><em>Not</em> copyleft</li>
</ul></li>
<li>🧑‍🤝‍🧑 A community
<ul>
<li>volunteers</li>
<li>companies</li>
</ul></li>
<li>🔮 A philosophy
<ul>
<li>sharing</li>
<li>collaboration</li>
<li>transparency</li>
</ul></li>
</ul>
</div>
<div id="popular-open-source-projects" class="slide section level2">
<h1>Popular Open Source projects</h1>
<ul>
<li><img src="512px-Tux.svg.png" id="id" class="class" height="32" />
Linux kernel
<ul>
<li>1500 developers from 200-250 companies</li>
</ul></li>
<li><img src="firefox.png" id="id" class="class" height="32" />
Firefox</li>
<li><img src="vscode.png" id="id" class="class" height="32" />
VSCode</li>
<li><img src="blender.png" id="id" class="class" height="32" />
Blender</li>
<li><img src="haskell_logo.png" id="id" class="class" height="32" /> GHC
(The Haskell compiler)</li>
</ul>
</div>
<div id="value-proposition-of-open-source" class="slide section level2">
<h1>Value proposition of Open Source</h1>
<ul>
<li>⚗️ the scientific method
<ul>
<li>share your results</li>
<li>allow people to replicate it</li>
</ul></li>
<li>🔓 access to a community
<ul>
<li>users</li>
<li>collaborators</li>
</ul></li>
<li>🕸️ network effects</li>
</ul>
</div>
<div id="reality-of-open-source" class="slide section level2">
<h1>Reality of Open Source</h1>
<ul>
<li>most projects…
<ul>
<li>are one-man shows</li>
<li>have no users</li>
<li>are underdocumened</li>
<li>have horrible code</li>
</ul></li>
<li>writing new code is easy, maintenance is hard</li>
<li>most maintainers
<ul>
<li>dont get paid</li>
<li>will stop maintenance at some point</li>
<li>dont care much about their users</li>
</ul></li>
</ul>
</div>
<div id="gentoo-and-package-management"
class="title-slide slide section level1">
<h1>Gentoo and package management</h1>
</div>
<div id="what-is-gentoo" class="slide section level2">
<h1>What is Gentoo</h1>
<ul>
<li>a Linux distribution
<ul>
<li>rolling release</li>
<li>source based</li>
</ul></li>
<li>19000 packages (program, library, …)</li>
<li>200 core developers (at its peak)</li>
<li>over 1000 contributors</li>
</ul>
</div>
<div id="how-does-a-linux-distro-work-relationships"
class="slide section level2">
<h1>How does a Linux distro work (relationships)</h1>
<p><img src="packager_relationships.svg" id="id" class="class"
height="500" /></p>
</div>
<div id="how-does-a-linux-distro-work-activities"
class="slide section level2">
<h1>How does a Linux distro work (activities)</h1>
<p><img src="install.svg" id="id" class="class" height="500" /></p>
</div>
<div id="a-typical-ebuild" class="slide section level2">
<h1>A typical ebuild</h1>
<div class="sourceCode" id="cb1"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" tabindex="-1"></a><span class="va">EAPI</span><span class="op">=</span>8</span>
<span id="cb1-2"><a href="#cb1-2" tabindex="-1"></a></span>
<span id="cb1-3"><a href="#cb1-3" tabindex="-1"></a><span class="va">DESCRIPTION</span><span class="op">=</span><span class="st">&quot;A dummy package&quot;</span></span>
<span id="cb1-4"><a href="#cb1-4" tabindex="-1"></a><span class="va">HOMEPAGE</span><span class="op">=</span><span class="st">&quot;https://dummy.org&quot;</span></span>
<span id="cb1-5"><a href="#cb1-5" tabindex="-1"></a><span class="va">SRC_URI</span><span class="op">=</span><span class="st">&quot;https://github.com/dummy/dummy/archive/refs/tags/</span><span class="va">${PV}</span><span class="st">.tar.gz -&gt; </span><span class="va">${P}</span><span class="st">.tar.gz&quot;</span></span>
<span id="cb1-6"><a href="#cb1-6" tabindex="-1"></a></span>
<span id="cb1-7"><a href="#cb1-7" tabindex="-1"></a><span class="va">LICENSE</span><span class="op">=</span><span class="st">&quot;BSD-3&quot;</span></span>
<span id="cb1-8"><a href="#cb1-8" tabindex="-1"></a><span class="va">SLOT</span><span class="op">=</span><span class="st">&quot;0&quot;</span></span>
<span id="cb1-9"><a href="#cb1-9" tabindex="-1"></a><span class="va">KEYWORDS</span><span class="op">=</span><span class="st">&quot;~amd64 ~x86 &quot;</span></span>
<span id="cb1-10"><a href="#cb1-10" tabindex="-1"></a><span class="va">IUSE</span><span class="op">=</span><span class="st">&quot;debug&quot;</span></span>
<span id="cb1-11"><a href="#cb1-11" tabindex="-1"></a></span>
<span id="cb1-12"><a href="#cb1-12" tabindex="-1"></a><span class="va">RDEPEND</span><span class="op">=</span><span class="st">&quot;dev-util/boost&quot;</span></span>
<span id="cb1-13"><a href="#cb1-13" tabindex="-1"></a></span>
<span id="cb1-14"><a href="#cb1-14" tabindex="-1"></a><span class="va">PATCHES</span><span class="op">=</span><span class="va">(</span> <span class="st">&quot;</span><span class="va">${FILESDIR}</span><span class="st">&quot;</span>/<span class="va">${PN}</span>-4.9.2-disable_python_rpath.patch<span class="va">)</span></span>
<span id="cb1-15"><a href="#cb1-15" tabindex="-1"></a></span>
<span id="cb1-16"><a href="#cb1-16" tabindex="-1"></a><span class="fu">src_configure()</span> <span class="kw">{</span></span>
<span id="cb1-17"><a href="#cb1-17" tabindex="-1"></a> <span class="ex">econf</span> <span class="va">$(</span><span class="ex">use_enable</span> debug<span class="va">)</span></span>
<span id="cb1-18"><a href="#cb1-18" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-19"><a href="#cb1-19" tabindex="-1"></a></span>
<span id="cb1-20"><a href="#cb1-20" tabindex="-1"></a><span class="fu">src_compile()</span> <span class="kw">{</span></span>
<span id="cb1-21"><a href="#cb1-21" tabindex="-1"></a> <span class="ex">emake</span></span>
<span id="cb1-22"><a href="#cb1-22" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-23"><a href="#cb1-23" tabindex="-1"></a></span>
<span id="cb1-24"><a href="#cb1-24" tabindex="-1"></a><span class="fu">src_test()</span> <span class="kw">{</span></span>
<span id="cb1-25"><a href="#cb1-25" tabindex="-1"></a> <span class="ex">emake</span> test</span>
<span id="cb1-26"><a href="#cb1-26" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-27"><a href="#cb1-27" tabindex="-1"></a></span>
<span id="cb1-28"><a href="#cb1-28" tabindex="-1"></a><span class="fu">src_install()</span> <span class="kw">{</span></span>
<span id="cb1-29"><a href="#cb1-29" tabindex="-1"></a> <span class="ex">emake</span> DESTDIR=<span class="st">&quot;</span><span class="va">${D}</span><span class="st">&quot;</span> install</span>
<span id="cb1-30"><a href="#cb1-30" tabindex="-1"></a><span class="kw">}</span></span></code></pre></div>
</div>
<div id="packaging-challenges" class="slide section level2">
<h1>Packaging challenges</h1>
<ul>
<li>no standard on build systems (make, autotools, meson, cmake, …)
<ul>
<li>=&gt; an abstraction over build systems</li>
</ul></li>
<li>thousands of different execution environments (fragility)
<ul>
<li>system configuration</li>
<li>package configuration</li>
<li>platform, architecture</li>
</ul></li>
<li>reverse dependencies
<ul>
<li>shipping a “chain” instead of a single artifact</li>
</ul></li>
<li>high impact on small mistakes (e.g. assuming a specific shell)</li>
</ul>
</div>
<div id="packaging-challenges-pt-2." class="slide section level2">
<h1>Packaging challenges (pt 2.)</h1>
<ul>
<li>communication between teams/maintainers</li>
<li>execution of large changes
<ul>
<li>e.g. introduction of LibreSSL</li>
<li>e.g. changing of fundamental workflows (from CVS to git)</li>
</ul></li>
<li>monitoring upstream changes and making decisions about
compatibility/stability
<ul>
<li>when to update</li>
</ul></li>
</ul>
</div>
<div id="what-is-a-distro-really" class="slide section level2">
<h1>What is a Distro really?</h1>
<ul>
<li>a user experience
<ul>
<li>LTS distros vs rolling release</li>
<li>binary vs source based</li>
<li>choice of init system</li>
</ul></li>
<li>plug and play (everything works)</li>
<li>deviating from the happy path (fixing issues)</li>
<li>combining components to a coherent system (init system, coreutils,
kernel, …)</li>
<li>a choice of <strong>defaults</strong></li>
</ul>
</div>
<div id="ghcup" class="title-slide slide section level1">
<h1>GHCup</h1>
</div>
<div id="demo" class="slide section level2">
<h1>Demo</h1>
<p><img src="ghcup.png" id="id" class="class" height="500" /></p>
</div>
<div id="state-of-2019-haskell-installers" class="slide section level2">
<h1>State of 2019 (Haskell Installers)</h1>
<ul>
<li>stack is the only “Haskell Installer”</li>
<li>no unified alternative for cabal users</li>
<li>distro packages, nix, manual installs, …</li>
<li>😭</li>
</ul>
</div>
<div id="how-it-started" class="slide section level2">
<h1>How it started</h1>
<ul>
<li>🤹 small team at work (Capital Match), using different platforms
<ul>
<li>originally used stack</li>
<li>distro packages constantly out of date</li>
</ul></li>
<li>🦾 first version was 165 LOC
<ul>
<li>Posix shell</li>
</ul></li>
<li><img src="linux.png" id="id" class="class" height="32" /> only
supported linux and mac</li>
<li><img src="rust.png" id="id" class="class" height="32" /> inspired by
<strong>rustup</strong></li>
<li>support from haskell.org</li>
</ul>
</div>
<div id="ghcup-today" class="slide section level2">
<h1>GHCup today</h1>
<p><a
href="https://taylor.fausak.me/2022/11/18/haskell-survey-results/#s2q1">Haskell
Survey 2022</a>:</p>
<p><img src="survey.png" /></p>
<ul>
<li>over <strong>17k</strong> LOC Haskell</li>
<li>supports all platforms: Linux, Windows, macOS, FreeBSD</li>
<li>first thing new Haskell users get exposed to</li>
</ul>
</div>
<div id="what-is-ghcup-simplified" class="slide section level2">
<h1>What is GHCup (simplified)?</h1>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" tabindex="-1"></a><span class="ex">curl</span> <span class="at">-s</span> <span class="at">-L</span> <span class="dt">\</span></span>
<span id="cb2-2"><a href="#cb2-2" tabindex="-1"></a> <span class="st">&#39;https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-linux.tar.xz&#39;</span> <span class="kw">|</span></span>
<span id="cb2-3"><a href="#cb2-3" tabindex="-1"></a> <span class="fu">tar</span> <span class="at">-xJ</span> <span class="at">-C</span> /tmp <span class="kw">&amp;&amp;</span></span>
<span id="cb2-4"><a href="#cb2-4" tabindex="-1"></a> <span class="bu">cd</span> /tmp/ghc-9.6.5-x86_64-unknown-linux/ <span class="kw">&amp;&amp;</span></span>
<span id="cb2-5"><a href="#cb2-5" tabindex="-1"></a> <span class="ex">./configure</span> <span class="at">--prefix</span><span class="op">=</span><span class="st">&quot;</span><span class="va">$HOME</span><span class="st">/.local&quot;</span> <span class="kw">&amp;&amp;</span></span>
<span id="cb2-6"><a href="#cb2-6" tabindex="-1"></a> <span class="fu">make</span> install <span class="kw">&amp;&amp;</span></span>
<span id="cb2-7"><a href="#cb2-7" tabindex="-1"></a> <span class="fu">rm</span> <span class="at">-rf</span> /tmp/ghc-9.6.5-x86_64-unknown-linux/</span></code></pre></div>
</div>
<div id="what-is-ghcup-really" class="slide section level2">
<h1>What is GHCup really?</h1>
<ul>
<li><img src="open-box.png" id="id" class="class" width="32"
height="32" /> installer (portable)</li>
<li><img src="debian.png" id="id" class="class" width="32"
height="32" /> distribution channel</li>
<li><img src="feedback.png" id="id" class="class" width="32"
height="32" /> feedback channel</li>
<li><img src="qa.png" id="id" class="class" width="32" height="32" />
testing/QA gateway</li>
<li><img src="user.png" id="id" class="class" width="32" height="32" />
provider of sane defaults (e.g. “recommended” GHC version)</li>
<li><img src="chain-saw.png" id="id" class="class" width="32"
height="32" /> glue for holistic toolchain experience
<ul>
<li>VSCode, stack, cabal-install integration</li>
</ul></li>
<li><img src="ghaction.png" id="id" class="class" width="32"
height="32" /> CI provisioning (e.g. github actions)</li>
</ul>
</div>
<div id="the-difference-to-gentoo" class="slide section level2">
<h1>The difference to Gentoo</h1>
<ul>
<li>one-man project (mostly)</li>
<li>much tighter coupling between upstream (e.g. GHC developers) and
downstream (GHCup developers)
<ul>
<li>heavier on relationship issues</li>
</ul></li>
<li>much more responsibility</li>
<li>position of authority</li>
</ul>
</div>
<div id="relationships-in-detail" class="slide section level2">
<h1>Relationships in detail</h1>
<p>Dependencies:</p>
<ul>
<li>supported tools
<ul>
<li>GHC</li>
<li>Cabal</li>
<li>HLS</li>
<li>Stack</li>
</ul></li>
<li>decisions that affect us
<ul>
<li>release frequency</li>
<li>upstream CI</li>
<li>platform support</li>
<li>binary distributions (the
<code>.tar.gz</code>/<code>.zip</code>)</li>
</ul></li>
</ul>
</div>
<div id="relationships-in-detail-1" class="slide section level2">
<h1>Relationships in detail</h1>
<p>Dependents:</p>
<ul>
<li><img src="haskell_logo.png" id="id" class="class" height="32" />
Haskell developers
<ul>
<li>beginners, advanced, students, companies</li>
</ul></li>
<li><img src="person.png" id="id" class="class" width="32"
height="32" /> end users (e.g. compiling pandoc from source)</li>
<li><img src="ghaction.png" id="id" class="class" width="32"
height="32" /> GitHub CI
<ul>
<li>GitHub images, Haskell repos</li>
</ul></li>
<li>🪞 mirrors
<ul>
<li><a href="https://mirror.sjtu.edu.cn/docs/ghcup">sjtug</a></li>
</ul></li>
<li>🧰 tools
<ul>
<li><a
href="https://github.com/haskell/vscode-haskell">vscode-haskell</a>, <a
href="https://play.haskell.org/">Haskell playground</a>, <a
href="https://github.com/williamboman/nvim-lsp-installer">nvim-lsp-installer</a></li>
</ul></li>
</ul>
</div>
<div id="other" class="slide section level2">
<h1>Other</h1>
<ul>
<li><p>the idea of a distribution is to create a user experience</p>
<ul>
<li>you log into your computer and install a program and everything just
works</li>
<li>or: something doesnt work… what are your next steps?</li>
</ul></li>
<li><p>you create an experience</p></li>
<li><p>the distribution is that brings all the pieces together:
installation, service management (systemd, openrc, initd), kernel
updates, support</p></li>
<li><p>lesson: composition</p>
<ul>
<li>functions</li>
<li>libraries</li>
<li>programs (unix)</li>
</ul></li>
<li><p>lesson: specifications</p>
<ul>
<li>LSP (open source milestone)</li>
</ul></li>
<li><p>lesson: caring about features and code instead of maintenance and
collaborations</p></li>
<li><p>dicatorships work</p></li>
<li><p>decision making (processes)</p>
<ul>
<li>lightweight when risk of mistakes is low (can revert?)</li>
</ul></li>
<li><p>tests in CI are garbage</p></li>
<li><p>reverse dependencies &lt;-&gt; me &lt;-&gt; users</p></li>
<li><p>collaboration vs boundaries, communication</p></li>
<li><p>what distribution work taught me for programming</p></li>
<li><p>posix principles and their connection to functional programming
(streams)</p></li>
<li><p>strings</p></li>
<li><p>open source politics</p></li>
<li><p>how to drive change</p></li>
<li><p>how to handle contributions (contribution experience, PRs,
documentation, mentoring,. ..)</p></li>
<li><p>collaboration</p></li>
<li><p>relationship between industry and FOSS</p></li>
<li><p>what is the main currency (money vs energy)</p></li>
<li><p>bus factor</p></li>
<li><p>feedback from universities regarding Haskell tooling</p></li>
<li><p>respect other projects when contributing</p></li>
<li><p>enabling and supporting (switching from coding wizard to support
role)</p></li>
<li><p>project life cycles</p></li>
<li><p>support</p></li>
<li><p>stability vs. ..</p></li>
<li><p>boundaries vs collaboration</p></li>
<li><p>trust, respect, relationship</p></li>
<li><p>working mode in open source</p></li>
<li><p>dealing with expectations</p></li>
<li><p>how to test (on the end users system)</p></li>
<li><p>what if you diverge from the happy path</p></li>
<li><p>why is stability an interesting goal?</p></li>
</ul>
</div>
</body>
</html>