Can we make a censorship-proof web?
This is an internal discussion I had with myself, but I wanted to hear some outside options on this.
Let's start with the problem: censorship. Should we make a "new Internet" that is censorship resistant? Or should we piggybsck on what we already have? Let's explore that.
#### Should we change the infrastructure
Re-doing the web is basically infeasible. We'd have to convince basically all the population on a new routers, DNS, and NIC specifications to transport the new "new internet" packets. So, we should keep the infrastructure and piggyback on it.
#### Should we change the protocols?
So, far, no. The HTTP/S and WS protocols have been sufficient for what we need them to do. I mean you can't get more hyper text than hyper text am I right?
Also, if we were to make our own custom protocol for our "new internet" we'd have to make browsers that can use the new protocol. So, no the protocols are fine and we can keep them.
#### The main limitation
Currently we have Client-Server and P2P. Each have their own advantages and disadvantages. Obviously Client-Sever is very vulnerable to censorship, but whG about P2P? I've gone through the rabbit-hole of P2P protocols, and they're good but not perfect.
#### The problem with P2P
I've had this talk with a colleague but let's imagine we're building a P2P Discord. Lets see what problems we encounter:
- How are we going to make sure the chats reach everyone? How is that going to affect scaling?
Mesh comes to mind but good luck scaling it past 15 nodes. You can use trees for efficiency, but the trees are too rigid for a dynamic environment like chat rooms. You can use gossip, but it's unreliable. Same problem with small-world. Realistically, the solution would be a mix of the previously mentioned along with some extra code to cover for its the downsides.
- How can discovery work?
Let's imagine you have a server on this app. How are you going to let new people join without being online 24/7? Let's say anyone can join using someone else who is in the same chat room. What if they're offline too? The answer is: this wouldn't work. Something needs to be on 24/7 to listen for join requests.
- How can we protect against state-sponsored swarms?
A state can have swarms of bots/accounts basically tampering with our messages and breaking the message routing we have in place. Even if we have tamper-proof measures in place to ensure authenticity of messages, we can't guarantee that the state-sponsored swarms are going to let our messages get delivered in the first place.
- Difficulties of sending chat history to new online nodes after they were offline.
Let's say two peers were chatting. Then one of them leaves, and a new peer joins and starts chatting. Merging the histories together so that a full conversation history isn't impossible between all online/offline peers, but it's going to take its time for sure.
- Data-hogs like videos. How are those shared?
Storing text is no problem, but videos are beasts. So, we'll have to find a way to make our application store replicas across nodes. If all the nodes are offline, then you're screwed.
All the aforementioned are just few of the limitations that building a censorship-proof application are going to encounter. I'm all ears for how a custom solution would treat this.
This is meant to be a discussion. So I'd love to hear what y'all think.