Social Home huishoud-OS · gefedereerd · open

Wereldwijde spaces

Wanneer je een GFS nodig hebt en wanneer niet – de vier soorten space, hoe de eigenaar kiest welke GFS'en een wereldwijde space vermelden, en wat een GFS wel en niet kan zien.

De meeste spaces in Social Home worden gedeeld tussen huishoudens die je al kent: de familie, de buren met wie je gekoppeld bent. Maar sommige communities zijn van nature open: een buurtmarktplaats, een hardloopclub voor de hele stad, een leesclub voor boeken uit het publieke domein. Daarvoor heeft Social Home wereldwijde spaces, en een kleine relay – de GFS (Global Federation Server – de wereldwijde federatieserver) – die huishoudens die elkaar nooit ontmoet hebben helpt elkaar te vinden. (Nieuw woord? Zie GFS in de woordenlijst.)

Heb ik een GFS nodig?

Niet voor de mensen die je kent. Zodra je met een huishouden gekoppeld bent, reist alles wat je met dat huishouden deelt rechtstreeks van jouw huis naar het hunne, of via de mesh van huishoudens die jullie allebei kennen. Privé-, huishouden- en openbare spaces werken allemaal zonder GFS.

Je hebt een GFS nodig als je huishoudens wilt bereiken waarmee je niet gekoppeld bent:

  • Een wereldwijde space die onbekenden kunnen vinden, volgen of waar ze lid van kunnen worden.
  • Volgen of lid worden van de wereldwijde space van iemand anders.
  • Een GFS-link, een uitnodiging die werkt zonder eerst te koppelen.
  • Een privéspace waarvan de leden elkaar niet allemaal rechtstreeks kunnen bereiken. De eigenaar kan de GFS ervoor aanzetten.
  • Een vangnet voor een gekoppeld huishouden, dat alleen wordt gebruikt als de directe weg uitvalt. Het staat uit tenzij je het aanzet.

Vier soorten space

Elke soort reikt een stukje verder dan de vorige:

SoortWie kan hem vindenZiet een GFS hem?
PrivéAlleen mensen die je uitnodigtNee, tenzij de eigenaar de GFS aanzet en kiest welke GFS
HuishoudenIedereen in je huis, automatischNooit
OpenbaarHuishoudens waarmee je gekoppeld bent, in Ruimtes bekijkenNooit
WereldwijdIedereen die een van de door de eigenaar gekozen GFS’en gebruiktAlleen de GFS’en die de eigenaar heeft gekozen

Een openbare space blijft binnen je eigen kring: je gekoppelde huishoudens kunnen hem vinden en om toegang vragen, en hij komt nooit bij een GFS. Om een space op een GFS te vermelden, maak je hem wereldwijd, en kiest de eigenaar op welke GFS’en hij vermeld staat. De rest van deze pagina gaat over wereldwijde spaces.

Grote veranderingen vragen een stemming

Twee acties zijn te ingrijpend om door één persoon alleen te laten doen: een space opheffen en het bereik wijzigen – in beide richtingen, breder of smaller. Heeft een space meer dan één beheerder, dan wordt elk van die acties een voorstel in plaats van meteen te gebeuren.

  • Elke beheerder kan het voorstel openen; de anderen stemmen ja of nee.
  • Het wordt uitgevoerd zodra meer dan de helft van de beheerders instemt – de eigenaar telt als beheerder, net als iedereen.
  • Eén nee annuleert het. Wachten ook: een voorstel vervalt na zeven dagen als het nooit een meerderheid haalt.

Een space met maar één beheerder handelt nog steeds meteen – een meerderheid van één. Maar zodra een tweede beheerder erbij komt, kan niemand in zijn eentje de space opheffen of veranderen wie hem ziet. Beheerders in gekoppelde huishoudens stemmen ook mee; de host telt iedereen op en alleen het goedgekeurde resultaat gaat naar buiten.

Is een space eenmaal wereldwijd, dan is op welke GFS’en hij vermeld staat alleen de beslissing van de eigenaar, zonder stemming. De eigenaar kan op elk moment een GFS toevoegen of weghalen in de instellingen van de space.

Wie doet wat in een space

Elke space heeft een eigenaar, en de eigenaar kan rollen uitdelen. Van de meeste naar de minste macht: eigenaar, beheerder, moderator, lid, volger. Een volger leest wel, maar plaatst niets.

Elke functie in een space – posten, de agenda, de marktplaats – kan open zijn voor elk lid, beoordeeld (de bijdrage van een lid wacht in een wachtrij tot een moderator of beheerder hem goedkeurt) of alleen beheerders. Beoordeelde items waar niemand naar kijkt, vervallen na zeven dagen.

Wat de GFS doet voor een wereldwijde space

Een GFS is een relay waarmee elk huishouden verbinding kan maken. Voor een wereldwijde space heeft hij twee taken:

  1. Hij is een gids. De eigenaar kiest op welke GFS’en de space vermeld staat, maximaal acht. Elk daarvan toont de naam, wie hem host, hoe je lid wordt en, als de space er een heeft, een speld op de kaart, afgerond op ongeveer 11 m. Iedereen die een van die GFS’en gebruikt, vindt hem onder Ruimtes bekijken.
  2. Hij brengt posts naar wie je niet gekoppeld bent. Dat zijn volgers, huishoudens die meelezen zonder lid te worden (alleen als de eigenaar volgers toestaat; standaard staat dat uit), en leden die via een GFS-link zijn toegetreden. Leden met wie je gekoppeld bent, krijgen elke post nog steeds rechtstreeks of via de mesh.

Elke vermelde GFS krijgt elke post. Een lid stuurt elke post naar alle GFS’en die de eigenaar heeft gekozen, ook naar GFS’en waarmee het eigen huishouden nooit verbonden was. Een volger die alleen GFS B gebruikt, ziet dus ook wat een lid via GFS A heeft gepost, zelfs als de host offline is. Een GFS waarmee een lid nooit verbonden was, ziet alleen het internetadres van dat lid en wanneer het postte, nooit welk huishouden het is.

De relay ziet nooit de inhoud van je posts. Elke post wordt verzegeld als hij je huis verlaat en pas weer geopend in het huis van elke ontvanger. De envelop wordt opgevuld tot een van een paar vaste groottes, zodat de relay niet eens een kort bericht van een lang kan onderscheiden. Hij slaat geen inhoud op: is een huishouden offline, dan houdt hij diens verzegelde enveloppen een dag vast en laat ze daarna los.

Zie de relay als het postkantoor van een open community. Het postkantoor ziet dat er een verzegeld pakket naar de leesclub ging, en ongeveer hoe zwaar het was – maar alleen de leden hebben een sleutel om het te openen.

Onder de motorkap

Alleen een wereldwijde space kan op een GFS vermeld worden; een openbare publiceren geeft 409 TIER_CHANGE_REQUIRED. De keuze van de eigenaar (maximaal 8) reist naar leden als een door de eigenaar ondertekende lijst (spaces.gfs_servers) in de versleutelde space_meta; een mede-beheerder kan hem doorgeven maar niet wijzigen. Niet langer wereldwijd zijn of opheffen trekt de space alleen terug van de GFS’en die hem vermelden. Openbare spaces bereiken gekoppelde huishoudens als een SPACE_DIRECTORY_SYNC-snapshot, nooit via een GFS. Leden hebben de schrijfgroepsleutel en sturen elk item anoniem naar elke vermelde GFS (member-publish-anon), via een sessie zonder cookies die vastgepind is op het vermelde adres, nadat de GFS heeft bewezen dat hij de vermelde sleutel bezit. Ontvangers ontdubbelen op item-id. Enveloppen zijn AES-256-GCM, ondertekend met Ed25519. Paddingbuckets: 1 / 4 / 16 / 64 / 128 KiB (publicatie door leden), plus 191 KiB voor envelop-relay. Offline ontvangers worden 24 uur in de wachtrij gehouden, met maximaal 2000 enveloppen of 64 MiB per ontvanger. Alle details op de pagina beveiligingsmodel.

Vertrouwd of strikt

De eigenaar kiest ook hoe leden via de GFS posten.

  • Vertrouwd (trusted, de standaard): leden posten anoniem, dus de GFS kan niet zien welk huishouden heeft gepost.
  • Strikt (strict): bovendien kan de GFS niet eens zien welke huishoudens mogen schrijven. Leden en volgers zien er voor hem hetzelfde uit.
Onder de motorkap

Beide modi geven elke schrijver de schrijfgroepsleutel per epoche, zodat elk item anoniem naar elke vermelde GFS gaat. De host-relay is identiteitsvrij ({space_id, event_type, payload} op een sessie zonder cookies). In de strikte modus abonneren schrijvers zich in dezelfde geschudde batch als volgers. In beide modi ziet de GFS nog steeds het bron-IP, de timing, de groottebucket en de abonneeset, en een GFS verliest bans per huishouden voor anonieme schrijvers (limieten per IP blijven; de eigenaar trekt een schrijver in door de sleutel te roteren).

Hoe vinden en lid worden werken

  1. De eigenaar maakt een space wereldwijd en kiest op welke GFS’en hij vermeld staat. Elk daarvan krijgt de naam, omschrijving, omslagfoto, het leeftijdsbeleid en de accentkleur: genoeg om hem te tonen, maar geen berichtinhoud. Een space kan ook wereldwijd zijn maar nog nergens vermeld, tot de eigenaar een GFS kiest.
  2. Iedereen die een van die GFS’en gebruikt, kan hem vinden onder Ruimtes bekijken en vragen om lid te worden, of hem volgen als de eigenaar volgers toestaat.
  3. Of een toetreding wordt toegestaan, hangt af van de toetredingsmodus van de space: Open (iedereen kan meteen lid worden), Aanvragen (een beheerder zegt ja) of Alleen op uitnodiging. Uitnodigingslinks werken naast elk daarvan.
  4. Zodra je binnen bent, reizen posts van jouw huis naar het huis van elk ander lid: rechtstreeks of via de mesh voor huishoudens waarmee je gekoppeld bent, via de vermelde GFS’en voor alle anderen.
  • Een GFS-link werkt voor iedereen. Wie hem opent, hoeft niet met jou gekoppeld te zijn – de GFS regelt de kennismaking. Behandel hem als een sleutel: wie hem heeft, kan binnen.
  • Een Lokale link werkt alleen voor huishoudens waarmee je al verbonden bent, en komt nooit bij een GFS. Gebruik hem voor de familiespace of de drie buren die je al kent.

Versleuteling staat altijd aan

Elke post in elke space – openbaar, wereldwijd of privé – is onderweg altijd verzegeld. Er is in Social Home geen schakelaar “versleuteld / niet versleuteld”, en geen terugval op onversleuteld verzenden: kan een space niet verzegelen, dan verstuurt hij niet.

Wat dat in de praktijk betekent:

  • De relay kan je berichten, foto’s of spraakmemo’s niet lezen – ook niet als de beheerder ervan dat zou willen. Hij ziet alleen de verzegelde envelop.
  • Een nieuw lid dat later toetreedt, ontvangt alleen berichten die na het toetreden zijn geplaatst. Eerdere geschiedenis wordt niet met terugwerkende kracht gedeeld – leden regelen hun eigen back-ups lokaal.
  • Elke keer dat het ledenbestand verandert, krijgt de space een nieuwe sleutel. Wie is vertrokken, kan niets lezen wat na het vertrek is geplaatst.

Wat gebeurt er als een GFS uitvalt?

Leden met wie je gekoppeld bent, merken niets: hun posts gingen nooit via de GFS. Staat de space op meer dan één GFS, dan merken volgers op de andere GFS’en ook niets. Alleen huishoudens die afhankelijk zijn van de GFS die uitvalt, moeten wachten. Er gaat niets stilletjes verloren: je huishouden blijft het proberen – na een paar seconden, dan een halve minuut, dan een paar minuten, dan elke tien – en de GFS houdt, zodra hij terug is, nog steeds tot een dag aan verzegelde enveloppen vast voor huishoudens die offline waren. Je lokale kopie wordt thuis opgeslagen op het moment dat je op verzenden drukt.

Dat is de beste reden om een drukke wereldwijde space op twee GFS’en te vermelden, bijvoorbeeld die van het project en een die je zelf draait.

Onder de motorkap

Retry-backoff: 5 s, 30 s, 2 min, 10 min. Wachtrij aan GFS-kant voor offline ontvangers: 24 uur, 2000 enveloppen / 64 MiB per ontvanger.

Verbind met een kant-en-klare relay

Het Social Home-project draait één openbare relay op gfs.social-home.io, met het leeftijdsgrensbeleid afgedwongen. Eén QR-scan en je bent verbonden.

Of draai er zelf een op een willekeurige VPS in 15 minuten – handig voor een privécommunity, een relay voor één huishouden, of als tweede verbinding voor de veerkracht.

Een relay draaien

Een relay is een kleine Python-server (open source onder MPL 2.0). Je kunt er een hosten voor je buurt, je stad of een specifieke community. Zie Zelf een relay draaien voor een handleiding met Docker Compose + Cloudflare.

Naast elkaar

GedragPrivé / huishouden / openbaarWereldwijd
Wie kan hem vindenuitgenodigde mensen / je huis / gekoppelde huishoudensiedereen die een van de door de eigenaar gekozen GFS’en gebruikt
Lid wordenuitnodiging, lidmaatschap van het huishouden of toetredingsmodusopen / aanvragen / alleen op uitnodiging, plus uitnodigingslinks
Hoe posts reizenrechtstreeks of via de meshhetzelfde voor gekoppelde leden; via elke vermelde GFS voor de rest
Wat een GFS zietniets (tenzij een privéspace hem aanzet)routeringsdata en een verzegelde, opgevulde envelop – nooit inhoud
Versleutelingaltijd aanaltijd aan
Waar berichten levenin het huis van elk lidin het huis van elk lid (een GFS slaat nooit inhoud op)
Als een GFS offline isn.v.t.de andere vermelde GFS’en gaan door; posts proberen opnieuw
Kan worden uitgezetja, per stemming van beheerderseen GFS weghalen kan altijd (eigenaar), of niet-wereldwijd maken (stemming)

Privacy in wereldwijde spaces

Een wereldwijde space blijft afgeschermd van de rest van je huishouden. Informatie die in de ene space wordt geplaatst, lekt nooit naar een andere, of naar je privéspaces, en een GFS leert alleen iets over de wereldwijde spaces die hij vermeldt. Wat de relay wel en niet kan zien, staat uitgespeld op de pagina’s privacymodel en beveiligingsmodel.