Skip to content

Instantly share code, notes, and snippets.

@geoah
Created July 16, 2018 13:27
Show Gist options
  • Save geoah/76f8fbd0f475ede20e0d483803d3c9f1 to your computer and use it in GitHub Desktop.
Save geoah/76f8fbd0f475ede20e0d483803d3c9f1 to your computer and use it in GitHub Desktop.

Nimona

Status

Nimona is in active development and still in very early stages of design. Everything before v1 should be considered proof of concept and not be used in production or mission critical systems. All future versions will be backwards compatible; for better or worse.

Abstract

Nimona’s aim is to create a set of protocols that allows users to use compatible applications to create and share data without being restricted to the application that created them or having to force other users to use the same application to access them. Users are always in control of their relationships, their data, and who they share them with.

It providers a number of very opinionated layers from networking, messaging, and identity management, to application level layers for managing permissioned static or dynamic data. The various components and protocols that will enable this network can be also used as stand alone for building decentralized and peer to peer applications, services, or other protocols.

1. Introduction

1.1 Problem statement

The web was built to be decentralised. As more people came online, the need to connect with others; to create and consume data, became more important than keeping the internet open and independent. Out of this need, information silos were created, and over time the first tech visionaries became large enough to basically “own the internet”.

Currently most users of the web depend on a handful of centralized services that enable them to create, store, and share their data. Each of these walled gardens will try to monopolize their users’ time, data, and relationships and try to keep them using the service. Using your data in another service is hard, and even if you are able to export your data, you won’t be able to do much with it as they are not in a standard format. Often users will move between services or use multiple services at the same time that provide similar amenities either because of missing features or in order to be able to share data with users that prefer (or simply just ended up on) another service. Over time most of these services will get abandoned by their developers, users, will change into something else, or just die off. This results in data and relationships being left behind and eventually lost.

Most of these services make money by creating profiles from their users’ data and showing them advertisements they are most probable to click on. In addition, the basic notions of anonymity, privacy, and individuality have been forsaken in exchange for the ability to create, share, and consume data. We have traded ownership and control of our data, our personal habits and interests for niceties such as personalised recommendations, better search results, more relevant posts, etc. Data that are being used for the sole purpose of creating more targeted advertisements and get more users to click on the links they are presented with. Whether that is a new game that is coming out, a new movie you were waiting to see, or latest publicity stunt of your favorite politician. We have become dependent on a centralized all-powerful service that hoards our content and forces the rest of the the world to follow suite just so we can re-use our data inside their platform.

1.2 How can we fix this without tying people to yet another service?

To solve this, we need to put people in control of their own data. Find solutions that are easy to use, accessible, secure and private by default; solutions that enable developers to create services that can be monetized without cutting corners on core principles. For all of this to work, we need to build a foundation, something that the everyone will be able to work on, we can’t just build yet another service this time.

1.3 Nimona

Nimona is being built on the same principles the web was originally built upon: there is no central point of control and users host their own data.

1.2.1 One identity, same relationships.

Users get an identity they can use across multiple applications and services. You are yourself, not your Facebook profile or your Google account. Your identity belongs to you, contains the information you want it to contain, and you control who can access what information in your profile. You don’t need a separate login or separate profile for every application you use.

Your friends and other people you communicate with also don’t usually change. All your relationships come with your identity no matter which application you are using. There is only one social network in the real world, and it shouldn’t be different on the internet. You don’t have to invite everyone again when a new service comes around.

1.2.2 A message, is a message, is a message.

Applications can create, manage and share data that can be used by other compatible applications. Alice can send messages to Bob without having to know or care what messaging application Bob uses. An initial registry of common data types allows compatible applications to exchange data between them, extend the existing types, or create new ones if they need to.

1.2.3 Your data.

The data you create, like articles, conversations, photos and status updates, are only shared with the people that you give access. You can decide to make some of them publicly accessible, and users can request them from any peer that has them. They will be stored either on the devices where you applications are installed, on online services you have authorized for that type of data, or on dropbox like storage applications that you have authorized to hold a copy of your data. When you authorize a new application and give it access to your data, it will be able to talk with any other services that have access to the same data, and retrieve the data it needs.

1.2.4 Old dogs, new tricks.

The various layers will try to provide functionality and features that enable applications to use users’ data without putting them at risk. An example would be to allow a user to limit the data requested by an application to an anonymized version. Restrictions based on content, access, time, and other factors should be also considered.

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