Great intro into how to write nice Go code!
One comment regarding interface pollution: While I agree that in many cases it's not needed to introduce an interface, sometimes interfaces help you hide the implementor type: I've now already had it multiple times that I switched from a 'struct implementor' to a 'func type implementor' without breaking compatabilities. Also, by exposing a struct, you also immediately expose that you can create a zero value of that type, which doesn't happen for an interface.
Sure, functionality-wise Ubuntu and also other Linux operating systems can definitely match the palette that OS X offers. The problems with Ubuntu are starting if you are getting into the area of peripherals:
Drivers for some things are missing or are not performing as comparable Hardware does under OS X, it gets even worse when you're struggling with HiDPI: Have you ever tried to have one non-HiDPI and one HiDPI screen as when using your QHD laptop screen together with a FullHD secondary monitor? Total pain in the ass under Ubuntu and in contrast very easy on OS X.