Title : Join the peer to peer social network Scuttlebutt using OpenBSD and Oasis
Author: Solène
Date  : 04 November 2020
Tags  : openbsd68 openbsd ssb

In this article I will tell you about the
[Scuttlebutt social network](https://scuttlebutt.nz/),
what makes it special and how to join it using OpenBSD. From here,
I'll refer to Scuttlebutt as SSB.


### Introduction to the protocol

You can find all the related documentation on
[the official website](https://scuttlebutt.nz/docs/).
I will make a simplification of the protocol to present it.

SSB is decentralized, meaning there are no central server with
clients around it (think about Twitter model) nor it has a constellation
of servers federating to each others (Fediverse: mastodon, plemora,
peertube...). SSB uses a peer to peer model, meaning nodes exchanges
data between others nodes. A device with an account is a node,
someone using SSB acts as a node.

The protocol requires people to be mutual followers to make the
private messaging system to work (messages are encrypted end-to
end).

This peer to peer paradigm has specific implications:

1. Internet is not required for SSB to work. You could use it with
other people in a local network. For example, you could visit a
friend's place exchange your SSB data over their network.
2. Nodes owns the data: when you join, this can be very long to
download the content of nodes close to you (relatively to people
you follow) because the SSB client will download the data, and then
serves everything locally.  This mean you can use SSB while being
offline, but also that in the case seen previously at your friend's
place, you can exchange data from mutual friends. Example: if A
visits B, B receives A updates.  When you visit B, you will receive
B updates but also A updates if you follow B on the network.
3. Data are immutables: when you publish something on the network,
it will be spread across nodes and you can't modify those data.
This is important to think twice before publishing.
4. Moderation: there are no moderation as there are no autority in
control, but people can block nodes they don't want to get data
from and this blocking will be published, so other people can easily
see who gets blocked and block it too. It seems to work, I don't
have opinion about this.
5. You discover parts of the network by following people, giving
you access to the people they follow. This makes the discovery of
the network quite organic and should create some communities by
itself. Birds of feather flock together!
6. It's complicated to share an account across multiples devices
because you need to share all your data between the devices, most
people use an account per device.


### SSB clients 

There are differents clients, the top clients I found were:

- [Patchwork](https://github.com/ssbc/patchwork)
- [Manyverse](https://www.manyver.se/), for Android (available on f-droid) or iPhone
- [Oasis](https://github.com/fraction/oasis)

There are also lot of applications using the protocol, you can find
a list [on this link](https://handbook.scuttlebutt.nz/applications).
One particularly interesting project is git-ssb, hosting a git
repository on the network.

Most of the code related to SSB is written in NodeJS.

In my opinion, Patchwork is the most user-friendly client but Oasis
is very nice too.  Patchwork has more features, like being able to
publish pictures within your messages which is not currently possible
with Oasis.

Manyverse works fine but is rather limited in term of features.

The developer community working on the projects seems rather small
and would be happy to receive some help.


### How to install Oasis on OpenBSD

I've been able to get the Oasis client to run on OpenBSD. The NodeJS
ecosystem is quite hostile to anything non linux but following the
path of [qbit](https://bsd.network/@qbit) (who solved few libs years
ago), this piece of software works.

    $ doas pkg_add libvips git node autoconf--%2.69 automake--%1.16 libtool
    $ git clone https://github.com/fraction/oasis
    $ cd oasis
    $ env AUTOMAKE_VERSION=1.16 AUTOCONF_VERSION=2.69 CC=clang CXX=clang++ npm install --only=prod

There is currently ONE issue that require a hack to start Oasis.
The `lo0` interface must not have any IPv6 address.

You can use the following command as root to remove the IPv6
addresses.

    # ifconfig lo0 -inet6

I reported this bug as I've not been able to fix it myself.


### How to use Oasis on OpenBSD

When you want to use Oasis, you have to run

    $ node /path/to/oasis_sources

You can add `--help` to have the usage output, like `--offline` if
you don't want oasis to do networking.

When you start oasis, you can then open `http://localhost:3000` to
access network. **Beware that this address is available to anyone
having access to your system**.

You have to use an **invitation** from someone to connect to a node
and start following people to increase your range in this small
world.

You can use a public server which acts as a 24/7 node to connect
people together on
[https://github.com/ssbc/ssb-server/wiki/Pub-Servers](https://github.com/ssbc/ssb-server/wiki/Pub-Servers).


### How to backup your account

You absolutely need to backup your `~/.ssb/` directory if you don't
want to lose your account.  There are no central server able to
help you recover your account in case of data lass.

If you want to use another client on another computer, you have
to copy this directory to the new place.

I don't think the whole directory is required, but I have not
been able to find more precise information.