Surfacing from replies (see context upthread).

I’ve watched the pendulum swing back and forth multiple times in my career between “code reuse ftw!!” and “no dependencies!!” The one thing I can say with confidence is that both those extremes as dogma are ridiculous and costly. It’s all tradeoffs; you can’t escape the part where you think carefully and contextually.

1/ https://hachyderm.io/@inthehands/115237696859291899

Paul Cantrell (@[email protected])

@[email protected] @[email protected] I do agree to a large extent — or at least hope for it to be true! — but your sentiment suggests that •quality• of maintenance matters at least as much as the sheer •quantity• of dependencies.

Hachyderm.io

A second thought now, newly surfacing in the wake of the Wordpress fiasco and the emerging Ruby gems crisis:

We should pay a lot more attention to the •human system• dependencies we’re introducing when we import a library, not just the code.

2/

The excellent @kissane (https://erinkissane.com) and @jenniferplusplus (https://jenniferplusplus.com/) have written a lot about the idea of “governance” in tech: the human networks and processes that surround the things that we build. Erin has proposed — and I agree, though I long failed to see it! — that governance is the gaping hole in the way we build OSS, shared infra, and the whole technology commons.

3/

Any developer worth their salt knows that the outputting code is the easiest part of software development, and that code as an artifact has little value without everything that surrounds it: the people, the shared knowledge, the practices (both formal and informal), the infrastructure, the networks of trust, etc etc.

And yet!! like fools, we’ve got ourselves hung up on OSS licenses and copyright — the legal structures surrounding the code itself — as if code were in fact the only thing that really matters. As if we didn’t know better.

4/

There are light years between (1) “I thought this code was useful, so I shared it online and slapped an OSS license on it” and (2) “We set up a foundation to fund ongoing maintenance of this critical OSS project while guaranteeing its independence.”

The “dependency, fork, or rewrite?” question looks very, very different for (1) vs (2).

Yet how many of us think about where any given library dependency sits on that continuum when we add a dependency? Even if we try, how can we ••tell••?

5/

I’d venture that the situation depicted in the classic and obligatory xkcd on the topic (https://xkcd.com/2347/) is rooted in the failure to distinguish (1) and (2).

So is a lot of OSS burnout: somebody shares something cool in the spirit of (1), maybe even tries to be a good individual steward of it, and next thing you know people are beating down their door with demands and complaints as if they are (2).

6/

Somebody (maybe it was Erin? can’t remember) proposed that we should have a menu of governance structures just as we currently have a menu of OSS licenses, crafted with the same care and granted the same importance, so that somebody looking to share code can:

- communicate very clearly where they are on that continuum from “Here’s some cool code, maybe it’s useful” to “There is solid, sustainable human infra behind this code,” and

- get guidance and support so that, as their project grows, it moves smoothly along that continuum of governance.

7/

That’s a really hard problem, and not one that will be solved in my ad hoc Saturday posts (or in my replies). I have no answers. I do however have one model to study, which is this org my dad helped found:

https://www.wildernessalliance.org

They help people set up local wilderness stewardship volunteer groups. (There’s a wilderness area near you! You want to help take care of it! How do you do that? What is actually helpful?? What are models and best practices??? Where do you even start????)

8/

National Wilderness Stewardship Alliance

Bringing together volunteer wilderness stewardship groups across America.

National Wilderness Stewardship Alliance

How do they do this?

They don’t just slap some guides online and call it a day.

They run trainings. They hold conferences. They get people talking. They do an •unimaginable• amount of work building relationships, talking to people, learning about needs, learning about successes, sharing, trying to make what works reproducible.

It is significant ongoing human labor. That’s something we software folks (especially in OSS) have been tragically dismissive of, allergic to. We’ve got to get over it.

9/

The longtime appeal of the BDFL (“benevolent dictator for life”) model of OSS governance comes in part from the fact that most projects naturally start there — “here’s some cool code” — and partly in our impostor-phenom-driven culture of hero worship, but…

…it also comes from our dev culture allergy to taking human systems seriously.

10/

The idea that having a benevolent dictator forever is actually a good idea? That’s a nonsense thought rooted in the feeling that all this human stuff •isn’t even a real problem•: mushy nonsense, female-coded and thus low-status, can’t we just build good technology all day and not think about people.

(No, dumbass, you can’t, not if you actually want it to be good.)

11/

My dear fellow developers, is there any single phrase that makes you want to just punch someone faster than “Can’t you just…?”

NO, WE CAN’T JUST. THIS PROBLEM IS ACTUALLY HARD, AND YOU ONLY THINK IT’S EASY BECAUSE YOU DON’T EVEN •SEE• THE PROBLEM IN THE FIRST PLACE.

The BDFL model of OSS governance is •us• saying “Can’t you just…?”

Sorry. We’re doing it too. Sorry to break it to you.

12/

One of the obligatory classics on the general topic, ht @carto:

https://mastodon.online/@carto/115237953550201658

13/

carto (@[email protected])

@[email protected] Jo Freeman's "The Tyranny of Structurelessness" has come into my mind several times when thinking about software development communities. There's that refusal to admit that if you don't pay attention to the communities, you'll end up replicating the pre-existing power structures.

Mastodon

Another classic, ht @cratermoon. At first pass, this appears to be a purely technical description of a surprising attack — and then his closing remarks focus more on the then-nascent cultural and legal context of cybersecurity concerns.

But lurking underneath his remarks is this crucial insight: you can’t ever just trust •code• when you’re writing software; at some level, you also have to trust •people•.

https://zirk.us/@cratermoon/115237945294118620

14/

crater🐮n (@[email protected])

@[email protected] It seems Ken Thompson was onto something. https://dl.acm.org/doi/epdf/10.1145/358198.358210

zirkus

Aha!!! This is one of the pieces I was trying and failing to think of upthread, from the always excellent @jenniferplusplus (and I’m embarrassed that I couldn’t bring it to mind earlier, sorry Jennifer, it’s so good and so important):

https://jenniferplusplus.com/the-free-software-commons/

15/

The free software commons

Free and open source software has become a modern commons, but now it's vulnerable. Freedom isn't sufficient to secure it for the future.

Jennifer++

@inthehands I linked to an article from tidelift in that post, as part of a discussion that money is at best part of the solution, and would just exacerbate the problems in isolation.

That link now redirects to sonar source, because they bought tidelift. I think rereading that section with that context really accentuates the point

@inthehands @jenniferplusplus Tidelift really doesn't fit any open source stuff I have ever done. It's basically designed for "library dependency trees in programming languages with their own package managers".

@inthehands @jenniferplusplus

I think the problem is that the right governance structure changes based on maturity and scale of projects.

I maintain a couple of libraries where I wrote most of the code and they’re both more or less ‘finished’. I haven’t written any of the new code in them for a while (requirements never completely finish changing but they change very slowly in some cases), so my role is code review and checking that other contributors don’t do anything silly. In one, other people often jump in with code review so my main task is hitting the merge button. In both, a couple of people have sufficient access that, if I disappeared, the project could survive. I guess that fits the BDFL model, but there isn’t really anything that needs dictating, it’s more Unpaid Caretaker For Life. And that’s fine because the total amount of effort across all contributors is maybe two weeks per year, and my share of that is small. Any bigger structure of governance would take far more than the total effort that these projects have or need.

I’m also running a slightly larger project where I probably wrote a bit under half the code and that proportion is constantly shrinking. Several people are paid to work on it and a few companies are using it. There, I have made sure that there are two other people who have ‘owner’ roles on the infrastructure. This highlights one of the limitations with existing infrastructure though: anyone with owner permission is omnipotent. They can do anything, including adding more owners and removing owner role from the others. What I really want is to make certain actions require explicit consent from a quorum and others to happen automatically with an option for other owners to undo them within 24 hours. But even without that, two other people with their fingers on the emergency stop button is enough oversight for now.

I’ve also been on the FreeBSD Core Team for two terms. FreeBSD had around 300 active contributors back then, I think it’s more now. It has a lot of downstream users, ranging from individuals to large companies. It has a non-profit Foundation that employs some people to work full time and some contractors for specific tasks. There’s a lot of consensus building required for big changes and the governance structures need to reflect the scale. It’s not perfect but it’s one of the better models I’ve seen for big projects. But if I tried to adopt it for one of my small libraries, I’d have to run elections where only one or two people were eligible to vote (you must have made a commit to one of the FreeBSD repos [including docs] in the last year to vote in Core elections).

I suspect a lot of the problems come from changing scale. First, you have to notice that you’ve outgrown the existing structures. Then you have to do something about it.

For some people, giving up control is hard. My personal goal with any open source project I create is to minimise my effort. This is why I put effort into code review and engaging with bug reports, because if I can get one other person to have decent taste and actively contribute, that doubles my productivity. And when I’m in a position of going to code reviews and seeing the comments I would have written, I know it’s safe to step back. This is probably related to your point: if you focus on the code and not the people, you won’t train people who can replace you and so you feel you have to remain in control.

I had a similar discussion with quite a few people about the GSoC. A lot of people wanted successful projects to come out of GSoC and measured them as whether functional code lands. For me, the deliverable from a GSoC project is a contributor. If, after the project ends, the student understands the codebase, engages with the community, and wants to keep participating, that’s a success, even if no code from the summer lands.

@inthehands
My last boss would routinely say, "All you have to do is just..."

Attention to detail and implied tasks were not his strong suit.

@inthehands this phrase is soul-crushing!
@inthehands as a computer whisperer, I see it as my job to make text stuff happen for people who don't understand tech stuff. Maybe you're way better than me, and you can tell people who ask for things to get bent.

@inthehands "benevolent dictator for life" comes from Python and was supposed to be a *joke*. (as I'm sure you know.)

When GVR & co realised they needed more formal governance … they arranged it.

would that others did the same.

@fishidwardrobe @inthehands
I think it was also meant to sound like a sentence?
As in, nobody would want to be forced to lead a project but when you are that person, you might not always have a choice.

@inthehands not everyone has has the skill to do this human stuff.

Some people find dealing with humans incredibly stressful.

@wolf480pl
This is why it is important to form effective teams of people with non-identical competences.
@inthehands
so I guess he hard part is: how do you go from 1 maintainer to 2
@wolf480pl
That is a genuinely hard problem! And a deep problem! There should be ready assistance for those who want it!

@inthehands

I sometimes wonder how many great nascent software projects get thrown on a public repository and then never actually shared with people in forums, emails, or even private messages as a solution because the author isn't interested in being a BDFL and doesn't see other options should the thing take off.

@inthehands Jo Freeman's "The Tyranny of Structurelessness" has come into my mind several times when thinking about software development communities. There's that refusal to admit that if you don't pay attention to the communities, you'll end up replicating the pre-existing power structures.
@inthehands
Sometimes it seems like a BDFL situation is someone getting a tiny little bit of power over their corner of the universe and not wanting to give that up, no matter the cost.
@carol
Something like that sure seems to be the case with Wordpress.
@inthehands
Somehow I have a suspicion that the original concept behind FOSS wasn’t to become the bedrock foundation of surveillance capitalism.

@inthehands this is superb - thank you! I find the whole concept and practice of stewardship crucial to any sensible approach to software and (well) anything really.

Feels like something like 'continuous stewardship' is a key concept we need...

https://speakerdeck.com/matthewskelton/continuous-stewardship-effective-humane-services-enriched-by-software-fast-flow-conf-2024-london-matthew-skelton

Continuous Stewardship - effective, humane services enriched by software - Fast Flow Conf 2024 - London - Matthew Skelton

In an age of AI-generated software services which have increasingly life-altering effects on humans, how can we promote effective ongoing evolution of s…

Speaker Deck
@matthewskelton
I’m really glad to hear people introducing the idea of stewardship in more contexts. I’m sure the word will get flattened if / as soon as it’s more widely used, but we have to keep trying anyway!
@inthehands i know I've suggested similar things
@jenniferplusplus
Ah! I may be thinking of something you said too!
@inthehands this is definitely my most coherent discussion of (the lack of) governance in foss
https://jenniferplusplus.com/the-free-software-commons/
The free software commons

Free and open source software has become a modern commons, but now it's vulnerable. Freedom isn't sufficient to secure it for the future.

Jennifer++
@inthehands It's not the full spectrum, but https://unmaintained.tech/ at least anchors one end of that range.
No Maintenance Intended

@ancoghlan
Oh, that’s good. I may actually slap this on a few projects.
InnerSourcePatterns/patterns/2-structured/governance-levels.md at main · InnerSourceCommons/InnerSourcePatterns

These patterns document how to apply open source principles and practices for software development within the confines of an organization - aka InnerSource. - InnerSourceCommons/InnerSourcePatterns

GitHub
@mainec Interesting. Seems like many useful ideas there.
@inthehands Maybe one of the positive side effects of recent EU regulations on software liability will be to have these communications and make the context clear to everyone, between "this software is provided AS-IS with no warrany whatsoever" and "this software is part of a critical supply chain" so that the ecosystem of the latter is likely to set up the Foundation and related income stream for the primary maintainers, because the downstream who incorporates the software into their product is liable in the first case, but if they pay the Foundation they can shift liability to that, and in doing so provide the Foundation the resources it needs to be a steward of the software. Neat trick, if it works.
@inthehands Okay, but have you considered that most of us don't care in the slightest when some nonsense company depending on our project runs into the wall?

Most of us program for fulfillment, for an ideal, or while participating in a digital counterculture. We don't give a singular damn whether it fulfills some corporate audit maintainability standard printed on photo paper.

If it breaks some techbro's docker setup, I'm *happy*. My code is my artistic and personal expression and doesn't need to be "governed", thanks a lot.

@lianna
Yet you definitely depend on code that was developed with the idea idea that others (including you) should be able to rely on it (and if its just the stdlib/runtime of the programming language you use).

Part of @inthehands's idea was that there should be a labeling system similar to licenses that allows you to say “this is just for fun, whatever works works, good luck” to anyone using you code while others can communicate that they have build elaborate structures to ensure that code like yours (that depends on theirs) will continue to work for you at least.

@inthehands many of the hazards that go with hiring an asshole to be a dev don't go away when you instead use a lib authored by an asshole.
@inthehands like a good way to illustrate that is imagine you don't hire someone because they are, to put it lightly, "not a cultural fit" but encourage them to make a thing you need with the promise that you'll donate to them to fund their efforts. What did this actually solve? Your devs are still going to have to interact with this person, maybe make PRs or write up issues on their project. I know this isn't your main point, just an example of how you can't look at a project as just code.
@inthehands copyright and licenses are part of the governance and community surrounding a project, albeit a diminutive part of what's needed.

@inthehands the whole idea behind the four freedoms is that no matter what problem you find with the software you use, you have the ability to solve it youtself. It may take a lot of effort, it may not be the right use of that effort, but technically, you don't have to rely on anyone.

And that's a hell of a drug.
And the satisfaction when you patch a problem you found and run a patched version is amazing.

The hard question is do you deal with updates, and if so, how.