Go for client side development

Registered by Thomas Voß

Go is a programming language that embraces concurrency right on a language-design level. It engraves policy decisions within the language specification and the compiler. A vibrant community of developers is using Go for developing large-scale server-side applications and successful applications written in Go have been reported all over the industry.

This blueprint covers the essential steps to enable Go for client side development, both as an integral part of the platform as well as another runtime exposed via the Ubuntu SDK.

Blueprint information

Thomas Voß
Thomas Voß
Thomas Voß
Series goal:
Accepted for trusty
Needs Infrastructure
Milestone target:
Started by
Thomas Voß

Related branches



Integrating Go with the platform requires at least the following high-level steps to address maintainability and security issues:

 * Decide on the compiler that should be used: gccgo vs gc
 * Decide on the compiler version/runtime version that should be used for development
 * Clarify with security/foundations on maintenance burden and potential security impact
 * Clarify on armhf support and identify work items to ensure flawless operation on mobile targets
 * Clarify on arm64 support, at least for releases after 14.04.
 * Identify minimal required platform integration to allow for developing useful apps
 * Prepare for platform integration by leveraging the existing go-dbus implementation at https://code.launchpad.net/~jamesh/go-dbus/trunk:
     - Develop the sensor service in Go using go-dbus
 * Decide on coding standards / conventions, targeted language versions (1.1/1.2)
 * Start of sensor/haptics service replacement: https://launchpad.net/usensord


Work Items

Work items:
[thomas-voss] niemeyer lool Go language roadmap and alignment in terms of features/architecture support: TODO
[lool] thomas-voss Setup meeting cadence to check on progress: TODO
[niemeyer] Ensure that gc 1.2 is available in the archive: TODO
[mcgowan] Make sure that Gustavo is in the loop for shipped Qt version: TODO

Dependency tree

* Blueprints in grey have been implemented.