diff --git a/README.md b/README.md index 88f19fd..d890e4b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,116 @@ This repository contains all the code and code-related files having to do with [the Fediversity project](https://fediversity.eu/), with the notable exception of [NixOps4 that is hosted on GitHub](https://github.com/nixops4/nixops4). -## Content of this repository +## Goals + +Decentralise the operational responsibility for social media. +Enable a more robust market of hosting providers, by making it easy to migrate operations and data to different providers. + +Note that Fediversity is not about self-hosting. +There already exist solutions for self-hosting, but they're not suitable for what we're trying to do. +The ones we're aware of require substantial technical knowledge and time commitment by operators, especially for scaling to thousands of users. +Not everyone has the expertise and time to run their own server. + +## Actors + +- Fediversity project team + + The group working on this repository. + We are creating the deployment workflows and service configurations. + + The project partners for Fediversity are: + - [NLnet Foundation](https://nlnet.nl/) + - Open Internet Discourse Foundation + - [NORDUnet](https://nordu.net/) + - [Tweag](https://www.tweag.io/) + + Refer to [fediversity.eu](https://fediversity.eu) for more details about the project. + +- Hosting provider + + They provide and maintain the physical infrastructure, and run the software in this repository, through which operators interact with their deployments. + Hosting providers are technical administrators for these deployments, ensuring availability and appropriate performance. + + We target small- to medium-scale hosting providers with 20+ physical machines. + +- Operator + + They select the applications they want to run (Mastodon, Pixelfed, Matrix, etc.). + They don't need to own hardware or deal with operations. + Operators administer their services in a non-technical fashion, e.g. as moderators. + They pay the hosting provider for registering a domain name, maintaining physical resources, and monitoring deployments. + + Initially, Fediversity is targeted at organisations, such as universities. + +- User + + They are individuals that are not necessarily affiliated with any organisation. + They register an account on services (e.g. Mastodon) run by the operators, and e.g. post content. + Users don’t need to administrate anything. + + Given initial operators will be universities, users would be staff or students. + +## Glossary + +- [Fediverse](https://en.wikipedia.org/wiki/Fediverse) + + A collection of social networking services that can communicate with each other using a common protocol. + +- Service + + A Fediverse application run by the hosting provider for an operator. + +- Configuration + + A collection of settings for a machine running NixOS. + + > Example: Configurations are deployed to VMs. + +- Provision + + Make a resource, such as a virtual machine, available for use. + + > Example: We use [Proxmox](https://www.proxmox.com) to provision VMs for services run by operators. + +- Deploy + + Put software, such as services, onto computers. + The software includes technical configuration that links software components. + Most user-facing configuration remains untouched by the deployment process. + + > Example: NixOps4 is used to deploy [Pixelfed](https://pixelfed.org). + +- Migrate + + Move service configurations and user data to a different hosting provider. + +- [NixOps4](https://github.com/nixops4/nixops4) + + A tool for deploying and managing resources through the Nix language. + NixOps4 development is supported by the Fediversity project + +- Resource + + A [resource for NixOps4](https://nixops.dev/manual/development/concept/resource.html) is any external entity that can be declared with NixOps4 expressions and manipulated with NixOps4, such as a virtual machine, an active NixOS configuration, a DNS entry, or customer database. + +- Resource provider + + A resource provider for NixOps4 is an executable that communicates between a resource and NixOps4 using a standardised protocol, allowing [CRUD operations](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) on the resources to be performed by NixOps4. + Refer to the [NixOps4 manual](https://nixops.dev/manual/development/resource-provider/index.html) for details. + + > Example: We need a resource provider for obtaining deployment secrets from a database. + +## Development + +All the code made for this project is freely licenced under [EUPL](https://en.m.wikipedia.org/wiki/European_Union_Public_Licence). +This means, anyone can use the work here to learn from it or change it according to their needs. +You can even read up on [development proceedings](https://git.fediversity.eu/Fediversity/meta). + +Contact the project team if you have questions or suggestions, or if you're interested in using Fediversity software for your operations: +- E-mail: +- Mastodon: + +### Content of this repository Most of the directories in this repository have their own README going into more details as to what they are for. As an overview: