From 6a92fa8ca6723a1df6b3184eec00786bee10631b Mon Sep 17 00:00:00 2001
From: Ronny Lam <ronlam@hnw.nu>
Date: Thu, 24 Oct 2024 15:26:44 +0200
Subject: [PATCH] First draft in Mermaid, Co-authored-by: Eric Herman
 <eric@commonscaretakers.com>

---
 .../Fediversity-architecture-notes.md         | 102 ++++++++++++++++++
 1 file changed, 102 insertions(+)
 create mode 100644 architecture-docs/Fediversity-architecture-notes.md

diff --git a/architecture-docs/Fediversity-architecture-notes.md b/architecture-docs/Fediversity-architecture-notes.md
new file mode 100644
index 0000000..3272b95
--- /dev/null
+++ b/architecture-docs/Fediversity-architecture-notes.md
@@ -0,0 +1,102 @@
+<!-- Note: we're "abusing" the classDiagram for the moment as we sketch this out -->
+
+``` mermaid
+classDiagram
+
+%% TODO: replace classDiagram
+
+Hardware --|> Storage
+Hardware --|> Virtualization
+Virtualization --|> Nixos
+Virtualization --|> LinuxOS
+Core_Services <|-- Services
+Core_Services <|-- FediServices
+Storage <|-- Services
+Storage <|-- FediServices
+Nixos --|> Services
+Nixos --|> FediServices
+Management_UI --|> NixOps
+Management_UI --|> Administration
+
+class Core_Services{
+  DNS
+  EMail
+  identity_management
+  secret_management
+  authentication()
+  SASL()
+}
+
+class Services {
+  NextCloud
+  secure_document_collaboration
+  Forgejo
+  webmail
+  HedgeDoc
+  project_planning
+}
+
+class FediServices {
+  Matrix
+  Pixelfed
+  Peertube
+  Mastadon %%GotoSocial
+  activityPub()
+}
+
+class Administration {
+  monitoring
+  alerting
+  graphing
+  restore_backups
+}
+
+class Management_UI {
+   human-oriented administration
+   replication()
+   migration()
+}
+
+class Storage {
+  exclusive_filesystem
+  shared_blob
+  zfs()
+}
+
+class Hardware {
+Storage
+Networking
+Operating-system
+Virtualization
+}
+
+class Virtualization {
+  Proxmox 
+}
+
+class Nixos {
+  Application
+}
+
+class LinuxOS {
+  Application
+}
+
+class NixOps {
+orchestration
+}
+```
+* human-centric
+* easy, automated, replication and migration to different datacenter provider
+* blob storage replicated generically
+* files on the exclusive filesystems replicated via application-aware process, e.g.:
+  * asynchronous, but "live" database replication
+  * shutdown app then rsync directories
+  * ZFS replication and snapshot-ing
+* Strengths, Weaknesses, Opportunities, and Threats awareness for all apps
+* Not everything needs to start on Nix, NixOs, or with NixOps
+* Do not use "Open Core"
+  * GitLab
+  * Dovcot
+  * Zimbra
+* LXC containers (not Docker-style)