@jlpell and I are teaming up on this project. The experience is already fulfilling deep educational desires. Thanks to him for opening the door to a new world for me.
This project is exactly the chance I’ve been looking for to start understanding system-level design, to get more in-depth experience with computer science fundamentals, and to start learning how to make good decisions by looking at other successful implementations.
One thing I’m learning is that there are small decisions to be made that may have far reaching effects and might break the usefulness of the design if use cases are not properly anticipated.
For example, if I were programming a hundred or so sensor devices to upload data to the network, I’d either need to automate the process of each device executing and logging into their own instance of Authenticator, or perhaps one and only one instance of Authenticator would be executed and logged in on a controlling device, sharing it’s instance of Authenticator with the cluster via RPC. Of course, how do I secure the exposed instance so that only my devices can use it to authenticate applications for the network? Isn’t the latter recreating the problem that SAFE network is solving?
What I’m getting at is that the immediate problem I’m thinking about is how to create a flexible enough design that can just be extended and doesn’t have to be refactored in the future in a breaking way. Is this possible or should I not worry about it so much and just make peace with the inevitable?
Anyway, here’s an initial DESIGN doc for the next steps in the project.
The component I’m focused on right now is an IPC and single instance library. The implementation that came to mind is Electron/Chromium, which uses named mutexes on Windows, and Unix domain sockets on OSX/Linux.
For other research areas, @jlpell got me looking into aws-cli which looks like a really good model, especially if we later get into remote device management.
Although beginning as an educational experiment, I’m curious to know if this project would be a useful @maidsafe (@Viv) undertaking to provide additional tools for network application developers?