Friendica Project Update – August 2012

by Mike Macgirvin

A lot is going on in the Free Social Web - and especially with the Friendica project so I thought I would take a few minutes to provide a general update.

In July 2012 we forked the Friendica project into two different paths. But relax, Friendica is not going away. In fact, we've got a bunch of new developers adding some great new features and functionality as I write this. We've got some new features in the works - support of animated GIFs, mobile themes (and mobile clients), fully threaded comments and the ability to like/dislike comments, etc. We've also got some fun new activity stream methods and games.

But as every software project grows, there comes a time when one needs to look at the bigger picture and adjust the project to accomodate a changing landscape. That's what we're doing currently.

Introducing Friendica Red

As a result of this introspection, we've put some of our development resources into Friendica Red, which is being created to fix some of the underlying issues which affect Friendica and the entire free social web in fundamental ways.

Relax, we aren't trying to force you into a new mode of interaction with your friends - these issues are much more fundamental to decentralised social communications.


The first is what we call the "mobility problem".


The free web is mostly provided by volunteers - some with technical expertise, some without. Occasionally it becomes a burden to run a public server/hub for others and as a consequence sites tend to come and go - and this can leave their members in a lurch, often needing to start over finding their friends and re-connecting with all of them.

We're also aware of recent political events which makes a reliance on a single DNS endpoint somewhat problematic.

So we're building an overlay network on top of DNS. We still rely on DNS to find your profile and photo albums, but here's the exciting part - you can move. And this is going to be built-in to our communications layers. You can just show up at a different service provider and keep communicating with your existing friends.


Then there's the "only geeks run servers problem".


To solve this one we need to provide incentives for organisations to provide servers for people. The best incentive we can think of is to allow them to offer subscriptions and paid "premium" services. Now before you start yelling "but that's NOT a FREE social web", look back at the last sentence and notice the word "allow". We aren't going to force anybody to do anything. If you want to provide a subscription service or a free service, that's up to you. We just want to make it easier for server providers to justify spending their time and money to support the free social web. You can always run your own hub for friends and family for free.


Friendica also has a bit of a "scaling problem".


This is due primarily on the fact that we offer connections to a huge number of other services. Many of these don't offer "direct delivery" so we must poll them frequently to find out if there's a new message for your stream. This is fine for a small server with a handful of people, but if you're running a large server with a few thousand people or more and they all have hundreds of contacts and connections, it just doesn't work. So Red is going to be limited in what it can connect to, just so that we can get some large servers to hold the rest of your friends. But we aren't abandoning the concept of a federated social web. You may choose to use Friendica and have connections to lots of other services, but limit your site to friends and family - OR you can use Red and support thousands of people on a moderately sized server, but without all of the connections to Facebook and Diaspora and email and WordPress blogs, etc. Each project will focus on doing one of these aspects well.


Friendica has been criticised repeatedly for having a boring and outdated interface. We'll call this the "UI problem". 


Red isn't a complete re-write (why fix things that aren't broken?), but some significant chunks of Friendica are being re-written. In particular we're doing a much more complete job of separating the "look and feel" from the backend communications logic. We'll provide a very simple and basic theme to tie it all together, but what Friendica Red looks like really depends on the theme designer, and they'll be able to create a viewport which looks and acts in different ways on different devices, and may even offer completely different functionality.  For instance on a handheld device, there are some bells and whistles of the desktop interface which just get in the way. The theme designer can decide not only how the page looks and works, but to a great degree what tools and widgets they wish to put on the page. So one can have Friendica Red for youngsters, and Friendica Red for information scientists. Both can communicate just fine, but the information scientist may have a whole lot more buttons and settings to make their interaction more tailored to the way they wish to access information.

We're also doing a lot more javascript and AJAX stuff in the browser, once again depending on what theme you use. On the backend, we're just building communication services which respond to requests. It will be up to your visual interface which precise requests to make.


We're long past the days of Facebook, yet your friends are too entrenched in their Facebook (so-called) life to even consider leaving. We'll call this the "Facebook envy problem".


Facebook still provides the lion's share of social communications on the web, despite their arrogant and abusive privacy implementation.  But as far as features, Friendica is far from lacking. Heck for those that are nostalgic about the old web, we now even have "pokes" and a free web version of FarmVille (which doesn't annoy your friends, incidentally). But Facebook is so 1997. Many of its features are for a usage model that is long gone.  The world moved on, but Facebook did not. We're trying to re-evaluate what constitutes a "friendship" in the modern free web. It isn't yes/no, on/off, friend/notfriend.  And we've got some clever innovations to share in this regard. The first is how you make friends, or rather if you make "friends" at all. We're providing a communications service. Your friends are your concern. So instead of having a button that says "share" or "follow" or "add friend", we're just going to present a person, and let you define how much (if at all) that you wish to interact with them, and how much you wish to let them know about you. When you get right down to it, it's just a set of permissions. We're also extending Friendica's existing "private profiles", where you can have a completely different profile for one group of people (like co-workers) than you do for drinking buddies, and making the process a lot more automatic.

We don't think you should even be asked if you want to be "friends" with somebody who you may not have ever met personally, but you may wish to allow them to see some of your technical writings, and perhaps allow them to ask questions via private mail. So we're just going to ask you what this person should be allowed to do. Do you want to see their posts in your stream? Do you want them to see (some of) your posts? Do you want to send private/direct mail to them? 

Since this is independent of the UI, anybody will be able to create a theme which models one of the old friendship interfaces such as "Add friend", "Share", etc. just by pre-defining the available permissions within that theme. But we can also create new interfaces which do a lot more and allow you greater control over each contact and what you allow them to do and see. A prime example is on wall-to-wall posts. Since your profile wall is often a reflection of your own personality, you might want only to allow a few really good friends to post there - not casual acquaintances and perhaps not the people you partied with in college.

And then once you've figured out what permissions and interaction you wish to have with this person, we'll allow you to declare how close (or not) you are with this person. This number is private to you, but we're putting slider bars on different pages which let you instantly adjust the page contents based on how close or far people are from your inner circle of friends. So when you first go online in the morning, you can look at just the important updates from only your closest friends. At lunch time, you might wish to have a look at some of the more distant people in your social circle and see what they're up to.


And we've also got a specific issue related to Friendica's design that we'll call the "multiple account problem".


Public groups, and private groups and celebrity pages and profiles all have separate accounts in Friendica. This is so that they can each have a unique URL. But we knew long ago this was sloppy. We're also assuming that in Red, one person may have a subscription relationship with their hub provider. So we're separating the "account" completely from pages and profiles. You'll have one account, period. Within that account, you can create any number of pages and groups (up to the limit the hub provider sets).  So there's one login. And these are hierarchical, so that one paid subscriber might create additional login accounts for family members, which are completely independent but if the subscription lapses, they all go away. (Relax, remember mobility - you can move and pop up somewhere else. And you're still you.). 


Communications in a decentralised model creates what we call a "fan-out problem".


Some of you may remember "zot" - the backend protocol we have been developing, but which got off to a couple of false starts. Zot is being revived as the layer which provides our mobility and DNS independence. The spec is currently under development; but in a nutshell, we're also solving the "fan-out problem", which is what happens when somebody posts a message to 1000 friends. This creates 1000 encrypted posts which must all be individually delivered. 

The new zot works a lot differently. Consider the post office delivering 1000 large boxes. They go to each house, get somebody to sign for the box, and take it off a very large truck. With the new zot model, the post office will ride around on a motorcycle and leave a small note for each of them we have a package. Pick it up at your convenience.  You no longer need a large truck. And if several people live in the same apartment building, when one comes in for pickup, we can give them all the boxes for that building. Messages are still just as secure as they were before, but with orders of magnitude improvement in delivery performance. 


We're also re-thinking our "global directory problem".


There shouldn't be a central or global directory of people in a decentralised social web. But when Friendica was young, we needed a way to find people within the network. And the provider we chose for the global directory has some uptime issues, which means when it's down, it's down for everybody. So we're changing the model. We don't want to force every hub to hold the entire directory, because this could be a problem for small sites as the network grows.

So we're borrowing a concept from software distribution called the "mirror". We'll have multiple directories hosted from different providers and locations - and they will all replicate their changes amongst each other (using zot). So if one directory goes down, there will be another that can take its place. 

We also initially had two directories, one for the site/hub and also the global directory. This was confusing to people. So now we're only going to have one directory. The reason we had this was if somebody wanted a disconnected Friendica which didn't connect with the rest of the grid; we didn't want to force them to use a global directory. We will still provide this option, by providing a stripped down version of the global directory (with exactly the same interface) but which doesn't replicate with other sites. 


Anyway, this is Friendica Red, and this is what we're building.

It's all open source and you're welcome to join us.