Mastodon Embeds, Content Warnings, and Ethical Design Choices

So for about the last week I’ve been somewhat involved in a really frustrating situation in Mastodon development, which has thankfully been resolved. Let me preface this by saying that I am in no way a developer, I’m simply a user who runs their own masto instance who was frustrated enough with a change to both revert it on my server and voice my opinion on GitHub. And if it was just this one issue I wouldn’t be writing a blog post about it, but the core issue is about a pattern of behavior and a concerning attitude from the lead developer, Gargron.

For those who don’t know what the hell I’m talking about, Mastodon is an open source Twitter-like social network that is decentralized and federated. The official user’s guide explains it much better than I could, so I suggest reading the linked intro. The change in question is about the content warning system and metadata for link embeds on other platforms like Facebook, Twitter, Discord, or any other platform that pulls Open Graph metadata.

The box to compose a toot with a content warning

So the content warning, or CW, system. This allows you to choose to hide a post behind a warning and a clickthrough, and any attached media will automatically be hidden as sensitive as well (you can mark media as sensitive without a CW as well, but usually anything marked sensitive will be put behind a CW anyway).

A toot with a content warning and an attached image

Previously the metadata would cause a link in an Open Graph enabled platform, e.g. Discord, to embed like this

An embed in Discord1 with only the content warning text as the og:description tag

As of the current stable release it looks like this

An embed in Discord with the content warning text, two newlines, and the body text as the og:description tag as well as the image attachment as the og:image tag

Thankfully after a lot of back and forth, a reversion + revamp was put forth and merged, which has example images in the linked PR discussion.

This change was made almost a month before the final release of 2.3.0, during which time very few people would have actually ran into it as running from master is very much not recommended for a production instance and even the instances using the release candidates in the prerelease testing are going to be mostly mastodev adjacent. Unfortunately it also means Gargron was unprepared for it to become a sticking point of the community. The discussion on the pull request that implemented the change, in which I chimed in and subsequently followed, got a bit heated and also showcased the stubbornness that Garg is unfortunately noted for. Now I was already somewhat aware of this temperament of his and so was frustrated but not surprised. Wanna know what got me pissed off though? From the federated timeline I came to a thread about this situation in which Gargron got involved, and one of his responses was this:

Eugen @Gargron

@cassolotl @clar @HeckTheCistem @maloki Look, I'm not making bank on this. I think I'm slightly above German minimum wage. In the open-source scene, that's a great accomplishment. Compared to Twitter's 200 engineers, that's nothing. But it's my passion and I have fun doing it, so we get the Mastodon that we see. Don't mess with that. If you disagree with my decisions, fork, or switch to one of the existing forks. I listen to feedback. But I don't *owe* anyone to agree with it.

· Web · 2 · 9

Wait, did that last bit say again?

I listen to feedback. But I don’t owe anyone to agree with it.

Yeah, true, you don’t owe anyone to agree with feedback, Eugen, but you sure as hell have a responsibility to not try your damndest to dismiss a criticism that isn’t from your own friends and/or others heavily involved in development until it becomes obvious that the users offering it aren’t going to back the fuck down in the face of your stubbornness. Especially since unless an instance’s sysadmin changes the localization YML files you get this (or a translation thereof) on the landing page of every single instance:

A more humane approach Learning from failures of other networks, Mastodon aims to make ethical design choices to combat the misuse of social media.

Yeah, acting dismissive about your user’s concerns about how Open Graph embeds not respecting content warnings in the interest of ~engagement~ sure is some ethical design choices right there. That’s definitely the sort of project leadership I look for.

Okay that’s enough snarky bitchiness from me, but in all seriousness if Gargron wants to talk the talk about breaking free of the shit of corporate social media, he needs to walk the fucking walk. He got lucky that his passion project for an alternative to GNU social without its technical debt happened to catch on with a good number of marginalized folks sick of the dumpster fire of Twitter and its enablement of nazis, white supremacists, and harassment in general. Now he’s built masto’s brand around its moderation tooling, robust privacy features, and yes, the content warning system.

I think he truly believes in doing better, but an unwillingness to look past his own privileged perspective leads to, well, shitstorms like this. It leads to a userbase that dreads having to bring up concerns with development. It leads to resentment among users for the guy who, while nominally only in charge of the flagship mastodon.social instance, is essentially the Benevolent Dictator for Life of the software development and if you don’t like it you can go fork yourself.2 It leads to god knows how many follower only toot threads about how fed up people are with this bullshit, and for some people to just abandon ship either back to Twitter or to other OStatus/ActivityPub projects. It’s not good for the health of either the community or the continued development and ~engagement~ of the software.


  1. These Discord screenshots are slightly modified using Chromium’s Discord’s element inspector from how they actually appear due to my own testing of modifying CW behavior in Open Graph tags
  2. (On that note the glitch-soc fork is p nice and the custom profile fields are a great feature)
Follow the discussion on:

Leave a Reply

Your email address will not be published. Required fields are marked *