2022-10-30

Getting acquainted with Mastodon -- Instances

Elon Musk has to buy Twitter after all. I took this as an opportunity to look at Mastodon at the weekend, a decentralised alternative. TL/DR: super!

What I had to understand first was the concept of an “instance”. My first impression is that you can compare a Mastodon server to an email server. Imagine that in order to write emails, you would have to create an account with one single company in the US and agree to their terms-of-service. Every email you send would go through that company. Not a good idea. That just seems wrong. Fortunately, emails work differently. I can create an account with a server of my choice, in Germany for example with Posteo.de, web.de or gmx.de. And I can send my messages anywhere, to any email server in the world.

This decentralised approach now also works with short messages. Via Mastodon. I can choose my server, or my instance as it is now called. But my messages can be read by all Mastodon users, no matter which instance they use. I find that convincing.

Which instance is the right one for me? Who offers me a Mastodon account now?

My research this weekend revealed 55 potential providers. I collected these manually, I did not find a central overview of providers. (EDIT: As is sometimes the case, after writing this I found the link to the Fediverse Observer. There is even an API there. I'll take a closer look at that another time).

Using the Mastodon API, it is possible to retrieve information from any server. This is easily done via the msocial package that I just uploaded to Github. It uses the new pipe operator introduced with R 4.0. The remotes package is needed for installation, the packages data.table and knitr are needed for this vignette.

#install.packages("remotes")
#remotes::install_github("https://github.com/kweinert/msocial")
library(msocial)
library(data.table)
library(knitr)

The information is retrieved from the instances as follows.

stats <- get_instances() |>
lapply(get_instance_stats) |>
rbindlist()

The code is actually only given for transparency reasons. The result is much more important:

instance registration user_count status_count country_code
https://mastodon.social TRUE 814812 39787754 DE
https://mastodon.cloud TRUE 220222 4424023 US
https://mstdn.social TRUE 76258 5503036 IN
https://fosstodon.org TRUE 24187 1031281 FR
https://mastodon.xyz FALSE 23870 1749182 US
https://mastodon.technology FALSE 23837 1334756 US
https://mstdn.io FALSE 18173 2549736 US
https://qoto.org TRUE 17741 821107 GB
https://social.tchncs.de TRUE 17621 1648232 DE
https://pixelfed.de TRUE 13569 99447 DE
https://octodon.social FALSE 11923 2117274 NA
https://chaos.social FALSE 9198 3025391 IN
https://det.social TRUE 8053 35106 DE
https://mastodon.fun TRUE 7709 761778 US
https://norden.social TRUE 6258 424112 GR
https://hostux.social TRUE 5584 365994 LU
https://meow.social TRUE 5329 620144 GB
https://vis.social TRUE 5181 67908 FR
https://scholar.social FALSE 5144 299049 FR
https://climatejustice.social FALSE 4312 66041 US
https://aus.social TRUE 4209 234313 DE
https://linuxrocks.online TRUE 3845 185353 US
https://social.targaryen.house FALSE 3807 109173 US
https://sueden.social TRUE 2730 14666 US
https://mastodon.partipirate.org TRUE 2417 31210 FR
https://oc.todon.fr TRUE 2377 116484 GB
https://mastodon.gougere.fr TRUE 1809 207780 GB
https://awoo.space FALSE 1743 615982 NL
https://aleph.land TRUE 1542 215486 FR
https://animalliberation.social TRUE 1182 3023 US
https://dresden.network TRUE 1141 46729 NA
https://icosahedron.website FALSE 818 374745 DE
https://im-in.space TRUE 788 65204 DE
https://graz.social TRUE 712 24131 DE
https://maly.io TRUE 653 133470 DE
https://Bonn.social TRUE 597 114461 DE
https://scicomm.xyz TRUE 563 18918 GB
https://xoxo.zone FALSE 497 59844 US
https://oldbytes.space TRUE 382 96653 DE
https://berlin.social TRUE 346 5423 DE
https://functional.cafe TRUE 321 132400 DE
https://social.wxcafe.net TRUE 289 148851 DE
https://fediscience.org TRUE 289 11322 DE
https://mst3k.interlinked.me TRUE 228 343658 CA
https://eupublic.social TRUE 137 19777 US
https://masto.raildecake.fr FALSE 136 5736 FR
https://dads.cool TRUE 84 309546 FR
https://feuerwehr.social TRUE 72 1173 UA
https://eupolicy.social TRUE 65 622 DE
https://mastodon.indie.host TRUE 24 11558 DE
https://mastodon.land TRUE 13 4683 US
https://social.imirhil.fr FALSE 3 47042 GB
https://social.diskseven.com FALSE 1 75273 GB
https://share.elouworld.org FALSE 1 1988 FR
https://social.lkw.tf FALSE 1 6 FR
https://social.ballpointcarrot.net FALSE 1 409 US
https://manx.social TRUE 1 59 CA

The largest instances contain “mastodon” in their address and are rather generic communities. Other names suggest a technical / open source software focus (fosstodon, linuxrocks.online, functional.cafe). There are politically oriented communities (mastodon.partipirate.org, eupublic.social). Other servers have a geographical focus (graz.social, bonn.social, berlin.social, dresden.network, norden.social, sueden.social, aus.social).

I find qoto.org interesting, which also integrates other services like Gitlab and a group concept.

Some interesting communities are closed, e.g. scholar.social or chaos.social.

I can't really make sense of the country codes. To find out the countries, I used the packages iptools and rgeolocate:

get_instance_countrycode <- function(instance) {
    stopifnot(length(instance)==1) # not vectorized
    ip <- iptools::hostname_to_ip(gsub("^https://", "", instance))[[1]]
    if(length(ip)>1) ip <- ip[1]
    if(ip=="Not resolved") return(NA)
    fn <- system.file("extdata","GeoLite2-Country.mmdb", package = "rgeolocate")
    rgeolocate::maxmind(ip, fn)[,"country_code"]
}

I don't really trust the results. For example, aus.social claims to be hosted in Australia.

table(stats$country_code)
## 
## CA DE FR GB GR IN LU NL UA US 
##  2 17  9  7  1  2  1  1  1 14

I decided on berlin.social. Then the local timeline makes sense for me. I have also already found some R users and am now following them. I have also already found two interesting toots that will occupy me in depth in the short to medium term. All in all, a good start.