Skip to content

Instantly share code, notes, and snippets.

@bastianallgeier
Last active December 26, 2015 14:39
Show Gist options
  • Save bastianallgeier/7167517 to your computer and use it in GitHub Desktop.
Save bastianallgeier/7167517 to your computer and use it in GitHub Desktop.
@fhemberger
Copy link

I'm leaving some technical ideas here as well.

GDS core

Base system, responsible for things like:

  • General setup and global settings
  • Managing applications
  • Backup
  • Security (e.g. SSL encryption)
  • API

GDS should also serve as an identification hub for Mozilla BrowserID based logins. When using docker.io as a basis, it's also possible to version control all changes made to the single containers, so it should be possible to return to a "last good" configuration, when things get messed up.

GDS Applications

Each GDS application is a "meta-container" with one or more containers which make up the application. Each app has a separate storage container, where all data is saved separately from the application. So you can switch – for example – the mail server component while your data stays untouched. This also helps with backups.

All apps run completely sandboxed and communicates over a simple JSON api with the GDS core (e.g. service name/type, URLs/ports for service endpoints, meta info, etc.)

Email

The email app comes with auto discovery for account settings in your client with automx.org (requires wildcard SSL certificate for subdomains). For security reasons, only encrypted connections are allowed. Optional, a function to easily create and manage GPG signatures for various mail accounts should be possible.

Containers:

  • email-server
  • email-storage
  • email-webmail

Calendar and Contacts

The calendar and contacs app consists of a simple CalDAV server, which also allows to expose the owner's contact details as a vCard.

Containers:

  • caldav-server
  • caldav-storage

Avatar server

It allows to associate avatars to single mail addresses or whole domains, like Gravatar and exposes an API for avatar discoverability.

Containers:

  • avatar-server
  • avatar-storage

Connects to:

  • Email app (discovery of hosted addresses)

File server

Allows storing/sharing of files. Either via NFS/SMB in an internal network (showing up as network drives), SFTP ow a web interface (like Dropbox or Owncloud). Ideally, files should be versioned/backed up automatically (e.g with something like Time Machine).

Containers:

  • file-server
  • file-storage
  • file-webinterface

Connects to:

  • Calendar and contacts (contacts for sharing files with)

Web server

Meta container for offering to host own websites and applications. It contains sub-containers for installing web-applications like blogs, forums, analytics, etc.

Communications

Chat services (based on XMPP) or video/screen sharing (via WebRTC)

Containers:

  • communications-server

Connects to:

  • Calendar and contacts (contacts for chatting)

APIs

Discoverability API

Connect different GDS instances, e.g. for creating a decentralized social network or offer services to the community (e.g. "Hi, I'm server xyz and I offer these services …") It still needs to be solved, how the data for single users are handled in shared environments.

@lukasbestle
Copy link

I'd like to add a few ideas:

SSH server

This is a pretty important feature if the user is a tech expert and something breaks - but it should be available as a separate app, of course!
It should be as simple as possible and should only work with SSH key authentication - before being able to use the SSH login, the user would have to add his/her SSH public key to the web interface like GitHub.
There should be a shell providing all web interface features as a nice CLI.
This is rather optional and not required at the beginning, but would be a nice feature for power users.

Payment

  • I see a problem with app payment: This would be centralized again.

    Let's say the user wants to install Birdy, he would be asked to pay that $4.99. He would be sent to PayPal/Stripe/whatever to pay the app. But to whom? To GDC?
    Wouldn't it be better to define custom payment options in the app.json file so the money gets directly to the developer? Of course, this would be rather complex as there would be custom validation functions to check if the payment succeeded and to tell the developer's server that all is fine etc.

  • To make the apps user-friendly, it would be cool to provide demos for every app like in the Google Play Store. This would add another complexity, though.

App store

It should be decentralized as well, so there could be an "app server" app for GDC to host your own app repository. A user could then subscribe to that server using its URL and could browse, buy and download apps directly from there.

User management

Every user should have his/her own profile containing a bio, some custom meta data and a profile image like Gravatar.
Apps could access these profiles (so the avatar server could get the avatar images directly from this central user database etc.).

@bastianallgeier
Copy link
Author

Thanks so much for your comments, guys. I moved everything to https://github.com/grand-decentral-station/concept and tried to add your comments directly to the concept. I added you as contributors to the contributors.md. I hope that's ok.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment