FOSDEM 2014 Go devroom project roundup

We’re in the Go devroom today at FOSDEM 2014 in Brussels, and we’ll be blogging about the talks today. The talks are also being streamed online.

We won’t cover things you can easily glean from the slides or abstracts, since we want to have time to pay attention to the talks!

Iris Decentralized Messaging: Peer-to-peer based messaging for back-end service decentralization (Péter Szilágyi)


Iris is a messaging framework that Péter Szilágyi developed to simplify the creation of decentralized clusters. It’s Péter’s PhD project and looks quite sophisticated and polished.

It has API client libraries for Go and Erlang. Check out a simple example of using Iris to create a chat room in the demo slides. And check out Iris in use at RegionRank.

Over on Sourcegraph, you can see usage examples and docs for Iris’s Connect function and Connection type. There are 2 other open-source projects using Iris: coopernurse/barrister-go (bindings for Barrister RPC) and coopernurse/retina (an HTTP-to-Iris gateway).

Talk description - Project Iris homepage - Sourcegraph project page

Camlistore: Your personal storage system for life (Brad Fitzpatrick and Mathieu Lonjaret)


Camlistore’s goal is to be a storage system that outlasts any one person or organization and can be used by anybody, not just the nerds in the Go devroom (according to Brad). (Or the seemingly 100 other nerds waiting to get inside. This devroom is seriously in high demand.) Even if you don’t use Camlistore, you can learn a lot by reading its source.

Brad did a live demo where he took a photo of the devroom, uploaded it to his “Camlihouse”, and showed it appear shortly thereafter. Then he opened his Camlistore using FUSE and showed the photo in OS X Finder.

A tidbit of Go standard library lore: the database/sql package was originally extracted from Camlistore. (Check the commit logs if you don’t believe it.)

Talk description - Camlistore homepage - Sourcegraph project page

Interfaces: a new leaf for an old book (Matthew Cottingham)


Matt Cottingham is talking about Go interfaces and how to use them effectively. He discussed how to mock a struct type, giving the example of mocking sql.DB by creating a new interface DBer with the same method set as sql.DB and creating a mock implementation of that new interface. He also covered interesting uses of interfaces in the Go standard library, such as net.IP.

Talk description - - Matt’s homepage - Sourcegraph profile page

Scaling with Go: Youtube’s Vitess (Sugu Sougoumarane)


Vitess is a library that provides tools that facilitate the scaling of MySQL databases to large scale web services. It’s currently a critical part of production infrastructure at Youtube.

Sugu Sougoumarane gave an incredibly detailed talk about the design and architecture of Vitess and the motivations behind it. Vitess has multiple components. vttablet sits on top a single MySQL instance and handles things like connection pooling. Another component handles sharding and load balancing to many MySQL instances.

Vitess enables MySQL to serve millions of queries per second at millisecond latency. It’s only about 70,000 lines of code of Go, and Sugu estimates it would’ve taken at least 200,000 lines of C++.

Sugu also talked about his experience using Go for Vitess. He mentioned that there were some issues in the early days (2010) due to the immaturity of the language and library support, but now no one should worry about Go’s performance.

Talk description - Vitess project page - Sourcegraph profile page

Write your own Go compiler (Elliott Stoneham)


Elliott is the author of TARDIS Go, a self-proclaimed “mutant Go compiler” that compiles Go into other languages so that it can run in different client environments. Currently it turns Go into JavaScript, C++, C# PHP, ActionScript, and Neko. It works by using the library to transpile Go into Haxe, which then gets transpiled to other languages.

Other Go compilers he’s excited about are llgo, GopherJS, and Tulgo (proprietary but its blog is worth reading).

Elliot says “30 years ago, I fell in love with the C programming language. I stopped programming 10 years ago. 1 year ago, I started using Go. I fell in love with Go. I fell in love with programming again.”

He did a demo of animated gophers taking C++ manuals, stacking them, and then burning them (in parallel) running in C++ on his machine. The same demo (derived from the same Go source via TARDIS Go) runs online in JS.

Talk description - Elliot’s Twitter - Sourcegraph profile page

Looking toward Go 1.3: What’s coming in the next major release of Go (Andrew Gerrand)


Andrew reviewed the Go 1.3 TODO list. The main topics discussed were the toolchain overhaul (better linker parallelization by moving code gen from the linker to the compilers, and the move to an all-Go toolchain), sync.Pool, and os/fsnotify.

For those interested in the progress toward Go 1.3, Dominik Honnef’s What’s happening in Go tip series is also a great way to stay updated.

Talk description - Andrew’s homepage - Andrew’s Twitter (@enneff) - Sourcegraph profile page

Porting Go to New Platforms (Aram Hăvărnanu)


Aram Hăvărnanu is a systems programmer who has worked on various kernels and recently ported Go to Solaris.

He’s talking about how to port Go to new platforms, what to watch out for, specific issues he ran into porting to Solaris, and specific implementation details.

He gave an overview of the Go internals and specific files you’ll need to look at it when making your own port. He’s walking us through specific parts of the Solaris port (Unix signals, syscalls, stack layout).

Talk description - Aram on Twitter

Lightning talks

Compiling Lisp to Go

Gisp is a Lisp to Go transpiler - several examples demoed. Project URL:


Go IntelliJ Idea plugin

If you use IntelliJ Idea, you should check out the Go plugin. It supports syntax highlighting, autocomplete, unused import, go get integration, docs, live code templates. Good demo of the plugin. Future plans: AppEngine support, templates for test files, better GOPATh integration, code refactoring, gccgo support, golint.


tiedot: a NoSQL engine powered by Go

Tiedot is a high-throughput, low-resource NoSQL database engine implemented completely in Go. It’s designed to be easily embeddable in Go programs, but also runs as a standalone HTTP service. Cross platform (Windows and Linux), and low resource consumption means it’s great for embedded systems.


Writing a database driver for fun and freedom

Go database driver for SQLServer using the TDS protocol. Unlike ODBC, is pure Go. Check the project out here.


Webloop: headless webkit in Go

Webloop is a Go library for scripting web browsers (similar to PhantomJS but in Go). Great for testing and scraping. Check out the project here.


Why contributing to Go is cool

Talk about experience using Go inside a large French bank. He ended up making a lot of contributions to the Go compiler and standard lib as part of that work (e.g., parsing numbers efficiently).