Data protection, the right to be forgotten, and federation
Hey fellow nerds, I have an idea that I'd like to discuss with you. All feedback – positive or negative – is welcome. Consider this a baby RFC (Request for Comments).
So. I've been having a think on how to implement the right to be forgotten (one of the cornerstones of eg. the GDPR) in the context of federated services. Currently, it's not possible to remove your comments, posts, etc., from the Fediverse and not just your "home instance" without manually contacting every node in the network. in my opinion, this is a fairly pressing problem, and there would already be a GDPR case here if someone were to bring the "eye of Sauron" (ie. a national data protection authority) upon us.
Please note that this is very much a draft and it does have some issues and downsides, some of which I've outlined towards the end.
The problem
In a nutshell, the problem I'm trying to solve is how to guarantee that "well-behaved" instances, which support this proposal, will delete user content even in the most common exceptional cases, such as changes in network topology, network errors, and server downtime. These are situations where you'd typically expect messages about content or user deletion to be lost. It's important to note that I've specifically approached this from the "right to be forgotten" perspective, so the current version of the proposal solely deals with "mass deletion" when user accounts are deleted. It doesn't currently integrate or work with the normal content deletion flow (I'll further discuss this below).
While I understand that in a federated or decentralized network it's impossible to guarantee that your content will be deleted, but we can't let "perfect be the enemy of good enough". Making a concerted effort to ensure that in most cases user content is deleted (initially this could even just be a Lemmy thing and not a wider Fediverse thing) when the user so wishes would already be a big step in the right direction.
I haven't yet looked into "prior art" except some very cursory searches and I had banged the outline of this proposal out before I even went looking, but I now know that eg. Mastodon has the ability to set TTLs on posts. This proposal is sort of adjacent and could be massaged a bit to support this on Lemmy (or whatever else service) too.
1. The proposal: TTLs on user content
Every comment, post etc. (content) must have an associated TTL (eg. a live_until timestamp). This TTL can be fairly long, on the order of weeks or even a couple of months
well before the content's TTL runs out (eg. even halfway through the TTL, with some random jitter to prevent "thundering herds"), an instance asks the "home instance" of the user who created the content whether the user account is still live. If it is, great, update the TTL and go on with life
in cases where the "home instance" of a content creator can't be reached due to eg. network problems, this "liveness check" must be repeated at random long-ish intervals (eg. every 20 – 30h) until an answer is gotten or the TTL runs out
information about user liveness should be cached, but with a much shorter TTL than content
in cases where the user's home instance isn't in an instance's linked instance list or is in their blocked instance list, this liveness check may be skipped
when content TTL runs out and a user liveness check hasn't succeeded, or when a user liveness check specifically comes back as negative, the content must be deleted
when a liveness check comes back as negative and the user has been removed, instances must delete the rest of that user's content and not just the one whose TTL ran out
when a liveness check fails (eg. the user's home instance doesn't respond), instances may delete the rest of that user's content. Or I guess they probably should?
user accounts must have a TTL, on the order of several years
when a user performs any activity on the instance, this TTL must be updated
when this TTL runs out, the account and all of its related content on the instance must be deleted
instances may eg. ping users via email to remind them about their account expiring before the TTL runs out
2. Advantages of this proposal
guarantees that user content is deleted from "well behaved" instances, even in the face of changing network topologies when instances defederate or disappear, hiccups in message delivery, server uptime and so on
would allow supporting Mastodon-like general content TTLs with a little modification, hence why it has TTLs per content and not just per user. Maybe something like a refresh_liveness boolean field on content that says whether an instance should do user liveness checks and refresh the content's TTL based on it or not?
with some modification this probably could (and should) be made to work with and support the regular content deletion flow. Something for draft v0.2 in case this gets any traction?
3. Disadvantages of this proposal
more network traffic, DB activity, and CPU usage, even during "normal" operation and not just when something gets deleted. Not a huge amount but the impact should probably be estimated so we'd have at least an idea of what it'd mean
however, considering the nature of the problem, some extra work is to be expected
as noted, the current form of this proposal does not support or work with the regular deletion flow for individual comments or posts, and only addresses the more drastic scenario when a user account is deleted or disappears
spurious deletions of content are theoretically possible, although with long TTLs and persistent liveness check retries they shouldn't happen except in rare cases. Whether this is actually a problem requires more thinkifying
requires buy-in from the rest of the Fediverse as long as it's not a protocol-level feature (and there's more protocols than just ActivityPub). This same disadvantage would naturally apply to all proposals that aren't protocol-level. The end goal would definitely be to have this feature be a protocol thing and not just a Lemmy thing, but one step at a time
3.1 "It's a feature, not a bug"
when an instance defederates or otherwise leaves the network, content from users on that instance will eventually disappear from instances no longer connected to its network. This is a feature: when you lose contact with an instance for a long time, you have to assume that it's been "lost at sea" to make sure that the users' right to forgotten is respected. As a side note, this would also help prune content from long gone instances
content can't be assumed to be forever. This is by design: in my opinon Lemmy shouldn't try to be a permanent archive of all content, like the Wayback Machine
this solution is more complex than simply actually deleting content when the user so wishes, instead of just hiding it from view like it's done now in Lemmy. While "true deletion" definitely needs to also be implemented, it's not enough to guarantee eventual content deletion in cases like defederation, or network and server errors leading to an instance not getting the message about content or a user being deleted
Not a backend dev, but it would seem like this could possibly be partially solved by purging data past a certain age that falls into specific scenarios:
Data from unfederated instances
Data from users/posts/comments that have been deleted/removed
Also, deleting/removing content doesn't really seem to do much currently as you still get all the info back from the server and it's up to the frontend to not display it. I'm normally of the opinion of it you want to delete your comment it should be properly deleted (moderation removal being a separate issue).