Software is alive. By that, I am not referring to the part where it can occasionally vex you in how it gets into a certain state. That is probably explainable by a bug somewhere.

By alive I am referring to the fact that well loved, well used software is constantly growing and changing in response to stimulus. As the environment changes, it changes. As the objectives change, it expands. Anything that doesn’t stay true to this gains a new, unwanted moniker in our world of software: legacy.

Extending the metaphor, are we talking about flora or fauna? Definitely flora.

Plants adapt as the seasons change, as their environment changes, to take advantage of the nearby fauna and so on. In fact, the survivors even respond to insects attacking (bugs!).

Growing for New Features

First, let me mention briefly that what I am talking about here is “SDK 3” with relevant quotes. In practice, rather than try to artificially tie all of the Couchbase Server SDKs to a common version number, they do follow the de-facto Semantic Versioning standard. Thus, when we update for a particular platform’s feature, we update the dot-minor version and when we introduce a new platform, it starts at 1.0.

So what does “SDK 3” mean then? It’s the name we give to a common feature set, respecting platform idioms, to the SDKs that are bringing in major new features and updating interfaces to the latest for the platform.  This is not an easy task!

Metaphorically, call it a plant with a mutation over the previous generation that will allow it to flourish in this newer environment.

What has changed in the environment that leads to this need to mutate?

When we released the first Node.JS SDK, promises libraries were not a thing and the move to async-await certainly had not started. There are some changes we can make in the signature to make this SDK easier to use. With Java, Couchbase has been a leader in adopting a reactive programming model. We were early to RxJava, and the microclimate around us is more conducive to Reactive Streams and Project Reactor. For .NET, we were quick to port to .NET Core and also added newer async-await, though a bit of pruning and reorganization will give us a more attractive plant.

The list does indeed go on: Python 3, Scala becoming more popular, PHP with a major release, and so on.

Growth of the Canopy

The growth here in “SDK 3” doesn’t apply solely to the SDK flora. In the coming weeks, there will be some growth in Couchbase Server feature areas too. While I don’t want to pre-announce the many features you’ll see there, one thing you will see is support for a preview feature of collections. We’ve done this in such a way to ensure compatibility with older releases, so you can still use one of this new crop alongside your, ahem, mature growth.

Check back with the Couchbase blog soon for details on those new shoots…

Trimming for Efficiency

Just like one may do some fruit thinning to get to juicier crop of the remainder, we have removed a few of the less likely to produce buds. Here, that means going forward we’re not going to support older versions of PHP 5, moving forward with only Python 3 support and removing some older Linux platforms. For Java, this means Java 8 and forward only. See the docs for details on compatibility and feedback is gladly accepted on things you’d like to see.

Unwanted Pests

With many, many… many maintenance releases, we did not have a lot of bugs to squash going into the next major release, but there were a few that we could not fix without breaking the API. One favorite is SDK Java’s year 2038 bug. Be forewarned now, if you’re on Couchbase Java SDK 2.x, as we approach 19 January 2038, your app could probably break as it can’t express TTLs with sufficient life.

There are other areas that are a little more subtle. Not having circuit breakers directly in some SDKs meant app developers had to handle this at a higher level. We are now adding this where appropriate, though it may not be in all of the alpha releases quite yet.

Let a Million Flowers Bloom

Let me invite you to check out specific blogs for some of the alpha releases and give us feedback. The Couchbase forums are the best area to route feedback through, though we always appreciate issues filed too and we’ll be glad to collaborate on pull requests.

Jeff Morris has a blog on the .NET Alpha, talking a bit more about versioning and scopes/collections. Michael Nitschinger follows up with Cross SDK API details in his blog on the Java 3.0 Alpha. Brett Lawson talks about how this applies to Node.JS developers with promises and ECMAScript6. Charles Dixon takes off from there with Go SDK 2.0 alpha (an intentional off-by-one-bug). And with inaugural blogs, Ellis Breen shows a photocells included Python 3.0 alpha while Graham Pople introduces the exciting new Scala SDK alpha 1.0 (which includes two off by one bugs!).

In addition to all of those, there are alphas of PHP and libcouchbase in the usual places, PECL and the download links and so on.


Photo original source courtesy Wikipedia images.

Posted by Matt Ingenthron, Senior Director, SDK Engineering, Couchbase

Matt Ingenthron is the Senior Director in Engineering at Couchbase where he focuses on the developer interface across SDKs, connectors and other projects. He has been a contributor to the memcached project, one of the maintainers of the Java spymemcached client, and a core developer on Couchbase.

Leave a reply