2
0
mirror of https://github.com/ComradCollective/Comrad synced 2024-11-19 15:25:34 +00:00
Comrad/README.md

199 lines
9.9 KiB
Markdown
Raw Normal View History

2020-08-06 10:39:56 +00:00
# Komrade
2020-08-05 09:15:10 +00:00
2020-09-23 10:01:49 +00:00
Komrade is a socialist network. It seizes the means of digital content production.
2020-08-05 09:15:10 +00:00
2020-08-06 11:17:13 +00:00
## Why another social network?
2020-08-23 22:01:16 +00:00
Is a 'socialist network' possible? Although the internet began with anarchic design principles, it quickly consolidated into the hands of a few of the largest corporations in the world. It has effectively recreated the capitalist mode of production within itself: the means of content production (social media platforms) are privatized while the work of production (posting) remains socially distributed. Exploitation inheres in that relation, whether in the industrial factory or the digital platform, because the value you produce is taken from you, concentrated and privatized.
2020-08-13 18:34:03 +00:00
2020-09-23 09:32:18 +00:00
But a digital network can be redesigned. The technology behind these social media platforms is actually quite simple. We can easily build our own social network, one which is secure, insurveillable, and unmonetizable—one which would give people the security they need to communicate about whatever they want, including protesting against capital and the state.
2020-08-06 11:17:13 +00:00
2020-08-17 22:21:04 +00:00
## Core principles
2020-08-05 09:15:10 +00:00
2020-09-19 16:48:35 +00:00
### Confidential
2020-08-05 09:15:10 +00:00
2020-09-13 17:00:53 +00:00
All of your data are strongly encrypted end-to-end: only you and those you write to can decrypt and read it. To anyone without the right decryption 'key', the data is nonsense.
2020-08-17 22:16:40 +00:00
2020-09-13 17:29:37 +00:00
### Untraceable
2020-08-17 22:16:40 +00:00
2020-09-13 17:33:33 +00:00
All network traffic is routed through Tor, a "deep web" of computers so dense even the FBI can't follow you through it. Komrade's "Operator" or central server is accessible only from Tor. It's impossible to tell who is sending what to whom, or even who is using the app at all.
2020-08-17 22:16:40 +00:00
### Unmonetizable
What's untraceable is also unmonetizable: your data can't be harvested by technology companies and used for advertising algorithms. You're protected from both surveillance capitalism and the surveillance state.
2020-08-05 09:15:10 +00:00
2020-09-13 17:49:12 +00:00
### Democratized
2020-09-13 17:00:53 +00:00
2020-09-23 07:45:51 +00:00
Group accounts or 'collectives', like @portland or @socialists, grow as existing members 'vouch for' new ones, forming webs of trust. In order to join a group, at least one member must vouch for you; this minimum (or 'quorum') may grow as the group grows, or in accordance with a 'constitution' which the group votes upon.
2020-09-13 17:00:53 +00:00
2020-09-13 17:49:12 +00:00
### (Semi-)decentralized
2020-09-13 17:00:53 +00:00
2020-09-14 09:46:14 +00:00
Data is deleted as soon as possible from Komrade. Komrade's "Operator" simply sorts and holds the mail temporarily: as soon as users log in to download their mail, the messages are deleted from the server and network forever.
2020-09-13 17:00:53 +00:00
### Anti-profit
2020-08-17 22:19:56 +00:00
2020-09-13 17:11:52 +00:00
Not just non-profit, we're anti-profit.
2020-08-17 22:19:56 +00:00
2020-09-13 17:00:53 +00:00
### Open-source
Information wants to be communist.
2020-08-17 22:20:33 +00:00
## Social media features
2020-08-05 09:15:10 +00:00
2020-09-13 17:11:52 +00:00
We present a simplified set of social media features drawn from everything that's out there:
2020-08-05 09:15:10 +00:00
2020-08-17 22:21:04 +00:00
#### Profile
2020-08-05 09:15:10 +00:00
* Curate a profile with photo and posts (e.g. Twitter)
* Show profile to world (e.g. Twitter)
2020-09-13 17:11:52 +00:00
* Show profile only to those you trust (e.g. Facebook)
2020-08-05 09:15:10 +00:00
* Show profile only to your local area (e.g. Nextdoor)
2020-08-17 22:21:04 +00:00
#### Posting
2020-08-12 19:53:59 +00:00
* Post up to 1 image and/or 1000 characters
2020-09-21 08:43:49 +00:00
* Post to the entire world (e.g. Twitter) ✔
2020-09-13 17:11:52 +00:00
* Post to those you trust (e.g. Facebook)
2020-08-05 09:15:10 +00:00
* Post to your surrounding area by a distance radius (e.g. Nextdoor)
* Anonymously up-vote or down-vote posts (e.g. Reddit)
2020-08-17 22:21:04 +00:00
#### Organizing
2020-08-05 09:15:10 +00:00
* Host events and invite others (e.g. Facebook)
2020-08-06 11:22:53 +00:00
* Host events like protests anonymously (new)
2020-08-05 09:59:15 +00:00
* Anonymously pin on a map sites of danger, like police (e.g. Waze)
2020-08-05 09:15:10 +00:00
2020-08-17 22:21:04 +00:00
#### Messaging
2020-09-21 08:43:49 +00:00
* Message securely with encrypted contents (e.g. Signal) ✔
* Message with untraceable metadata via Tor (new) ✔
2020-09-23 09:34:09 +00:00
## How is this different from ...?
2020-09-23 09:44:31 +00:00
See ["Comparison of alternative social networks" on the wiki](https://github.com/Komrade/Komrade/wiki/Comparison-of-alternative-social-networks) for an attempt at a systematic comparison. (And please help edit, if you can! The data there is a little incomplete and probably a little inaccurate.) But here are some imagined differences:
2020-09-23 09:34:09 +00:00
2020-09-23 09:44:31 +00:00
* **It's not (fully) decentralized.** Who's afraid of a little central planning? In contrast to [Secure Scuttlebutt](https://scuttlebutt.nz/) and [Cabal Chat](https://cabal.chat/), which are 100% decentralized, subsisting only through peer-to-peer connections, Komrade sticks with the old, client/server model. Why?
2020-09-23 09:34:09 +00:00
2020-09-23 09:44:31 +00:00
* **It *is* anonymous.** Because P2P networks almost always expose your IP address: they privilege decentralization over anonymity -- and, potentially, safety. By contrast, lying hidden within the deep web of Tor, accessible only from this application and its built-in Tor client, Komrade will never reveal who is accessing it and its encrypted information. This is important for komrades organizing protests against the surveillance state, and to protect our social media traffic from being harvested and monetized by surveillance capitalism.
2020-09-23 09:34:09 +00:00
2020-09-23 09:44:31 +00:00
* **It's 100% end-to-end encrypted.** Unlike [Mastodon](https://joinmastodon.org/) or [Diaspora](https://diasporafoundation.org/), direct messages between users and within groups remain encrypted 1:1 end-to-end among users. Posts to the public are encrypted to @komrades, a special account which automatically re-encrypts its messages back to any key-registered requester of them.
2020-09-23 09:34:09 +00:00
2020-09-23 09:45:08 +00:00
* **It verifies identities.** Komrade's server, "The Operator", keeps a permanent record of one thing only: every komrade's name and public key, and requires that new komrades choose a unique name. Whenever you send or receive mail, the Operator will make sure that the name and public key on the letter matches what it has on file, verifying the identity of both parties.
2020-09-23 09:34:09 +00:00
2020-09-23 09:44:31 +00:00
* **It's (semi-)ephemeral.** Data, like all natural things, should not last forever. Direct messages auto-delete from the server as soon as they are downloaded. Group messages are sent as direct messages through the "web of trust" of the group membership network. Posts to the world auto-delete in however many days you specify. By contrast, data on both [SSB](https://scuttlebutt.nz/) and [Matrix](https://matrix.org/) is undeletable.
2020-09-23 09:34:09 +00:00
2020-09-23 09:44:31 +00:00
* **It's easy to use.** No invitation or server is needed on startup, unlike [SSB](https://scuttlebutt.nz/), [Mastodon](https://joinmastodon.org/), [Diaspora](https://diasporafoundation.org/), or [Briar](https://briarproject.org/). It's basically a Twitter clone, but one where you can also post to a universal feed shared by the entire world (@komrades), so that you can make yourself known, participate in general discussions, find new contacts, and organize new groups.
2020-09-23 09:34:09 +00:00
2020-09-21 14:38:11 +00:00
2020-08-06 13:02:26 +00:00
## Progress
2020-09-16 17:35:16 +00:00
### Animations from mobile/desktop app
2020-08-23 21:46:25 +00:00
As of the 23rd of August.
2020-08-09 10:33:35 +00:00
2020-09-20 13:07:26 +00:00
<img src="komrade/app/assets/komrade-screen-preview-2020-08-23.gif" alt="GIF animation" />
2020-08-06 13:02:26 +00:00
2020-09-16 17:35:16 +00:00
### Animations from terminal app
2020-09-13 17:00:53 +00:00
2020-09-20 12:44:33 +00:00
#### Connecting through Tor
2020-09-20 12:45:02 +00:00
<img src="komrade/app/assets/komrade-terminal-preview--2020-09-20--tor.gif" alt="GIF animation of Tor connection" />
2020-09-20 12:44:33 +00:00
2020-09-16 18:20:42 +00:00
#### Register/Login
2020-08-06 13:02:26 +00:00
2020-09-16 20:09:30 +00:00
<img src="komrade/app/assets/komrade-terminal-preview--2020-09-16--register.gif" height="500" alt="GIF animation of registering new user" />
2020-09-13 17:21:30 +00:00
2020-09-16 18:28:13 +00:00
#### "Meeting" (exchanging public keys)
2020-09-13 17:21:30 +00:00
2020-09-16 20:09:30 +00:00
<img src="komrade/app/assets/komrade-terminal-preview--2020-09-16--meet.gif" alt="GIF animation of meeting process" />
2020-09-16 17:35:16 +00:00
2020-09-16 18:20:42 +00:00
#### Messaging
2020-09-16 17:35:16 +00:00
2020-09-16 20:09:30 +00:00
<img src="komrade/app/assets/komrade-terminal-preview--2020-09-16--msg.gif" alt="GIF animation of messaging" />
2020-09-16 17:35:16 +00:00
2020-09-19 16:17:35 +00:00
### Posting
2020-09-16 17:35:16 +00:00
2020-09-19 16:17:35 +00:00
<img src="komrade/app/assets/komrade-terminal-preview--2020-09-19--posting.gif" alt="GIF animation of posting" />
2020-09-16 17:35:16 +00:00
2020-09-21 16:27:12 +00:00
### Installing
<img src="komrade/app/assets/komrade-terminal-preview--2020-09-20--install1.gif" alt="GIF animation of installing" />
2020-09-16 17:35:16 +00:00
2020-09-14 16:17:50 +00:00
## Usage
2020-08-12 07:55:06 +00:00
2020-09-14 16:17:50 +00:00
### Install
2020-09-14 09:52:17 +00:00
2020-09-21 17:36:01 +00:00
[Open a terminal](https://towardsdatascience.com/a-quick-guide-to-using-command-line-terminal-96815b97b955), and then copy and paste the following line into it:
2020-09-14 15:59:11 +00:00
```
2020-09-23 07:47:39 +00:00
bash <(curl -s komrade.app/run)
2020-09-14 15:59:11 +00:00
```
2020-09-26 08:25:45 +00:00
Then hit enter. [That](https://github.com/Komrade/Komrade/blob/master/script/micro_installer) grabs a shortcut to [this auto-installer script](https://github.com/Komrade/Komrade/blob/master/script/install). It will install Komrade in a virtual Python environment into a folder of your choosing (although it may only work at the moment if you let it use the default of ```~/komrade```).
2020-09-25 14:59:16 +00:00
2020-09-14 16:32:22 +00:00
### Run
2020-09-14 16:17:50 +00:00
2020-09-14 16:29:31 +00:00
Install as above.
2020-09-14 09:28:56 +00:00
2020-09-25 14:15:46 +00:00
For the mobile/desktop app, run:
2020-09-14 09:28:56 +00:00
```
2020-09-25 14:15:46 +00:00
komrade-app
2020-09-14 09:28:56 +00:00
```
2020-09-26 08:25:45 +00:00
If that doesn't work, try pasting the following lines:
2020-08-12 07:55:06 +00:00
```
2020-09-25 14:15:46 +00:00
source ~/komrade/lib/miniconda3/etc/profile.d/conda.sh
export PATH="~/komrade/lib/miniconda3/bin:$PATH"
conda activate ~/komrade/code/venv
python -m pip install -r ~/komrade/code/requirements.txt
python ~/komrade/code/komrade/app/main.py
```
For the terminal client (which may be broken at the moment), run:
```
komrade-cli
2020-08-12 07:55:06 +00:00
```
2020-09-25 14:15:46 +00:00
2020-09-14 17:07:01 +00:00
Or to run the server or Operator (for development only):
```
komrade-op
```
2020-08-12 07:55:06 +00:00
2020-09-14 09:50:30 +00:00
## Details
2020-09-14 09:39:46 +00:00
2020-09-14 09:40:17 +00:00
### Frontend
2020-09-14 09:39:46 +00:00
2020-09-25 14:15:46 +00:00
#### Mobile/desktop
2020-09-14 09:39:46 +00:00
2020-09-14 17:09:29 +00:00
The mobile/desktop app is made with [KivyMD](https://github.com/kivymd/KivyMD), a variant of [Kivy](https://kivy.org/), a cross-platform app development framework in Python. Python is an easy and versatile progamming language to learn, which keeps the code accessible to as many people as possible. Code for the app is in [komrade/app](komrade/app).
2020-09-14 09:39:46 +00:00
2020-09-14 09:40:17 +00:00
#### Terminal app
2020-09-14 09:39:46 +00:00
2020-09-14 17:09:29 +00:00
Vanilla Python. Code is in [komrade/cli](komrade/cli).
2020-09-14 09:39:46 +00:00
### Backend
2020-09-14 17:10:31 +00:00
#### API
2020-09-14 09:39:46 +00:00
2020-09-26 08:33:12 +00:00
Plain old object-oriented code in Python. The root entity is a "Keymaker": anyone from @Telephone, to @Operator, to users, to groups, who has a public/private key pair. The database uses a simple file-based key-value store using the Redis protocol: [rlite](https://github.com/seppo0010/rlite), via its [rlite-py](https://github.com/seppo0010/rlite-py) Python bindings. All code for backend/API is in [komrade/backend](komrade/backend).
2020-09-14 09:39:46 +00:00
#### Cryptography
2020-09-26 08:32:48 +00:00
We are using [Themis](https://github.com/cossacklabs/themis), a high-level cross-platform cryptography library, for all cryptographic functions, rather than handling any primitives ourselves. Installing it from packages is tricky, so right now the [auto-installer](#install) builds it from sources.
2020-09-14 09:39:46 +00:00
2020-09-26 08:32:48 +00:00
Crypto-related code is primarily in:
2020-09-21 09:52:09 +00:00
2020-09-21 09:53:28 +00:00
* [komrade/backend/keymaker.py](komrade/backend/keymaker.py)
* [komrade/backend/komrades.py](komrade/backend/komrades.py)
* [komrade/backend/phonelines.py](komrade/backend/phonelines.py)
2020-09-14 09:44:32 +00:00