A lot of interesting code got put into repositories last week. It was a busy time integrating with the refactored
Routing library with code commits coming from developers working on other crates, such as
Vault to get the API sorted out for this sprint. @benjaminbollen wasn’t allowed to rest with a flurry of PR’s to his library at the same time he was making a few internal changes to it. The sweet outcome is that
Routing has more or less taken the form intended by this sprint.
Vault is actively integrating with
Routing and once that is complete, sometime this week, we should have a functional vault binary. Of course, we won’t be cruel to ask people to figure out how to build and run it on their machines, instead there will be installers.
The installer deliverable is two-fold. Firstly, all the examples in various crates would be converted to functioning executables and deployed by the installers. So for instance,
self-encryption will be available as binaries deployed by the installer for everybody to play with. There is no longer a need to clone and build the individual crates and run the examples manually. This should be a great relief for most who do not want the hassle of tracking, cloning and building individual crates to get to the examples.
The other benefit of the Installer will be the ability to deploy the vault executable itself. In order to do that
Vault must be ready which in turn means the config-file handling task in
Crust must be feature complete. The flowchart for this is already detailed and is being put into code as I type:
Also, since our droplets are Linux nodes right now, the droplet testing will be initially carried out on Linux environment and with all edges smoothed it will only be a matter of time to test it on other platforms.
The network setup possible just now is only LAN. This is because UDP-hole-punching and UTP integration are not feature complete in
Crust yet. However, that library will greatly benefit from the addition of @Peter_Jankuliak who is coming into Crust as one of the maintainers, with the other being @vinipsmaker. They are quickly addressing the objectives there and also focussing on bringing
Crust to compile with Rust-Beta, enabling us to move all other dependent crates to compile with beta instead of nightly. Once sorted, we will see the full-blown peer-to-peer connectivity including and not limited to NAT-traversals meaning that you will be able to start connecting your vault to the SAFE Network, exciting times just around the corner!
There is quite a bit of work done in
Clients too. For one, the integration of Client (includes 3 crates:
safe_dns) is complete with
Routing and builds nicely. It is powerful and has the potential for varied usage. To showcase one of the features of the Client modules, we are building a sample desktop-UI app which will help do some Nfs operations on the SAFE Network. In particular, the user will be able to register one’s DNS and make a website in compliance with the SAFE-protocol. @Krishna_Kumar has been very active on this and kudos to him for having won the fight against different platforms to smoothly deploy and run the app. He sorted out strange hurdles like inability to stream content more than 64 KB in Firefox and capture embedded URLs and wrap them in SAFE-protocol.
Firefox on Windows however is a 32 bit application and thus unable to link to 64 bit native libraries. Building 32 bit library is a pain because rust-32 bit compiler build is not as smooth as the Rust-64 bit compiler builds. So for Windows the way out right now is to download the developer edition of Firefox, which comes in 64-bit flavour too. Those who deal in ABIs will know (and, if you are like me, then rejoice) the clean C-ABI that exists for 64-bit Windows. No more name decorations for pure C interfaces. This is made possible by the fact that there is just one calling convention and no name decoration. Symbols are exported just as they read in the source. Which means you are free to choose any conforming compiler. Win32 has problems in that in call-conventions (such as
__stdcall), the exported symbols are different for MinGW and VC. And we are talking about pure C interfaces ! What a mess.
Anyway, everything is tamed now and I have a proof of concept of FFI bindings to our main rust-code which will help you integrate with
Firefox … just name it. Those who are interested in looking at it can take a peek at my repository here. This is what will be used by POC Firefox Addons and Electron desktop apps too. The C in-direction there is to help you use
With that we’ll more or less conclude this sprint and are also going to start planning on deliverables for sprint-4 sometime this week.
Here’s the dev-transcript.
Edit (26-Aug-2015): With recent updates of dependencies on crates.io, 32-biit builds on Windows work fine and Firefox-32-bit is successfully tested too. I’ve accordingly updated the Readme for the Firefox example in the repository.