Howdy everyone! I want to drop a note about Project Athens. I’ll be writing more about the project in the future, but this is just a quick start.
A lot of us Gophers know that vgo (soon to be integrated into the go toolchain) is a thing now. There’s been tons of discussion and debate about it. There’s some tension right now too, but I’ll leave that for another post.
Whatever else is going on, we’re all working to make dependency and package management better for the Go community.
Project Athens is a big part of the improvements, but it’s young and I want to introduce it to folks.
go-bindata disappeared from Github and then reappeared under someone else’s account? Or what about when Google Code shut down? Every time this stuff happens, our builds break and we have to hunt down replacements for the dependencies that disappeared. There are some other similar but subtler problems like those too.
Athens solves them by storing and serving packages outside of Github. In other words, in a world with Athens, Github is only a development platform, and Athens holds dependencies. Some folks call it a “CDN” for Go packages.
In our world now, Github is both the dev platform and the CDN. This split that Athens provides is really important.
When your dependencies change on you, you’re gonna have a bad time. If stuff changes you have to check out what happened and probably change your code to get it compiling again. It’s a really bad situation if stuff goes away. And it’s really, really bad if stuff changes and you don’t realize it.
So far the best way to prevent all that from happening is to check in your vendor directory. That’s a really imperfect solution and has its own problems. But those aside, we’re all smart and we can do better!
But code disappears and code changes. That’s open source. It happens and it’s gonna keep happening, and we need to embrace and enable it.
So we need to stop pulling our dependencies from the same place that code is changing like crazy — Github.
The big goal of Athens is to provide that new place where dependencies — not code — live. Dependencies are immutable blobs of code and associated metadata that come from Github. They live in storage that Athens controls.
You probably already know what “immutable” means, but let me just point it out again because it’s really important for this whole system. When folks change their packages, iterate, experiment, or whatever else, code on Athens won’t change. If the package author releases a new version, Athens will pull that down and it’ll show up.
So if you depend on package
v1.2.3, it will never change on Athens. If the author releases
v1.2.4, you can upgrade and Athens will have it for you.it’ll show up in Athens.
That big “immutable” guarantee makes your life easier.
More to Come
There’s a ton more detail on what’s going on with Athens, how it fits into the Go toolchain, and other stuff. This was just a quick primer and I’ll be writing plenty more detail and what’s going on with the project, so look out for those posts!
On to the most important part…
There’s a community growing around the project, there’s a lot to do, and we would absolutely love for you to get involved.
The contribution process is familiar and easy. If you’ve used Github before, you’re good. No long documents to read or complex setup. And most importantly, I tell awesome puns every once in a while so you should totally hang out with us for those.
So that’s the sales pitch 😃. Here’s how to join us:
- Come talk to us in the
#athenschannel in the Gophers slack. We’re a really friendly group, so come say hi and join us! Ping me (@arschles on slack) in the channel and I’ll give you the lowdown
- Come to our weekly development meetings! They are a great way to meet folks, ask questions, find some stuff to work on, or just hang out if you want to
- Read docs to get acquainted with internals of the system
- Check out our issue queue
That’s all for now. I hope I see you in the project, but until then, keep on rockin!