Why It's Time For Go Packages To Start Versioning

&tldr; Please provide semantically versioned releases of your packages and libraries.

Update: There is a proposal to bring semantic versioning to the Go community.

When it comes to package management the Go community is different from the rest. There are some places that's not a good thing and release versions happen to be one of them. In general Go packages, many of which are used in production, have no identifiable version other than a commit id and that's a problem.

Continue Reading »

The Three Pillars Of Cloud Computing

What is the cloud? Just someone else's data center

When I first started in cloud computing I held to this view of the cloud. I'd used virtual private servers for years to host my pet applications. Having an API to access servers along with some other infrastructure and having it available almost immediately via an API was useful but I didn't understand the full power. I agreed with the comment above because I didn't get cloud computing.

That phrase is parroted all over. I've seen the term "cloud" put on legacy products as a way to brand or market what's already on the market. And, people buy it. This is, in part, because people don't understand what cloud computing is.

In this post we boil cloud computing down to its essential three pillars. If they aren't there it's not cloud computing but rather a marketing strategy.

Continue Reading »

Seeing How The Other Side Lives, A Package Manager Overview For Go Developers

Debating and discussing Go package management has become a popular topic. Most people agree that the out of the box package management is insufficient. But, what should be used to complement the Go toolchain and what changes, if any, should the Go toolchain make?

Package management for programming languages is nothing new. It’s worth learning and discussing how package management is handled by other languages. This can fuel our discussions and decision making. I’ve personally been studying this as part of my work on Glide.

The following is a look at some features in other package managers. For this analysis I looked at Cargo (Rust), Composer (PHP), npm (Node.js), Bundler (Ruby), Nuget (.NET), CocoaPods (Swift & Objective-C Cocoa Apps), Pip (Python), and Maven (Java). These are 8 different package managers for some of the most popular languages and platforms.

Continue Reading »

Announcing Masterminds/vcs Package For Go

Working with varying version control systems (VCS) in Go can be difficult. For all commonalities between VCS there are notable differences. Because of the similarities it's possible to build an interface and common set of actions across different VCS.

The Go community has the golang.org/x/tools/go/vcs package that's used by go get to work with varying systems. When we tried to use the vcs package as part of Glide we ran into difficulty. The vcs package is designed to work with the package management functions built into go get. It's not a general package and it's not easy to extend it to add new functionality. In Glide we wanted to build features other than those in go get.

The best solution we found was to build a new vcs package that implements what we needed. It's designed to provide a common interface to different VCS systems. We've tried to keep the application business logic out of it. That can be left up to packages that use the vcs package.

Continue Reading »

Other Recent Posts: