Hi there,
I’ve been making apps using the Solid Protocol for a while, and I’ve also been following ATProto’s evolution because there are many similarities. However, most of my work has been on Personal Apps with private data, so I couldn’t do anything with those in ATProto… until now :).
I’m saying that to add some context to the feedback I’m about to give. I know ATProto’s community is very much focused on “Social Apps”, but every time I’ve raised this issue I’ve been told that this would be solved by permissioned data. So here’s my feedback on that!
I have read through the Permissioned Data Diaries and the proposal, and there are two main things that I want to comment on:
1. Different protocol/schema
There are many references in the blog series about this being a different protocol, such as:
we are specifying a new data and sync protocol, not just an extension to the existing protocol
I was a bit surprised about this. Maybe I don’t understand how ATProto actually works (though I have read the whitepaper and a bunch of blog posts/talks), but this seems like a false dichotomy. Why do we need a different protocol?
This is briefly addressed when you talk about Public Spaces, but I still don’t understand why. If public data can also be “permissioned”, why not use the same thing everywhere? It may seem like I’m just saying that to be pedantic, but there are some practical implications.
In Solid, and the Web in general, the shape of the data doesn’t depend on its permissions. If you try to GET a resource, it doesn’t matter if that resource is public or not. If you can read it, you’ll get its contents; if you don’t, you’ll get a 401. But you don’t have to treat “public” or “permissioned” data any differently.
By the way, I’m glad you’ve decided to go back to at:// for now (instead of ats://). Tim Berners-Lee has talked about how https:// was a mistake for the Web. Mostly, because it breaks links that transition from one to another. And we’re still suffering the consequences of that, even in Solid. For example, schema.org is one of the most popular RDF Ontologies (the equivalent to Lexicons in ATProto), but some apps write it as https://schema.org whilst others use http://schema.org. Which keeps them from being interoperable :(.
2. Data coupled to permissions
Even if we accept that permissioned data will be different than “public” data, there are still some issues with Spaces as I understand them.
In particular, this seems to assume that the permission of one piece of data is not going to change. This seems a bit abstract, so let me share a specific example.
I have an app called Umai which is a recipes manager. Basically, I use it to store my cooking recipes, and by default everything is private. However, sometimes I do want to share a recipe with some other people. This can mean making a recipe completely public, or adding individual people or groups gradually.
If I was to implement Umai using ATProto’s permissioned data, how would that work?
As I mentioned, recipes are private by default. So I guess I would need to create a private Space for recipes in the user’s PDS. But then, how do I share a recipe with a specific person? Would I need to create a different Space that is shared only with that one person, and move the resource in there? Wouldn’t that break the URI, and all the references to it? And I’d need to go through all of that every time I wanted to change permissions?