Communication and Collaboration Between Users From Different Cozy Instances

41 views
Skip to first unread message

Terrycloth

unread,
May 4, 2014, 3:12:37 AM5/4/14
to cozy-...@googlegroups.com
Is this the best place to post a feature suggestion, or should I start an issue on GitHub...?

I have been reading about, and using, Diaspora, and GNU Social. These are "federated" open source social networking platforms. Most social networks, like Facebook, users can only communicate with each other if they both have accounts on the same system. But Diaspora and GNU Social were designed to be decentralized: you can install your own instance of these platforms, and you can communicate with users on different servers, just the way you would with users on the same server as you. GNU Social, I know, uses the pump.io protocol to achieve this.

I think it would be great if Cozy took a similar "federated" approach. Cozy users could choose to share data, send messges, and/or collaborate on something via a Cozy app, with certain other Cozy users, regardless of what server the other user is registered with. This would allow us to start private teams or groups, distributed over different Cozy instances. There is already a way to share files with someone by sending them a special link, but anyone who has a copy of the link can access the files. The feature I am now suggesting would allow you to authenticate users signed in to your server or signed in to other Cozy servers, so only those users can access the files you share, or read the messages you send them, or collaborate with you on a project. 

This would be an ambitious feature, and I'm not sure where to start if I were to try to implement this myself. Maybe take a look at Pump.io to get ideas of how it could work. 

But what do you think? Wouldn't it be awesome?

Frank Rousseau

unread,
May 4, 2014, 10:06:36 AM5/4/14
to cozy-...@googlegroups.com
Le 04/05/2014 09:12, Terrycloth a écrit :
Is this the best place to post a feature suggestion, or should I start an issue on GitHub...?
It's a good place! Issues are fine too, but less people read them.


I have been reading about, and using, Diaspora, and GNU Social. These are "federated" open source social networking platforms. Most social networks, like Facebook, users can only communicate with each other if they both have accounts on the same system. But Diaspora and GNU Social were designed to be decentralized: you can install your own instance of these platforms, and you can communicate with users on different servers, just the way you would with users on the same server as you. GNU Social, I know, uses the pump.io protocol to achieve this.

We know pump.io and it looks very interesting. But, there is a lack of documentation.

I think it would be great if Cozy took a similar "federated" approach. Cozy users could choose to share data, send messges, and/or collaborate on something via a Cozy app, with certain other Cozy users, regardless of what server the other user is registered with. This would allow us to start private teams or groups, distributed over different Cozy instances. There is already a way to share files with someone by sending them a special link, but anyone who has a copy of the link can access the files. The feature I am now suggesting would allow you to authenticate users signed in to your server or signed in to other Cozy servers, so only those users can access the files you share, or read the messages you send them, or collaborate with you on a project. 

This would be an ambitious feature, and I'm not sure where to start if I were to try to implement this myself. Maybe take a look at Pump.io to get ideas of how it could work. 

But what do you think? Wouldn't it be awesome?
Yes, that would be awesome! I'm interested too in an app like it. In fact I coded something close to what you describe and I studied a lot distributed/federated social networks.
Here are some projects that might catch your interest.

Newebe
http://newebe.org/
It's a social network where each user hosts his own account by running an instance of it on his own server. It's simple and I use since 3 years now to communicate with some friends and my family. It's the project I built.
There is a demo here: http://newebe.org/#demo
I'm thinking about making a Cozy app from it. Aside of that, the two things this app miss are: a description of the protocol and a good contact authentication scheme.

Tent.io
https://tent.io/
It's a protocol for distributed application. It allows clean communication between self-hosted servers. At first sight, it looks well written and fits well with the Cozy architecture.

Semantic web
http://json-ld.org/
http://www.w3.org/wiki/LinkedData
https://wiki.oasis-open.org/xdi/FrontPage
LinkedData or XDI provide smart way to identify a location of a resource. It could be interesting to study it too. For instance if a contact gives you its URI instead of sending you all his details, your Cozy could update the contact information regularly from the URI. I don't know if there could be a smart usage (that doesn't require too much development) to include it in a social app. Whatever, it could be good to have a look at it.

I don't really know from where you could start but here are the options I see:

1. Start from pump.io and improve it until having a decent app.
Pros: it will help the pump.io project, it could be quickly done.
Cons: if it doesn't fit with requirements, you will lose time. Pump has not so much documentation.

2. Port Newebe to Cozy.
Pros: The User Interface can be reused. I can help you a lot.
Cons: Newebe has security flaws and doesn't use a well known protocol.

3. Make a quick and dirty app inspired by pump.io/Newebe.
Pros: The more pragmatic, probably the best way to have a first version and catch interest.
Cons: It will be badly written and will require a lot of refactoring.

4. Start an app from scratch based on the Tent protocol and try to reuse some parts of pump.io and Newebe.
Pros: That would be the cleaner things to do.
Cons: It will require more time and more thinking about architecture.

5. Try to invent a new kind of social network based on semantic protocols.
Pros: Could be ultra awesome.
Cons: It would require more research work and will come with a lot of uncertainty.

6. Make 4 then add semantic features.
Pros: Clean, doable and awesome.
Cons: It will require a lot of time.


What do you think about it?


Regards,

Frank

Terrycloth

unread,
May 4, 2014, 4:45:08 PM5/4/14
to cozy-...@googlegroups.com
Frank, these are some great suggestions! Pump, Newebe, Tent, and the Semantic Web all sound really promising.

Back before I knew anything about programming at all, I had conceived of a project that was basically Cozy + federated user authentication. The fact that projects like Cozy already exist is inspiring because it means there are already other people interested in something similar. I guess I have a lot of learning to do still, but this is what I want to do.

bnj

unread,
May 4, 2014, 5:09:39 PM5/4/14
to cozy-...@googlegroups.com
Hi all,

Adding to the solutions everything's mentioned earlier for communication between several cozy servers, I'd like to mention IndieWeb, which is a general community trying to make the web less business oriented. They also have a kind of protocol for communication between different servers, but nothing as much advanced as tent, for instance, according to what I've seen.

I would like to weigh in tent integration. I have been paying a lot of attention to this project, right before getting some interest on cozy. While the idea is obviously great for privacy freaks like us, there are so far only two implementations, cupcake.is (written in Go) and campr.me (written in C#), which are both closed source, so far. While the tent core maintainers promised to partially release cupcake's source early 2014, they haven't done it yet and are really doubtful towards self-hosting (for high-reliability reasons, but I guess there are some economical arguments too). As a matter of fact, if one wants tent integration in cozycloud, one would have to implement his own tent provider, from scratch, which is a HUGE task. Moreover, while the protocol is clearly documented on the main website (and still, from a very high point of view), the core developers agree that it is subject to a lot of changes in a near future, until v1.0 is released (current version is 0.3). When upgrading from version 0.2 to version 0.3, they broke the API so app developers and the campr developer team had to modify everything in their applications. Version 0.4 is said to be breaking compatibility too.

I am not saying one should not implement a tent server in nodejs or trying to be discouraging towards that matter. I am just warning people that the tent protocol, in its actual state, is very volatile and subject to change every six months or so, sometimes implying the need to re-implement everything from scratch (that's what happened between 0.2 and 0.3 for all closed source providers). Although I'd love to have tent integration in cozycloud, it seems too early in the history of the protocol and it is also not really used by a lot of people in the world. Reversely, that can also be an huge opportunity to provide the first open-source implementation of a tent server, which would be awesome and get some attention from the tent community.

If anyone is interested in making such an integration possible, I'd be happy to help as much as I can.

Cheers,
Benjamin

Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection Antivirus avast! est active.


Andrew Toskin

unread,
May 4, 2014, 6:22:42 PM5/4/14
to cozy-...@googlegroups.com
Ben,
Thanks for the input. I'll definitely keep that in mind.

Terrycloth

unread,
May 4, 2014, 6:52:38 PM5/4/14
to cozy-...@googlegroups.com
I'm still only a novice developer anyway, so I'm open to all possibilities. But federating Cozy gives me something to aim for as I learn.
Reply all
Reply to author
Forward
0 new messages