It just takes time and dedication, the motto of any true software developer.
Using the CPU power of a device that is capable of playing video games to calculate your social graph (that is stored on that same device) is extremely powerful and well worth the time and dedication.
"Or, alternatively, you store my whole friends graph on my device, which presents scalability and performance issues."
With all due respect, this is where you are incorrect. Devices today completely capable of handling a large amount of compressed plain text data. Media would will be links to external sources as storage capacities play catch up.
The CPU of the device would be able to map your entire social graph and do things that are not possible today being that calculating a social graph on a central server for each user is EXTREMELY expensive and basically impossible with high-load services. Kind of like the concept behind folding @ home.
I'll speak with anyone willing to help solve technical challenges associated with this model. But until someone comes up with something "damning" then I'm going to keep moving forward.
1) Each client checks for internal and external IPs and saves them. That list is transmitted to your friends every time you update them with other data. It automatically manages this list of possible places to reach you.
2) There will be indexers for these cases which can be used as relay points. C would merely be a match-maker, telling each host which IP address and port is currently open. No data is sent through C.
Thanks for the reply, but take Skype for example, they have gotten over these technical hurdles. I could give you a huge explanation involving relay points and NAT traversal etc. but at the end of the day, these challenges have been defeated.
"1. A requirement seems to be the ability to make and receive socket connections. How would you address the typically restrictive home firewalls/NATs that most people are living with?"
IPv6 is already being deployed from top tier mobile carriers and that allows globally rout-able addresses even behind NATs.
"That doesn't inspire much confidence in the idea as a proof of concept."
This technology is a little ahead of its time, but not by much. And by the time an end-user ready core is developed, we'll we be there.
"Are you sure you're able to make that claim?"
yes, the technical hurdles are only time consuming, not insurmountable.
Checkout the how-to page and watch that video. It gives more detail.
But in short, you can make friends with your friend's friends or you can be friends with an indexer, which will list a bunch of people you may or may not know that you can request to be friends with as well.
When you send a request through a friend, your connection is done securely through that already established relationship. Then that friend passes the request to the friend you want to be friends with that they are already friends with. Once that request reaches that friend and they accept, they will have the public / private key pair you originally generated. They will also have your IP address information and begin making secure connections directly to you without the need for the friend or indexer which you sent the request through.