# Software Stack ## Target Vertical(s) At first our efforts for creating a software stack are mainly targeted at the Micro-Cloud providers. The stack we make will be very much targeted at 'small groups' or 'individuals' using a large set of software that only has the options that make for a predictable and working set of tools. Since we expect the 'Public Organisations' to have very specific needs or request it might be hard to provide them with something that works fast. To give ourselves time to develop the complete set of hardware, software, documentation and procedures we will start out serving the Public Organisations vertical the traditional way. ## Software we MUST use There are a few 'must use' software packages: * Nix and NixOS * Mastodon * PeerTube * PixelFed * Matrix ### Nix and NixOS In our project plan we have stated that we will use Nix and NixOS for all our deployments and efforts. There is a number of reasons for this: * Nix promises to be fully reproducable. This will provide us with a stable way to deploy tested sets of software AND a way to revert changes easily. Debian, arch, rpm-based distri all do not provide us with this and it is of the highest importance that we do get this. * We are helping the Nix(OS) community further, we are giving value to NixOS and are helping building it into a full competitive ecosystem. * NixOS is 'upcoming' and 'hip' and 'happening'. The community is still not completly settled and there are tools that are still being developed and where we can actually help to develop the way things work. This will give our project value. * NixOS does already contain examples of deployments of several tools in the Fediverse. We can use these to further our project quickly. * If we do it right, we should get the maximum available speed of developing our system, since we don't have to redo stuff after we actually fixed it (at least this is what we hope). ### Mastodon Mastodon is one of the projects (the project?) that gives the Fediverse credibiliy. It is already used by millions of users and large organisations. The main challenge with Mastodon is that it's creators use Kubernetes to deploy it. There are instructions on how to deploy a 'simple' 'stand alone' version of Mastodon. The 'how do you deploy at scale' is hidden in 'helm-charts' however. Mastodon servers are not 'lightweight' services (for that we might better look at goToSocial) but we need to create a way to deploy mastodon servers for people that want to use this. ### PeerTube PeerTube is a video serving server. It is created and maintained by FramSoft. The default installation guide uses shell example lines to install and configure. The most recent version in nixpkgs is quite old. Main challenge is to keep an eye on PeerTube development and keep our version up to date. ### Pixelfed Pixelfed is maintained by dansup (a one man Canadian development effort). Nixpgs version is outdated and also writes data in the nix store. ### Matrix Matrix consists of a protocol, clients and servers. Most used server is 'synapse' and most used client is called 'element'. There are noumerous problems with running Matrix. We need to work with the Matrix developers (and foundation) to get it running. ### Garage Garage is an s3 compiant storage. We would like to use garage as an 'agnostic' data store below all of the services we support. Goal is to design it in such a way that we can use it to do full service portability. ### Mailserver We need something that does: * SMTP * Spam Filtering * IMAP * Sieve * SPF, DKIM, DMARC, ARC etc ### DNS Service We need a DNS service that has an API so we can create our needed DNS entries in a centralized environment. ### NixOPS placeholder ### ProxMox (on Nix) placeholder ### NixPanel A web interface that allows for easy administration of deployed Nix services on the cluster by 'human administrators' (so people that do not have 30+ years of IT admin experience. ### Monitoring placeholder ### Compliance testing placeholder