Rename project to SpiderNet, Obsidian-style linked docs, license overview

This commit is contained in:
2026-09-24 12:51:49 +02:00
parent e4641d1e71
commit 6a3569011a
11 changed files with 213 additions and 88 deletions
+35 -31
View File
@@ -1,40 +1,47 @@
# Architektur
Von unten (Physik) nach oben (Inhalte). Der AKI-Node ist das Herzstück —
eine kleine Box im Wohnungsregal, die zu Hause sitzt und das Viertel verbindet.
Von unten (Physik) nach oben (Inhalte). Der SpiderNet-Node (`sn-node`) ist
das Herzstück — eine kleine Box im Wohnungsregal, die zu Hause sitzt und das
Viertel verbindet.
## Übersicht
```mermaid
flowchart TD
subgraph HausA[Haus A]
GA[Geräte A] --> NA[AKI-Node A]
GA[Geräte A] --> NA[sn-node A]
end
subgraph HausB[Haus B]
GB[Geräte B] --> NB[AKI-Node B]
GB[Geräte B] --> NB[sn-node B]
end
subgraph HausC[Haus C]
GC[Geräte C] --> NC[AKI-Node C]
GC[Geräte C] --> NC[sn-node C]
end
NA <-->|"Glasfaser (bzw. Funk-Fallback)"| NB
NB <-->|"Glasfaser"| NC
NA <-->|"Glasfaser 10 Gbit/s"| NB
NB <-->|"Glasfaser 10 Gbit/s"| NC
NA -->|"ISP-Uplink A"| WA((Internet))
NB -->|"ISP-Uplink B"| WA
NC -->|"ISP-Uplink C"| WA
```
Entscheidend: **jeder Haushalt behält seinen eigenen Uplink**. Es gibt keinen
zentralen Exit (anders als klassische Community-Meshes mit einem Supernode),
sondern viele — das verteilt nicht nur Last, sondern auch Risiko und Zensur-
Angriffsfläche.
Entscheidend:
## Schicht 0 — Physik (Nachbarschaftsglasfaser)
1. **Jeder Haushalt behält seinen eigenen Uplink.** Es gibt keinen zentralen
Exit (anders als klassische Community-Meshes mit einem Supernode), sondern
viele — das verteilt nicht nur Last, sondern auch Risiko und Zensur-
Angriffsfläche.
2. **Die Glasfaserverbindungen sind ein *zweites* Netz neben den
Internetanschlüssen** und sollen schnell sein (10 Gbit/s per SFP+/
10G-Optik). Damit ist das Viertelnetz nie der Engpass — der Engpass sind
die Uplinks selbst, und genau die werden gepoolt.
- **Bevorzugt:** Glasfaser Haus-zu-Haus (z. B. 2-Faser-Duplex G.657A2, LC-
Stecker), Medienwandler bzw. SFP-Port direkt im Node. Innenrohr entlang
der Fassade, kurze Gräben im Garten, Kabelkanal.
## Schicht 0 — Physik (Nachbarschaftsglasfaser, 10 Gbit/s)
- **Ziel:** 10 Gbit/s Haus-zu-Haus. Glasfaser (2-Faser-Duplex G.657A2, LC)
mit **10G-Optik (SFP+)** direkt im Node — langfristig günstiger und
zukunftssicher; 1G-Medienwandler sind die Budget-Fallback-Option.
- **Pragmatisch für den Start:** was da ist — existierendes LAN-Kabel im
Mehrfamilienhaus (bis 100 m), Richtfunk 60-GHz-PTP (5–15 Gbit/s,
Mehrfamilienhaus (bis 100 m), Richtfunk 60-GHz-PTP (mehrere Gbit/s,
Sichtlinie nötig) als Überbrückung.
- **Topologie:** anfangs Stern/Ring (2–5 Häuser), später vermascht. Jede
Faser ist ein separates Link; Redundanz schlägt Eleganz.
@@ -45,13 +52,12 @@ Kandidaten (Auswahl offen, Kriterium: simpel, wartbar, verschlüsselt):
| Kandidat | Pro | Con |
|---|---|---|
| **Yggdrasil** | Out-of-the-box e2e-verschlüsseltes IPv6-Overlay, null Konfiguration, self-contained | experimentell, Performance über wenige Gbit/s hinaus |
| **Yggdrasil** (gewählt) | Out-of-the-box e2e-verschlüsseltes IPv6-Overlay, null Konfiguration, self-contained | experimentell, Performance-Grenzen bei hohen Gbit/s |
| Babel + WireGuard | bewährt (Althea-Ansatz), Router-Hardware tauglich | mehr Konfigurationsaufwand |
| cjdns | Battle-tested in Hyperboria | ältere Codebasis |
Empfehlung für den PoC: **Yggdrasil**. Jeder AKI-Node peert über die
Glasfaser-Links mit seinen Nachbarn; Geräte der Haushalte hängen per NAT/
Firewall getrennt dahinter (Home-LAN ≠ Mesh-LAN).
Jeder `sn-node` peert über die Glasfaser-Links mit seinen Nachbarn; Geräte
der Haushalte hängen per NAT/Firewall getrennt dahinter (Home-LAN ≠ Mesh-LAN).
## Schicht 2 — Bandbreiten-Pooling (der eigentliche Kern)
@@ -74,7 +80,7 @@ Gegenseitigkeitszwang. Technisch gilt:
- Der Status ist sichtbar (Karma/Anzeige), aber es gibt keine Strafe und
keine Zwangsfreischaltung.
### Segmentierter Multi-Exit-Download (`aki-fetch`)
### Segmentierter Multi-Exit-Download (`sn-fetch`)
```mermaid
sequenceDiagram
@@ -97,7 +103,7 @@ sequenceDiagram
Node-->>User: Datei (Hash-verifiziert, reassembliert)
```
- HTTP Range Splits + Shadow-Verifizierung (Content-Hash)
- HTTP Range Splits + Segment-Verifizierung (Content-Hash)
- Fallback: entfällt ein Exit, übernimmt ein anderer das Segment
- Für nicht-rangefähige Quellen: klassische Proxy-Rotation
@@ -108,17 +114,15 @@ gewählten Exit, Exit-Wahl rotiert; Browsing/Video-Calls laufen über einen
Exit, große Transfers über alle. Video-Calls werden explizit auf einen
Exit gepinnt (kein Splitting).
### Fairness-Scheduler (`aki-fair`)
### Fairness-Scheduler (`sn-fair`)
- Max-min Fairness über alle aktiven Nutzer:innen des Netzes
- Exit-Kontingente (Volumenlimit, Wartungszeit) werden respektiert
- Karma statt Bezahlung: wer dauerhaft deutlich mehr zieht als er gibt,
wird fair angesprochen (Drosselung als letztes Mittel, nie als Strafe
für Berechtigte mit Bedarf)
- Leech-Nodes: niedrigste Priorität bei Knappheit, nie ausgeschlossen
### Nachbarschafts-Cache (`aki-cache`)
### Nachbarschafts-Cache (`sn-cache`)
- Transparenter Shared-Cache (lancache-Prinzip): große, popluläre Objekte
- Transparenter Shared-Cache (lancache-Prinzip): große, populäre Objekte
(Steam, Konsolen-Updates, OS-Images, Software-Pakete) kommen aus dem
Viertel statt aus dem Internet
- DNS-basiert, pro Haushalt kleine Cache-Slots; gemeinsam sind sie groß
@@ -132,7 +136,7 @@ Exit gepinnt (kein Splitting).
- Freenet ist **keine Anonymitätslösung** (siehe FAQ) und wird auch nicht
als solche beworben.
- Unsere Software nutzt Freenet über `freenet-stdlib` bzw. die
WebSocket-API (nicht-derivativ), unsere eigene Codebasis bleibt AGPL-3.0.
WebSocket-API (nicht-derivativ); die Lizenzwahl steht in [[Lizenz]].
## Sicherheit und Vertrauen
@@ -142,12 +146,12 @@ Exit gepinnt (kein Splitting).
Teilnehmer (Client-Isolation).
- Kill-Switch: jeder Haushalt kann seine Faser physisch/softwareseitig
abklemmen; der Node fällt auf "nur eigener Anschluss" zurück.
- Minimale Logs (DSGVO, siehe [recht.md](recht.md)).
- Minimale Logs (DSGVO, siehe [[Recht]]).
## Offene Fragen
- DSLite/Carrier-NAT-Haushalte: Synchrone Exits gehen, aber
Konfigurationsaufwand pro Router-Modell prüfen.
- ISP-AGB: Weitergabe an "Dritte" kann verboten sein (per ISP prüfen,
siehe recht.md).
siehe [[Recht]]).
- Wie viel Cache lohnt sich real bei 3–10 Haushalten? (Messung in Phase 2)
+18 -9
View File
@@ -1,4 +1,4 @@
# Die Kernidee — und ein ehrlicher Realitätscheck
# Idee — und ein ehrlicher Realitätscheck
## Ursprungsidee
@@ -9,6 +9,11 @@
> kostet. Schwache Haushalte werden gestärkt. Nebenbei wird Traffic verteilt
> und ist für Außenstehende schwerer zuzuordnen (Privacy).
Wichtiger Punkt (bewusst gehalten): Die Glasfaserverbindungen zwischen den
Häusern laufen **neben** den normalen ISP-Anschlüssen — das Nachbarschaftsnetz
ist ein *zweites*, schnelles (Ziel: 10 Gbit/s) lokales Netz, nicht ein Ersatz
für die Internetanschlüsse.
Diese Idee ist gut — und sie ist nicht abstrakt: NYC Mesh läuft genau so
("members share their internet"), Freifunk und guifi.net zeigen es in
großem Maßstab. Was hier neu gedacht ist, ist der **konsequente Exit-Jede**
@@ -19,9 +24,11 @@ verlassen das Viertel an *allen* Punkten gleichzeitig.
1. **Segmentierte Downloads über mehrere Exits.** Große Dateien werden in
Byte-Bereiche gesplittet (HTTP Range Requests) und parallel über die
Glasfaseranschlüsse mehrerer Haushalte geladen. Das ist Multi-WAN-
Aggregation, nur verteilt über das Viertel. Ein DSL-50000-Haushalt kann
damit realistisch 5× herunterladen, wenn 4 Nachbarn mitspielen.
Internetanschlüsse mehrerer Haushalte geladen. Ein DSL-50000-Haushalt
kann damit realistisch 5× herunterladen, wenn 4 Nachbarn mitspielen.
Das geht, weil die Haus-zu-Haus-Verbindungen selbst schnell sein
sollen (10 Gbit/s) — die Faser im Viertel ist nie der Engpass, die
Uplinks sind es.
2. **Fair-Share-Scheduling.** Wer gerade nichts lädt, gibt seinen Anteil
automatisch. Ein einzelner Stream profitiert von fremder Kapazität,
mehrere Lade gleichzeitig bekommen faire Anteile.
@@ -49,22 +56,24 @@ verlassen das Viertel an *allen* Punkten gleichzeitig.
3. **Physik ist der eigentliche Engpass.** Glasfaser spannen heißt: Genehmigungen,
Vermieter, Grundstücke, Arbeit. Realistisch beginnt man mit dem, was da
ist (Kabel im Mehrfamilienhaus, Garten, kurze Richtfunkstrecken), und
baut Glasfaser dort, wo ohnehin gegraben wird (siehe Recht).
baut Glasfaser dort, wo ohnehin gegraben wird (siehe [[Recht]]).
4. **Volumen-/Drosseltarife.** Wer ein Volumenlimit hat, zahlt mit Volumen,
wenn Nachbarn über seinen Exit laden. Lösung: Exits haben harte Kontingente
und der Scheduler respektiert sie ("Exit-Karenz"), plus Karma.
und der Scheduler respektiert sie ("Exit-Karenz"), plus Karma. Für diese
(seltene) Fälle gibt es zusätzlich den **Leech-Modus**: Sharing komplett
aus, nur empfangen — unter Nachbarn legitim (siehe [[Ethos]] §2).
5. **Privacy ist ein Nebenprodukt, keine Anonymität.** Freenet sagt es
selbst (FAQ): keine Anonymität wie Tor/I2P. Metadaten bleiben. Wer echte
Anonymität will, legt Tor/I2P über das Netz. Wir verkaufen deshalb
Privacy-by-Design, nicht Anonymität.
6. **Recht.** Abmahnungen landen zuerst beim Anschlussinhaber, egal wer
geladen hat; bewusstes Ermöglichen von Rechtsbrüchen kann eigene Haftung
erzeugen. Details und Gegenmaßnahmen: [recht.md](recht.md).
erzeugen. Details und Gegenmaßnahmen: [[Recht]].
## Der technische Kern (warum es Software braucht)
Das Netz ohne Software ist "nur" ein LAN. Die Mehrwerte entstehen durch
einen **AKI-Node** pro Haushalt, der folgendes macht:
einen **SpiderNet-Node** pro Haushalt, der folgendes macht:
- Overlay-Routing über alle Haushalte (Kandidat: Yggdrasil)
- Exit-Pool verwalten: Wer darf über wen raus, mit welchem Kontingent
@@ -73,4 +82,4 @@ einen **AKI-Node** pro Haushalt, der folgendes macht:
- Transparenten Nachbarschafts-Cache
- (Später) Freenet als Inhalts- und App-Ebene im Viertel
Siehe [architektur.md](architektur.md) und [server/README.md](../../server/README.md).
Siehe [[Architektur]] und [[Server-README]].
+62
View File
@@ -0,0 +1,62 @@
# Lizenz — Optionen und Empfehlung
Damit wir uns festlegen können. Stand: September 2026.
## Wichtigster Rahmen
- Die Software wird **ohne jegliche Garantie** bereitgestellt — AGPL GPLv3-
-artige Lizenzen enthalten §§ 15/16 (No Warranty, Limitation of Liability)
bereits; permissive Lizenzen brauchen das Disclaimer-Klauseln separat
(Apache-2.0 hat es eingebaut, MIT/BSD nur minimal).
- Ethos: Code soll **Commons bleiben** — auch Forks sollen gezwungen sein,
offen zu bleiben, sonst kann das Nachbarschaftsprojekt abgespaltet und
geschlossen weiterverkauft werden.
## Code-Lizenz-Optionen
| Lizenz | Copyleft | Netz-Klausel | Passt zum Ethos? | Risiko für Nachbarschafts-Projekt |
|---|---|---|---|---|
| **AGPL-3.0** | stark | **ja** (§13 Remote-Network-Interaction) | **sehr gut** | Forks bleiben offen, "as a service"-Nutzung gezwungen offenzulegen; scare-off für kommerzielle Interessenten — gewollt |
| GPL-3.0 | stark | nein | gut | fork-protect, aber wer es nur *innerhalb eines eigenen Netzes* anbietet, muss nichts freigeben |
| LGPL-3.0 | schwach (nur Library-Boundary) | nein | mittel | geschlossen Forks leicht möglich |
| MPL-2.0 | mittel (datei-level) | nein | mittel | gut für "Firmen-freundlich"-Wunsch; aber Forks können proprietär um Dateien herumgebaut werden |
| EUPL-1.2 | stark | optional (Art. 13) | gut | kompatibel zu GPL via Abs. 6; wenig verbreitet, Komplexität |
| Apache-2.0 | keiner | nein | schlecht (ethisch) | Klon kann geschlossen werden — passt nicht zu "Gemeingut" |
| MIT / BSD | keiner | nein | schlecht | identisches Risiko, minimaler Disclaimer |
### Empfehlung
**AGPL-3.0 für alle Code-Crates in `server/`** (Status quo im Repo). Gründe:
1. Spiegelbild zum Ethos: das Netz ist Commons, der Code auch.
2. **§13 verlangt Offenlegung bei Netzwerk-Nutzung** — unsere Software *ist*
ein Netzwerkdienst; wer eine eigene SpiderNet-Node-Variante betreibt,
muss den Quellcode anbieten.
3. `freenet-core` ist AGPL-3.0 — gleiche Lizenzfamilie macht Integration
einfach, falls wir mal direkt gegen die Core-API bauen statt nur über
`freenet-stdlib`/WebSocket.
4. AGPL ist nicht für Doku/Daten relevant; Code-Repo bleibt trotzdem sauber
(Lizenz-Matching für Developer-Komfort).
## Doku-Lizenz-Optionen
Doku (dieses Verzeichnis) kann separat lizenziert werden:
| Lizenz | Charakter | Empfehlung |
|---|---|---|
| **CC-BY-SA-4.0** | teilen-als-gleiche, Namensnennung | gut, wenn Doku auch Commons bleiben soll |
| CC-BY-4.0 | Namensnennung, Weitergabe frei | ok, wer Forks der Doku nicht gleich erzwingen will |
| CC0-1.0 | public-domain-artig | im Widerspruch zum Ethos |
| gleich mit Code (AGPL) | geht auch, ist aber unüblich für Doku | n/a |
### Empfehlung
**CC-BY-SA-4.0 für `documentation/`** — sauber getrennt vom Code, passt
zum "Wissen wird geteilt wie Bandbreite"-Ethos (Ethos §7).
## Was noch offen bleibt
- [ ] Entscheidung: Code AGPL-3.0 bestätigen
- [ ] Entscheidung: Doku CC-BY-SA-4.0
- [ ] `LICENSE`-Dateien: Code-`LICENSE` (AGPL, schon da) + `documentation/LICENSE` (CC-BY-SA) und Lizenz-Hinweis in jedem Dateikopf? (AGPL: Hinweis pro Crate reicht; Dateikopf optional)
- [ ] Nebenlizenzen von Dependencies (cargo-deny, sobald Cargo-Projekt existiert)
+2 -2
View File
@@ -30,14 +30,14 @@
zu ermöglichen, kann als Teilnehmer/Beihelfer behandelt werden
(Analogie: BGH zu Tor-Exit-Betreibern mit Vorbelastung).
### Was das für das AKI-Netz bedeutet
### Was das für das SpiderNet-Netz bedeutet
1. **Exit-Haushalt = Verantwortung bleibt beim Exit-Haushalt.** Wenn
fremder Traffic über meinen Anschluss ins Internet geht, gilt:
- Ich muss darlegen können, dass andere Zugang hatten → das Netz
dokumentiert (lokal, nicht zentral!) die Teilnehmerschaft.
- Bei Kenntnis einer konkreten Verletzung muss ich handeln können →
deshalb braucht der AKI-Node technische Wege, einzelne Nutzer/Segmente
deshalb braucht der SpiderNet-Node technische Wege, einzelne Nutzer/Segmente
zu sperren, ohne das ganze Netz zu killen.
2. **Kein "Das ist ja verteilt, also legal."** Wer lädt, bleibt Täter —
unabhängig davon, über welchen Exit. Verteilung ändert die Ermittlungs-
+8 -8
View File
@@ -15,9 +15,9 @@ endet mit etwas, das man benutzen kann.
Ziel: Beweis, dass Pooling über zwei Anschlüsse real funktioniert.
- [ ] AKI-Node auf Mini-PC (Raspberry Pi / N100-Box), Yggdrasil-Overlay
zwischen 2 Haushalten (Kabel oder kurzstrecke WLAN/60-GHz)
- [ ] `aki-fetch` PoC: segmentierter Download (HTTP-Range-Splitting) über
- [ ] SpiderNet-Node auf Mini-PC (Raspberry Pi / N100-Box), Yggdrasil-Overlay
zwischen 2 Haushalten (Kabel oder Kurzstrecke WLAN/60-GHz)
- [ ] `sn-fetch` PoC: segmentierter Download (HTTP-Range-Splitting) über
2 Exits, plus Baseline-Messung (1-Exit vs. 2-Exit, gleiche Datei)
- [ ] Fair-Share-Scheduler v0: zwei gleichzeitige Downloads, faire Aufteilung
- [ ] Doku: Messwerte, Erkenntnisse, Stolpersteine → hier in das Repo
@@ -26,11 +26,11 @@ Ziel: Beweis, dass Pooling über zwei Anschlüsse real funktioniert.
Ziel: ein Paket, das 3–10 Haushalte installieren können.
- [ ] `aki-node` Daemon: Discovery, Peering, Metriken (per-Exit Bandbreite/
- [ ] `sn-node` Daemon: Discovery, Peering, Metriken (per-Exit Bandbreite/
Latenz), Onboarding-Flow (QR/Knopfdruck)
- [ ] Exit-Pool: Kontingente, opt-in/opt-out, Kill-Switch
- [ ] `aki-fetch`: API + CLI + einfache Browser-Integration
- [ ] `aki-cache`: lancache-artiger transparenter Cache (DNS-basiert)
- [ ] Exit-Pool: Kontingente, opt-in/opt-out, Leech-Modus, Kill-Switch
- [ ] `sn-fetch`: API + CLI + einfache Browser-Integration
- [ ] `sn-cache`: lancache-artiger transparenter Cache (DNS-basiert)
- [ ] Fairness-Scheduler v1 (max-min, Exit-Kontingente, Karma)
- [ ] Telemetrie: keine zentrale Sammlung; lokale Metriken im Node
@@ -53,4 +53,4 @@ Ziel: ein Paket, das 3–10 Haushalte installieren können.
- [ ] Peering mit Freifunk-Clouds oder anderen Nachbarschaftsnetzen
- [ ] Echtes Backbone: eigene Glasfaser in Straßen, ggf. IXP-Peering
(langfristig, NYC-Mesh-Stil)
- [ ] Federated Viertel: mehrere AKI-Netze verbinden sich
- [ ] Federated Viertel: mehrere SpiderNet-Netze verbinden sich