What additional features can we add to Anet?
ANet could use public key encryption systems to encode the data passing between two nodes, making impossible "packet sniffing". Also, digital signatures with public key encryption systems can be used to "prove" your identity. This might be required if you want to make a strict and regulated network structure, as you need to make sure no one is lying about their own IP address, or any other kind of network address you'll use (remember, ANet is protocol-agnostic).
Since we cannot assume anything about the underlying protocol, we cannot assume that compression algorythms are already used. So, doing a quick "gzip"[1] might help a lot. By the way, compression should be made only on the contents of the packets, since the headers of the packets will not be in plain text, but with packed bits. Yes, bits, not bytes. More on this in the high-level design.
Why not try to implement "compatibility" modules in ANet to allow it to use the existing Gnutella and Freenet network? I know it will be pretty easy with Gnutella, since it is very similar to ANet's queries, but it might be though with Freenet. But, then, if everyone starts using ANet, I don't see much point of doing that...
ANet is not forced to be anonymous. Because it is very modular, we could make some modules to "force" it to use some well-known networking structures, such as ring, star-shaped, backbones, or anything we could think of. This could really speed up ANet for some services. For example, chat rooms could actually be the result of the network structure (each star is a room...).
I know, distributed databases is not something new. But, if you look at the way they are implemented, they always assume things like you know all the IP addresses, or like one node is the "coordinator". What if we could implement a database, with all the "usual" transactions of a databse, but where all the nodes are equal and anonymous? Any node could go down, and not only no other node has to care, but also there is no "coordinator election", or any complex algorithm to figure out which node has to be more important than the others. That would really make the database secure, as all the transactions are "insecure", and you cannot luckilly figure out which node is the coordinator, hack it, and break the consistency rules of the database.
So, the database will be distributed, not only for the data, but also for all its "rules" it needs to enforce. If we can do that on top of an anonymous distributed network (for example, err... I don't know... ANet?), it can really change the way we view databases as those big, awfully complex, though to maintain, huge machines, with tons of code and weird "fool-proof" backup mechanisms. A plug-and-play database, anyone?
OK, here's something crazy now. With ANet, any node in the network represents the whole network. In an anonymous distributed database ("ADb"?), any node represents the whole database. What if we do the same thing, but with computing? A bit like Seti@home[2], but with no server. I mean, one node has to "start" the computation, but after that, no one is controlling its results.
Not only we have to figure out a way to make a cross-platform language running in a "secure" virtual machine (like Java applets, but open source), but we also have to figure out how to make a language made specifically for multithreading[3].
But what if anyone could use that cluster of computing nodes as if it was... a real personnal computer, with its GUI, processes, multiple users, and so on? We use the anonymous distributed database as memory storage (the RAM and hard-disk), ANet for all the internal communication (the motherboard), and distributed computing for the actual computing (the CPU). Everyone has old, unused computers, so why not connecting them together, and make the cluster work almost as fast as a new computer, regardless of the CPU or OS they're using?
Last update for this document: September 1, 2001, at 19:6:46 PST