In parallel with Anthony’s hands-on work digging into the protocols and the go and C++ client codebases, I have started investigating options for bringing the go codebase to new platforms.
The recent Go 1.5 release added support for Android and iOS. There is a gomobile tool which can be used to generate Java and ObjC binding for go packages for integration into existing native applications, or to build standalone APK and APP files based on a generic application framework, for pure go applications on mobile.
At first, I thought it would be necessary to extend this support to include C++ code generation to bring go to mobile Linux platforms, but I am now of the opinion that just building the existing go client for these mobile Linux platforms might actually be entirely adequate – treating them purely as other Linux distros, rather than specifically as mobile platforms. At the time of writing, that would result in full-node clients, but would be the basis for light client when that “mode” is available. It would not support in-process go light-clients, but that isn’t currently a supported scenario anyway.
So … I will get going to compiling the go client for the various mobile Linux platforms (Sailfish, Tizen and Ubuntu Touch) which we are targeting. The go client has been ahead of the C++ client for light client, and ultimately I think we are going to want both implementations (and more – Python, Java, Javascript) on all platforms they can reach.
I will be leaning on the work already done by EthEmbedded, because our mobile/wearable platforms are very, very similar to those embedded platforms – even sharing the exact same SoCs in some cases!