Just trying to make sense of things...

Library Stability and Semantic Versioning

Wednesday, 1 June 2011 08:54 by jordan.terrell

One of the challenges of incubating a new open source software project is figuring out when to make it public.  If you look back at previous posts, you’ll see that I struggled with that a bit.  It took well over a year after first talking about my Commons library to even make the source available.  With the availability of NuGet, it has made it supremely easy to publish bits to the world.  Almost too easy.

So, I’ve been giving some thought to how I want to manage releases of the Commons library.  As with most fledgling open source projects, the first steps are unstable and unpredictable.  This is often indicated by a “0.x.x” version number, stating that this project is not stable.  This is the case with the Commons library.  That said, it is “fairly” stable.  Much of the code contained in the library has been there in its current form for some time.  The areas that have some measure of flux is the implementation of Maybe<T> and Exodata.

Maybe<T> has in the last few days gone through some breaking changes, primarily because of feedback from Brian Beckman himself.  It’s been an absolute thrill to grab his attention and collaborate on this implementation.  After writing such a lengthy post, I had hoped that Maybe<T> would stay mostly static, with little teaks and bug fixes, but Brian suggested some changes that have dramatically improved the implementation of Maybe<T>.  I anticipate that there will be some more changes in this area as I continue to collaborate with him.  I will be putting a post together in the near future outlining these changes and details of the process we went through to get there.  That said, the code is available if you’d like to inspect the changes to date, and I will probably be releasing a NuGet package soon to reflect these changes.

Exodata has been static for a little while, but I’ve got some ideas to experiment with before I slap a v1.0 label on the bits.  I haven’t yet blogged about what Exodata is or how to use it, so as expected there hasn’t been feedback driving change in this area.  Expect this to change – I’m already putting a post together to talk about Exodata.

Library stability, or rather instability, can often scare people away from using open source bits when they are in their infancy.  I will do my best to communicate breaking changes when they are coming during the pre-v1.0 time period.  However, once I hit the v1.0 mark, the rules of Semantic Versioning will be adhered to.  In fact, they are being adhered to now, seeing that it allows for breaking changes prior to 1.0.

I want this library to be something immensely useful for developers who appreciate a functional approach to developing software.  I too am a consumer of this library and will expect stability from it in the future.  I will hold the Commons library to the same standards as we would expect from any other library.

Comments are closed