Adds a first blog post

This commit is contained in:
Benjamin Bach 2024-07-05 00:38:22 +02:00
parent 241f66978f
commit 0adcc1537b
No known key found for this signature in database
GPG key ID: 486F0D69C845416E
8 changed files with 105 additions and 17 deletions

View file

@ -3,5 +3,3 @@ title = 'Blog'
date = 2023-01-01T08:30:00-07:00 date = 2023-01-01T08:30:00-07:00
draft = false draft = false
+++ +++
Please refer to blog posts on https://overtag.dk/

View file

@ -1,10 +0,0 @@
+++
title = 'Post 2'
date = 2023-02-15T10:00:00-07:00
draft = true
tags = ['red','green']
+++
Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.
Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.

View file

@ -0,0 +1,88 @@
---
title: 'A Venn diagram of Open Source governance'
date: 2024-07-04T10:00:00-07:00
draft: false
tags: ['opensource','governance', 'maintenance']
---
Good governance of Open Source projects is really important:
* Allows for direction, priority and planning (both short and long-term).
* Allows for opinionated design decisions.
* Can resolve conflicts.
* Enables a financial body, i.e. to uphold fixed costs or compensate developers.
* Oversees maintainer workloads.
* Can enforce a Code of Conduct
But rather than having clear governance, I see most projects (including my own) default to an unfulfilled mix of maintainers, community and owners.
Here is the diagram, I'll discuss it a bit, but you can also stop reading here and use it in your own way before reading what I had in mind.
{{< figure src="./venn-maintenance.png" alt="A Venn diagram showing 4 intersections of Maintenance, Ownership and Community" >}}
## Definitions
Ownership, maintenance and community are fluent categories, vulnerable to different definitions. You can make up your own, too. Here, we understand **community** loosely as someone who uses the software and would care to raise an issue in a repository or participate in support questions. Let's say that the owner of the project posts all the issues themselves and answers all the support questions: Then the project doesn't have a community.
A project has **maintenance** as long as the owner or someone else is around to keep it alive.
Finally, **ownership** is about who does all the executive calls: Adds new maintainers, sets a direction for the project.
We can use such a diagram to understand and discuss governance of Open Source projects, but we can also stop to think:
## When is a project really Open Source?
Does it have a LICENSE file that says it's legally speaking Open Source? Okay, nice, but there are so many examples of unused/unusable "code dumps" with LICENSE files. Clearly there are other issues at stake:
* Does the project have documentation?
* Is the project relevant to others?
* Is it possible to send in a Pull Request?
* Barriers of usage: Does the project hide anything about how it can be self-hosted, built locally etc.?
* **Is there some participatory governance in place?**
I asked the other question to show that in some conceptual understanding of a sliding scale of less<=>more Open Source, then a democratic governance model would - in my opinion - make a project more Open Source.
You can also ask this in a framing of sustainability and health. Asking questions about the governance of a project unlocks the same areas of concern as asking about its general health and whether it's gonna be alive next year.
## Intersection 1: Ownership and maintenance
Here we have the first of several classics: This case happens often when the large company or NGO have created an Open Source project and simply published it. They might even have documentation. But because of factors that should be understood better, they don't have a community.
* Maybe the users are passive or lack motivation?
* Maybe the project isn't relevant to anyone else but the company/NGO that owns it?
* Maybe paid staff take up too much space, pushing out the community?
* Maybe the project looks and feels commercial, making potential community behave towards the maintainers as if they are a customer service?
## Intersection 2: Ownership and community
Have you ever seen a project where there's lots of community and someone owns the project but isn't maintaining it? It's that project where hundreds of PRs are stale, and people are talking about which fork to switch to.
How did we get here? Well actually, there's a bit of success here: Despite the lack of maintenance, the community is still around waiting for something to happen.
* Clearly, the owners should have not also been the sole maintainers
* ...but it's not just the owner's fault. While they were still maintaining the project, the active community could have noticed the single-maintainer-and-owner issue.
* The [BDFL](https://en.wikipedia.org/wiki/Benevolent_dictator_for_life)-by-default is undesirable: If it's declared as an intentional choice, then we can rely on it.
## Intersection 3: Maintenance and community
Is it a problem that there is no owner around? Well, yes it will eventually be a problem. You need an owner to onboard new maintainers, and you need them to do other owner things. Changing settings in a GitHub organization, CI, package publications etc. The absence of an owner might not seem problematic at first, but problems will usually start appearing and slowly suffocate the energy of community and maintainers.
I know many examples where this has happened. They are both related to having a single owner, or a company that hasn't take responsibility for the community and maintainers they have made dependent.
The owner clearly should have given away the keys instead of disappearing with them. But why haven't they?
* Motivational challenges: People and companies may not benefit from their own projects and disappear.
* Identifying a new owner is too difficult.
* Reality-check pending: The owner may not perceive their own absence.
## Intersection 4: Maintenance, community and ownership
Here is the sweet spot where good, democratic governance can thrive: There's an active community, maintainers and present owners. This is where things can get started.
How do we get from having all the components to an actual governance model? Well, that's a whole other topic. But having all the ingredients seem necessary... ?
## Next steps
While we can think about many ways of understanding how Open Source projects are failing or succeeding, good people are already hard at work. I recommend checking out the new [Django Commons](https://github.com/django-commons) project, which is building on the lessons from [Jazzband](https://jazzband.co/).
*This blog post was initially posted by Benjamin Balder Bach on [https://overtag.dk](https://overtag.dk/v2/blog/maintenance-venn/)*

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View file

@ -1,7 +1,11 @@
{{ define "main" }} {{ define "main" }}
{{ .Content }} <!--<h2>Recent articles</h2>
{{ range site.RegularPages }} {{ range site.RegularPages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> <h3><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h3>
<!--{{ .Summary }}--> {{/* .Summary */}}
{{ end }} {{ end }}
-->
{{ .Content }}
{{ end }} {{ end }}

View file

@ -3,6 +3,14 @@
{{ .Content }} {{ .Content }}
{{ range .Pages }} {{ range .Pages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
{{ $dateHuman := .Date | time.Format ":date_long" }}
<p><time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time></p>
<p>
{{ .Summary }} {{ .Summary }}
{{- if .Truncated -}}
<a href='{{ .RelPermalink }}'>&hellip; Read more</a>
{{- end -}}
</p>
{{ end }} {{ end }}
{{ end }} {{ end }}

View file

@ -6,5 +6,5 @@
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time> <time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
{{ .Content }} {{ .Content }}
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} {{/* partial "terms.html" (dict "taxonomy" "tags" "page" .) */}}
{{ end }} {{ end }}