Yesterday, you probably saw this informal post by one of our head admins (Chris Remington). This post lamented some of the difficulties we’re running into with the site at this point, and what the future might hold for us. This is a more formal post about those difficulties and the way we currently see things.
Up front: we aren’t confident in the continued use of Lemmy. We are working through how best to make the website live up to the vision of our documents—and simply put, the vast majority of the limitations we’re running into are Lemmy’s at this point. An increasing amount of our time is spent trying to work around or against the software to achieve what we want rather than productively building this community. That leaves us with serious questions about our long-term ability to stay on this platform, especially with the lingering prospect of not having the people needed to navigate backend stuff.
Long-time users will no doubt be aware of our advocacy for moderator tools that we think the platform needs (and particularly that we need). Our belief in the importance and necessity of those tools has only hardened with time. Progress of those tools, however—and even organizing work on them—has been pretty much nonexistent outside of our efforts from what we can see.[1] In the three months since we started seriously pushing the ideas we’d like to see, we’re not aware of any of them being seriously considered—much less taken up or on the way to being incorporated into Lemmy.
In fact: even within the framework of Lemmy’s almost nonexistent roadmap and entirely nonexistent timetable on which to expect features it has been made clear to us that improving federation or moderation on the platform are not big priorities.[2] We have implicitly been told that if this part of the software is to improve we will need to organize that from scratch. And we have tried that to be clear. Our proposal is (and has been) paying people bounties for their labor toward implementing these features, in line with paying all labor done on our behalf—but we’ve received mixed messages from the top on whether this would be acceptable. (Unclear guidance and general lack of communication is symptomatic of a lot of our relation with the Lemmy devs in the past few months.)
Things aren’t much better on the non-moderator side of things. The problems with databases are almost too numerous to talk about and even Lemmy’s most ardent supporters recognize this as the biggest issue with the software currently. A complete rewrite is likely the only solution. Technical issues with the codebase are also extensive; we’ve made numerous changes on our side because of that. Many of the things we’re running into have been reported up the chain of command but continue to languish entirely unacknowledged. In some cases bugs, feature requests, and other requests to Lemmy devs have explicitly been blown off—and this is behavior that others have also run into with respect to the project. Only very recently have we seen any overtures at regular communication—and this communication has not hinted at any change in priorities.
All of what was just described has been difficult to get a handle on—and having fewer users, less activity, and more moderators has not done a whole lot to ease that. We honestly find that the more we dig and the more we work to straighten out issues that pop up, the more pop out and the more it feels like Lemmy is structurally unsound for our purposes. (One such example of what we’re working with is provided in the next section.)
In summary: we believe we can either continue to fight the software in basically every way possible, or we can prioritize building the community our documents preach. It is our shared belief that we cannot, in the long-term, do both; in any case, we’re not interested in constantly having to fight for basic priorities—ones we consider extremely beneficial to the health of the overall Lemmy network—or having to unilaterally organize and recruit for their addition to the software. We are hobbyists trying to make a cool space first and foremost, and it’s already a job enough to run the site. We cannot also be surrogates for fixing the software we use.
PenguinCoder: A brief sketch of the technical perspective
I’ve said a few words about this topic already, here and here. Other Beehaw admins have also brought some concerns to the Lemmy devs. Those issues still exist. To be clear: this is a volunteer operation and Lemmy is their software; they have a right to pick and choose what goes into it and what to put a priority on. But we have an obligation to keep users safe and secure, and their priorities increasingly stifle our own.
In the case of this happening for open source projects, the consensus is to make your own fork. But:
The problem with forking Lemmy is in starting from all the bad that is inherently there, and trying to make it better. That is way more work than starting fresh with more developers. IE, not using Rust for a web app and UI, better database queries from the start, better logging/functions from the start; not adding on bandaids. A fork of Lemmy will have all of Lemmy’s problems but now you’re responsible for them instead.
We don’t need a fork, we need a solution.
To give just one painful example of where an upstream solution is sorely needed: the federation, blocking, and/or removal of problem images.
- You post an image to Beehaw.
- Beehaw sends your content out to every other server it’s federated with
- Federated server accepts it (beehaw.org is on their allowlist), or rejects it (beehaw.org is on their denylist)
- If the server accepts it, a copy of your post or comment including the images are now on that receiving server as well as on the server you posted it to. Federation at work.
- Mod on beehaw.org sees your post doesn’t follow the rules. Removes it from beehaw.org. The other instances Beehaw pushed this content to, do not get that notice to remove it. The copy of your content on Beehaw was removed. The copy of your content on other servers was not removed.
- The receiving federated instance needs to manually remove/delete the content from their own server
- For a text post or comment that’s removed, this can be done via the admin/mod tools on that instance
- For a post or comment including a thumbnail, uploaded images, etc; that media content is not removed. It’s not tracked where in Lemmy that content was used at. Admin removal of media commences. This requires backend command line and database access, and takes about a dozen steps per image; sometimes more.
There are dozens of issues—some bigger, some smaller—like this that we have encountered and have either needed to patch ourselves or have reported up the chain without success.
Alternatives and the way forward
If possible the best solution here is to stay on Lemmy—but this is going to require the status quo changing, and we’re unsure of how realistic that is. If we stay on Lemmy, it is probable that we will have to do so by making use of a whitelist.
For the unfamiliar, we currently use a blacklist—by default, we federate with all current and newly-created nodes of the Fediverse unless we explicitly exclude them from interacting with our site. A switch to a whitelist would invert this dynamic: we would not federate with anybody unless we explicitly choose to do so. This has some benefits—maintaining federation in some form; staying on Lemmy; generally causing less entropy than other alternatives, etc. But the drawbacks are also obvious: nearly everything described in this post will continue, blacklist or whitelist, because a huge part of the problem is Lemmy.
Because of that we have discussed almost every conceivable alternative there is to Lemmy. We are interested in the thoughts of this community on platforms you have all used and what our eventual choice is going to be, but we are planning on having more surveys in the future to collect this feedback. We ask that you do not suggest anything to us at this time, and comments with suggestions in this thread will be removed.
As for alternatives we’re seriously considering right now: they’re basically all FOSS; would preserve most aspects of the current experience while giving us less to worry about on the backside of things (and/or lowering the bar for code participation); are pretty much all more mature and feature-rich than Lemmy; and generally seem to avoid the issues we’re talking about at length here. Downsides are varied but the main commonality is lack of federation; entropy in moving; questions of how sustainable they are with our current mod team; and more cosmetic things like customization and modification.
We’re currently investigating the most promising of them in greater depth—but we don’t want to list something and then have to strike it, hence the vagueness. If we make a jump, that will be an informed jump. In any case logistics mean that the timetable here is on the order of months. Don’t expect immediate changes. As things develop, we’ll engage the community on what the path forward is and how to make it as smooth as possible.
Other administrators have probably vocally pushed for these things, but we’re not aware of any public examples we can point to of this taking place. Their advocacy has not produced results that we’re aware of in any case, which is what matters. ↩︎
Perhaps best illustrated by the recent Lemmy dev AMA. We’ll also emphasize that Beehaw’s admin team is not alone in the belief that Lemmy devs do not take mod tools or federation issues particularly seriously. ↩︎
I got to be honest. I really don’t care about the federation part of Beehaw and would be quite happy to see it move to a non-federated solution. I mean, how is it even possible to comply with the GDPR when using federation?
GDPR is not an issue per se - we can delete people’s stuff easily. Can’t delete it from other people’s computers, that’s all.
This already applies to email and online archival tools - Lemmy is not much different in that regard. What is on the internet stays on the internet - all we can do is ask for it to be deleted.
Yeah, I worded that badly. I meant from the pov of the user. If I want my posts deleted, how am I even supposed to know how many copies there are out there?although I do see your point regarding archives.
Thing is; you don’t know and we can’t guarantee that. If you delete or ‘purge’ something from an instance you’re on that uses Lemmy, the content will eventually be overwritten by placeholder text. That should be federated to other instances.
Lets take a walk through the Lemmy codebase. First, let us look at the base level of how does Lemmy federate when deleting a local user or sending a request to have another instance delete a user. That can be done via an API call so starting there, looks like theres a struct to delete a user in persons.rs
in the api_common crate.
pub struct DeleteAccount
Hmm okay now where are the functions that call it? Searching for DeleteAccount
shows us it’s there in delete.rs
and a function called delete_account
is there too. Looking at that function it seems to do a few checks first, verify your session token, verify your password, then if selected to purge content it will run the function to purge_user_account otherwise just delete_account
which only marks it to be removed in the database and hides content from the public.
Searching again, we find the function pub async fn purge_user_account
in another file, utils.rs
which seems to perform those actions! Removes your avatar and banner images, deletes your comments and posts on the current instance, and removes images submitted by you if it was an image post/URL. Not any uploaded in the post body, not in the comments, not as a emoji/response to someone else. Any of those are just… dangling. Then the function Person::delete_account
from another source file, person.rs is called and that appears to be the same one called when just doing a delete vs purge. This delete function for person, updates your ‘row’ in the database to have no email, username, avatar, banner, or bio text. Then marks the column as deleted
. A database scheduled task runs daily to overwrite that content if deleted
is set to true. No data was actually deleted yet, just some profile settings overwritten eventually.
Back in delete.rs
it looks like finally, the data in the DeleteAccount
structure is sent in an activitypub request to other instances to remove your user. The activitypub DeleteUser
shows Lemmy will run a view verification checks, then do the same thing as the above paragraph on this instance. purge_account
vs delete_account
with the same caveats of orphaned images and content. Your account is gone! Your content is not… and until Lemmy tracks where images or files are at and how they are associated with a user…
References:
https://github.com/LemmyNet/activitypub-federation-rust/blob/main/docs/08_receiving_activities.md
That’s not even touching on backups, caches, CDNs, etc etc
A few high level notes about this post, given some of the discussions and behavior in the informal chat post by Chris the other day:
- We understand this is perhaps the biggest crossroads we’ve hit yet, and a seriously big issue. It’s understandable that you might have strong emotions about the Fediverse as a whole, or the action we are taking as an instance. If you are not from our instance and you come into this thread with a short hostile comment about how we aren’t respecting your views or that we should never have joined the Fediverse in the first place, your comments will be removed and you will be banned.
- Any suggestions for what we should do, that involve actual effort or time, such as finding developers to fix the problems we’ve had should be accompanied with an explanation of how you’re going to be helping. We’ve lodged countless github tickets. We’ve done our due diligence, so please treat this post with good faith.
- Similarly doing nothing more than asking for more details on the technical problems we are struggling with, without a firm grasp of the existing issues with Lemmy or the history of conversations and efforts we’ve put in is not good faith either. We’re not interested in people trying to pull a gotcha moment on us or to make us chase our tails explaining the numerous problems with the platform. If you’re offering your effort or expertise to fix the platform you’re welcome to let us know, but until you’ve either submitted merge requests or put in significant effort (Odo alone has put in hundreds of hours trying to document, open tickets, and code to fix problems) we simply may not have the time to explain everything to you.
- I want to reiterate the final paragraph here in case you missed it - we are not looking to make any changes in the short term. We expect it would be at the minimum several months before we made any decisions on possible solutions to the problems we’ve laid out here.
- Finally, I want to say that I absolutely adore this community and what we’ve all managed to build here and that personally, I really care about all of you. I wish we weren’t here and I wish this wasn’t a problem we are facing. But we are, so please do not hesitate to share your feelings 💜
I’m sad to see how dire the situation is on the moderation and admin side of things, but I just wanted to say best of luck and wish you the best no matter what you decide.
The communities in this instance are occupying a good portion of my subscriptions (quality content most of the time) and I’ll definitely miss them if you end up leaving the fediverse.
Similarly doing nothing more than asking for more details on the technical problems we are struggling with, without a firm grasp of the existing issues with Lemmy or the history of conversations and efforts we’ve put in is not good faith either. We’re not interested in people trying to pull a gotcha moment on us or to make us chase our tails explaining the numerous problems with the platform
This is understandable but leaving platform is a big decision and the technical reasons are not really clear. Or at least they are not really crystal clear from the posts I have read. As end users we don’t really have much of a choice except to trust you.
Personally one example I have is the lack of moderation tools. I have read numerous times that it was a problem. But I do not know what it means practically speaking - what is missing exactly.
You do not have to explain it and I am not asking it of you. But I just want to say that I feel like there are details that sound to be very relevant to your future decision but are yet undisclosed. Or maybe I just missed them
Thanks for all the work into making Beehaw what it is today. I joined during the Reddit exile and I’m happy to have found this community. I hope it continues to thrive
Some of the moderation issues that we’ve talked about in the past are linked in the OP post. I will say that it has only gotten worse over time. I cannot think of a single moderation feature which actually fully works. That is how bad I think things are. They’re all broken in subtle ways. Yes, even reports are broken.
Given that it’s still a newish project I do not find it abnormal to have broken features though I understand that it must be frustrating to have to deal with issues like that.
If a benevolent user were to work on fixing such bugs perhaps the problem would get solved ? Maybe once the new contributors catch up, one of them will make development in that direction ? Or do you believe there is really no hope for the project in that regard ?
I feel the technical reasons are pretty clear. The media example alone is a great one. If someone drops illegal media onto one instance now, every admin has to take a ton of steps to scrub it from their instances. Through no fault of their own!
We hear every instance people say “we need moderation tools.“ Well, we don’t have them. I’m not mad at the developers, it has been a crazy few months and it’s not like any of these people are getting paid to do this. But it doesn’t matter what the intention is. If the tools aren’t there and are needed, eventually something has to give. There is too much burden on the admins of instances as it is. I’m not even talking about the financial side either!
doesn’t this fix the issue with media? https://github.com/LemmyNet/lemmy/pull/3897
I think ultimately y’all need to do what allows you to create the community you (we all really) want, even if that means ending the instance and moving somewhere else. It is not a moral imperative to use Lemmy and this was always a risk.
Lemmy has been a great experiment and there was a lot of momentum with the modest exodus that happened from Reddit, but if development is not going the way it needs to go, then we can’t stay here. Simple as that.
I was unaware of the Herculean effort it took in order to remove unwanted media from other instances. That is not just an inconvenience, that is a potentially huge liability. It’s also one more reason why I don’t host my own instance (despite the fact that I probably know enough to get it started, but probably too little to stay out of trouble lol). 
All of this is to say I support whatever decision you make. As long as Beehaw continues to exist I want to be a part of it, and I trust y’all to steer the ship accordingly.
The thing is, when Beehaw is no longer in Lemmy, it will be a regular VBulletin, phpBB, Discourse, etc. community. Nothing wrong with that.
The question will be: if the change is made, will the users follow? Because a lot of users in this post https://lemmy.ca/post/4990126 have said that they prefer Beehaw to stay in Lemmy because it is a Reddit alternative. It is big risk.
Well, we have stated that we are not trying to be reddit. There are more reddit-like alternatives than the more traditional forums that are possibilities.
We entirely expect that if we move away from Lemmy, we will lose people. Will that be for the better or the worse? Nobody can know as nobody can predict that future. It’s a very difficult position.
I am so tempted to say F-it and just start my own ActivityPub Fediverse project to replace Lemmy. It’s such a daunting commitment, though, and we each have our lives to live. I wish the admins of Beehaw all the luck and success in what they’re having to wrangle with. It’s too bad the Lemmy maintainers are so unwilling to work toward fixing the clear major pain points of the software.
I’ve been thinking about this as well. I’ve been evaluating crystal, lua, js, or python as potential implementation languages
As someone who’s very proficient in Rust, I actually think it’s the perfect language for a backend API. But the Lemmy code (from my tbh limited experience with it) seems quite verbose and cumbersome for the amount of features it needs to support. I have also been tempted by the thought of a Rust rewrite. The features needed honestly don’t seem that complicated.
Part of the problem I’d like to solve for is that Lemmy is hard for outside contributors to contribute to which is a function of both the verbosity you called out and the weirdnesses that can come to the uninitiated with Rust
Having tried to do this in Rust, the ActivityPub protocol is not very Rust-friendly. There’s a lot of weirdness, like how objects can have multiple types at once (aka @type
is an array) and how JSON-LD allows for basically any format to be passed as long as an appropriate context is passed (and the json-ld
library has a lot of limitations from my experience including lack of serde
support and no framing). I’ve tried looking at how the ActivityPub implementation Lemmy uses works, but from what I can see it just ignores these problems entirely, which at least seems to be working out for them right now.
Thinking about it more, I’m convinced JSON-LD’s completely dynamic format is what’s making this so difficult.
Even though Java is my bread and butter, I’d probably choose NodeJS simply because the resource footprint is so low.
I am so tempted to say F-it and just start my own ActivityPub Fediverse project to replace Lemmy. It’s such a daunting commitment, though, and we each have our lives to live.
This is a conundrum I’ve had as well. I really wish I could spend my time creating a better Lemmy backend from scratch. But it seems like a massive commitment. If I would know that others would rally together for the same cause, I may go along with it though.
The way things like this tend to be done at scale is to rewrite one part at a time, however you can break it up.
Well, I am sure many are tempted… I am waiting to see if a berson decides to carry the ring so I can offer my axe :p
If I didn’t have a full-time job and a family, I’d probably already have begun. I would offer my bow! :D
Tell me about it. But uhh… have my beer mug instead? There’s nothing I want to do more right now than make a better service (subjective of course) for Beehaw’s use. Time and obligations prevent that from being a quick enough solution though.
I’ve played with some ideas, but turns out the ActivityPub protocol is extremely difficult to implement in strongly-typed languages, at least from my experience. Anyway, whoever picks this up, here’s my sword!
I’m tempted to read the whole codebase to start a merge request to implement some modicum of mod tools. Things like deletion propagation, including uploaded media so stuff like GDPR deletion requests can be properly executed would be great, since this would enable or facilitate “admin purge” alongside it. I’m not that well versed in rust but I’ve got my fair share of experience coding. I’ll see how regular post propagation is done and see how deletion is treated (I feel like the solution might be something that instead of truly deleting the data it delets the content but leaves the records on the BD marked for deletion so it propagates correctly, and then after some time an automated task finally deletes them.
If you want I can update you after forking and creating the merge request to work on. IF I begin this, it would be helpful to have some critique.
I personally believe that scratching the whole this is too excessive, there are ways to modify the backend codebase with forks and merge requests if the core developers are open to pull requests. If they are not the project already died lmao.
I’m checking their federation activities on the docs, it seems like user removals do federate but mod removals dont? I’ll check the code when I get out of work :). It might be interesting to look there. https://join-lemmy.org/docs/contributors/05-federation.html
Second edit: It seems like image logging is already developed databasewise. There was quite a lot of discussion on this issue and it was merged a while ago. Frontend tools need to be developed also, but it’s a start: https://github.com/LemmyNet/lemmy/pull/3927
How hard would it be to fork the Lemmy code (+ perhaps one client), at the cost of breaking compatibility?
The Lemmy dev AMA really shook my faith in the future of lemmy itself. That being said, I’ll support and stand behind you, regardless of what you decide. If we make a new platform, I’ll follow, if we choose to stand our ground and make the best of it, I’ll help do my part. I believe in Beehaw and I’m proud to be part of the community.
There was an ama? Do you happen to have a link or know which subinstance it was on?
It’s linked in the top level post. Lemmy.ml, one of the two pet instances for the Lemmy devs