Kalman Graffi and his team researched a \ac{P2P} based social network in the Multimedia Communications Lab at Technische Universität Darmstadt. From the service provider's point of view, the aim was to save operating costs, and from the user's point of view to ensure secure communication. Concerning the scope of functions, the \ac{P2P} \ac{OSN} should not be inferior to the famous, centralized \ac{OSN}s.

First, research on basic topics was necessary before creating the \ac{P2P} \ac{OSN} LifeSocial. In the following, the framework and its data structure \cite{graffi2008distributed}, the implementation of the security requirements \cite{graffi2009security} and the monitoring of the network \cite{graffi2009monitoring} are presented. Finally, the presentation of the LifeSocial prototype \cite{graffi2011lifesocial} follows.

\subsubsection{Platform and Architecture}
\label{sec:lifesocial-architecture}
Initially, Graffi et al. designed a framework for \ac{P2P}-based multimedia online communities. The framework uses a multi-layer architecture where the respective layers communicate only with their direct subordinate and superordinate layers (see Figure \ref{fig:lifesocial-architecture}). To create a structured \ac{P2P} network, FreePastry\footnote{http://www.freepastry.org/FreePastry/} was used, which implements Pastry \cite{rowstron2001pastry}. The PAST extension is used for the storage and replication of data objects. For PAST, additional functionality for deleting entries in the \ac{DHT} by overwriting them with empty objects has been added.

\begin{figure}[h!]
	\centering
	\includegraphics[width=.5\textwidth]{lifesocial-framework}
	\caption{\cite{graffi2008distributed}}
	\label{fig:lifesocial-architecture}
\end{figure}

The task of the Storage Dispatcher is to perform the store, get and delete operations. If a peer is unreachable, the storage dispatcher will determine this and start a new storage job. The Message Dispatcher provides a service for higher layers to exchange information from plugin to plugin. It is used to send and receive messages.

The Information Cache works like a local \ac{DHT}. For all requested object ids there is an entry consisting of timestamp and state (in cache, requested or not available). Thus, higher layers get a fast response and are not blocked by waiting for the data. Missing data objects are requested periodically by the Information Cache until they are retrieved.

The layers introduced so far provide the basis for the plugin layer. Plugins are small building blocks that contribute a specific functionality and have an interface for interaction with the user. A distinction is made between mandatory and optional plugins. Mandatory plugins must be available on every peer while the user freely chooses optional plugins. Plugins can be dynamically loaded into the system at runtime and represent a simple extension option for the \ac{OSN}'s functionality. The User Interface as the top layer represents the entirety of all plugin interfaces of the \ac{OSN}.

The framework is implemented in Java, and the OSGi framework was chosen to load plugins at runtime.

\subsubsection{Data Structure}
\label{sec:lifesocial-data-structure}
In order to store the data effectively, Graffi introduced the Distributed Linked List data type, which meets the complex requirements of a \ac{P2P} \ac{OSN} and is storable in a \ac{DHT}. Each storage object has a unique id for identification that consists of a plugin id and other plugin-specific information (see Figure \ref{fig:lifesocial-data-structure}). For example, the id of a data object about user Alice photo albums is obtained as a hash from \texttt{photoplugin:albumsof+user:alice}. The data object also contains pointers to other objects (photo album to individual images) or data (metadata or binary data).

\begin{figure}[h!]
	\centering
	\includegraphics[width=0.8\textwidth]{lifesocial-data-structure}
	\caption{An example for the use of the data type Distributed Linked List. The user albums object on the left points to several album data objects which again point to the image objects. \cite{graffi2008distributed}}
	\label{fig:lifesocial-data-structure}
\end{figure}

\subsubsection{Security}
\label{sec:lifesocial-security}
When registering, a new user enters a user name and password. The password is used to generate a key pair for asymmetric encryption. The public key serves as user id and node id at the same time.

All data are encrypted for secure and authenticated communication. A new symmetric key is generated for each data object (so-called \texttt{SharedItem}) and used to encrypt the data. The symmetric key is then encrypted asymmetrically with the recipient's public keys and added to the shared item to an \ac{ACL}. Users who are not in the \ac{ACL} cannot decrypt the symmetric keys and therefore have no access to the data. Finally, the shared item is signed by the author. Signed \texttt{SharedItems} are called \texttt{CryptedItems}.

\subsubsection{Prototype}
\label{sec:lifesocial-prototype}
LifeSocial is based on the previously described framework. The software runs under Windows, Linux, and MacOS.  For mobile devices, there is no client app. Figure \ref{fig:lifesocial-screenshots} shows two screenshots of the LifeSocial \ac{GUI}. The code of LifeSocial is not publicly accessible (closed source).

\begin{figure}[h!]
	\centering
	\begin{subfigure}[b]{0.49\textwidth}
		\includegraphics[width=\textwidth]{lifesocial-screenshot-01}	
	\end{subfigure}
	\begin{subfigure}[b]{0.49\textwidth}
		\includegraphics[width=\textwidth]{lifesocial-screenshot-02}
	\end{subfigure}
	\caption{Screenshots of the LifeSocial GUI \cite{graffi2011lifesocial}}
	\label{fig:lifesocial-screenshots}
\end{figure}

All functionalities (like login, profile, friends, groups) are designed as plugins to load them dynamically. Besides the usual social media functionalities, there are also plugins for file exchange, games (Tic Tac Toe) or a whiteboard. A separate store is planned, where users can download additional plugins.

Graffi moved to the University of Paderborn in 2011 and has been a professor at the University of Düsseldorf since 2012 \cite{graffiXXXXlinkedin}. LifeSocial has since been renamed to LibreSocial and has been looking for participants for an alpha test on their website\footnote{https://libresocial.com/en/startpage/} since 2016. The screenshots on the LibreSocial website show a completely overhauled user interface with a web front end. Since the project website was not changed since May 2016 and there were no further publications, the current status is unclear.