Time-based releases are good for community

There was a bit of discussion lately on feature-based vs. time-based release schedules in OpenStack, and here are my thoughts on it. In a feature-based release cycle, you release when a given set of features is implemented, while in a time-based release cycle, you release at a predetermined date, with whatever is ready at the time.

Release early, release often

One the basic principles in open source (and agile) is to release early and release often. This allows fast iterations, which avoid the classic drawbacks of waterfall development. If you push that logic to the extreme, you can release at every commit: that is what continuous deployment is about. Continuous deployment is great for web services, where there is only one deployment of the software and it runs the latest version.

OpenStack projects actually provide builds (and packages) for every commit made to development trunk, but we don't call them releases. For software that has multiple deployers, having "releases" that combine a reasonable amount of new features and bugfixes is more appropriate. Hence the temptation of doing feature-based releases: release often, whenever the next significant feature is ready.

Frequent feature-based releases

The main argument of supporters of frequent feature-based releases is that time-based cycles are too long, so they delay the time it takes for a given feature to be available to the public. But time-based isn't about "a long time". It's about "a predetermined amount of time". You can make that "predetermined amount of time" as small as needed...

Supporters of feature-based releases say that time-based releases are good for distributions, since those have limited bearing on the release cycles of their individual subcomponents. I'd argue that time-based releases are always better, for anyone that wants to do open development in a community.

Time-based releases as a community enabler

If you work with a developer community rather than with a single-company development group, the project doesn't have full control over its developers, but just limited influence. Doing feature-based releases is therefore risky, since you have no idea how long it will take to have a given feature implemented. It's better to have frequent time-based releases (or milestones), that regularly delivers to a wider audience what happens to be implemented at a given, predetermined date.

If you work with an open source community rather than with a single-company product team, you want to help the different separate stakeholders to synchronize. Pre-announced release dates allow everyone (developers, testers, distributions, users, marketers, press...) to be on the same line, following the same cadence, responding to the same rhythm. It might be convenient for developers to release "whenever it makes sense", but the wider community benefits from having predictable release dates.

It's no wonder that most large open source development communities switched from feature-based releases to time-based releases: it's about the only way to "release early, release often" with a large community. And since we want the OpenStack community to be as open and as large as possible, we should definitely continue to do time-based releases, and to announce the schedule as early as we can.

A month in OpenStack Diablo: the diablo-1 milestone

Back at the OpenStack Design Summit in Santa Clara, we decided to switch from a 3-month cycle to a 6-month coordinated release cycle, with more frequent milestones delivery in the middle.

Lately we have been busy adapting the release processes to match the delivery of the first milestones. Swift 1.4.0 was released last Tuesday, and today sees the release of the diablo-1 milestone for Nova and Glance.

What should you expect from diablo-1, just 4 weeks after the design summit ? In this short timeframe lots of features have been worked on, and the developers managed to land quite a few of them in time for diablo-1.

Glance's API was improved to support filtering of /images and /images/detail results and limiting and paging of results. This made support of API versioning necessary. It also grew a new disk format ("iso") that should ultimately allow to boot ISOs directly in Nova.

On Nova's side, the most notable addition is support for snapshotting and cloning volumes with the EC2 API. The XenServer plugin now supports Open vSwitch, and pause and suspend capabilities have been added to the KVM hypervisor.

Now keep your seatbelt fastened, because diablo-2 is set to release on June 30th.

OpenStack Nova: Main themes for Diablo

A few weeks after the OpenStack Design Summit in Santa Clara, we are starting to get a better picture of what should be in the next version of OpenStack Nova, codenamed Diablo, scheduled for release on September 22.

One big priority of this release is to separate code for the network and volume services, and refactor nova-network code to add a clear internal API. This will allow to plug separate network and volume service providers, and pave the way for integration with future OpenStack projects like Quantum/Melange/Donabe and LunR. In preparation for this, we'll push changes to rely more on the queue (and less on the database) to pass information between components. In the same area, we need some more changes to support multiple NICs and should also provide a client OpenStack API for directly interacting with volumes.

A second theme of the Diablo release is the new distributed scheduler, which should be able to schedule across zones and taking capabilities into account. This will need changes in the way we reference instances, as well as some changes for EC2 API compatibility.

On the API side, we should finalize OpenStack API 1.1 support, including work on floating IPs and shared IP groups. For administrators, instance migration and account administration actions should be added. We'll also ensure good AWS API compatibility and validation.

Support for snapshotting, cloning and booting from volumes should land early in this cycle, as well as new ways of communicating configuration data between host and guest. We also need to integrate with AuthN/AuthZ with the new common Keystone authentication system. Lots of other features are planned (and others might be added before the end), you can check out the blueprints plan for more detail.

Last but not least, on the QA side, we should have continuous automated testing across a range of reference architectures and increase our unittest and smoketest coverage among other efforts to build-in quality.

The first milestone for this cycle, diablo-1, should be released on June 2nd.

OpenStack @ Ubuntu Developer Summit

Last week I attended the Ubuntu Developer Summit for Oneiric in Budapest. This was the first time I attended UDS as an upstream representative rather than as a Canonical employee. I very much enjoyed it: not being a track lead or a busy technical lead actually gives you desirable flexibility in your agenda :)

First of all, a quick comment on the big announcement of the week, which the Twittersphere is not done retweeting yet: "Ubuntu switching from Eucalyptus to OpenStack". I think it would be more accurate to say that Ubuntu chose to use OpenStack as its default cloud stack for future versions. Comparing Eucalyptus and OpenStack is like comparing apples to apple trees: OpenStack provides several cloud infrastructure pieces (of which only OpenStack Compute -Nova- covers the same space as Eucalyptus). I suspect the wide scope of the project played a role in OpenStack being selected as the default stack for the future. Eucalyptus and OpenStack Nova should both be present as deployment options from 11.10 on.

On the UDS format itself, I'd say that the "one blueprint = one hour" format does not scale that well. The numbers of hours in the week is fixed, so when the project grows you end up having too many sessions going on at the same time. Lots of blueprints do not require one hour of discussion, but rather a quick presentation of plan, feedback from interested parties and Q&A. That's what we do for our own Design Summits, but I'd admit it makes scheduling a bit more complex. On the good side, having the floor plan inside our UDS badges was a really good idea, especially with confusing room names :)

The Launchpad and bzr guys were very present during the week, attentive and reactive to the wishes of upstream projects. They have great improvements and features coming up, including finer-grained bugmail and dramatic speed improvements in bzr handling of large repos.

Last week also saw the rise of creampiesourcing: motivation of groups of developers over bets ("if the number of critical bugs for Launchpad goes to 0 by June 27, I'll take a creampiein the face"). Seems to work better than karma points.

Finally, Rackspace Hosting was co-sponsoring the "meet and greet" event on the Monday night, promoting OpenStack. I think offering cool T-shirts, like we did at the previous UDS in Orlando, was more efficient in spreading the word and making the project "visible" over time: in Budapest you could see a lot of people wearing the OpenStack T-shirts we offered back then !

Diablo Design Summit

Just a few days from now, lots of OpenStack community members from around the world will gather in (hopefully sunny) Santa Clara for the OpenStack Conference and Design Summit. As I explained here, those are two co-hosted events, and here are a few precisions on the Design Summit part.

The Design summit starts on Wednesday at 9am and ends on Friday at 5pm. Apart from the 25-minute opening plenary, we have three types of sessions: design discussions, unconference sessions and lightning talks.

Design sessions are the meat of the Design Summit. Those 25-minute or 55-minute sessions were selected from proposals coming from developers working on a feature for future releases of OpenStack. They are organized in 8 different tracks:

  • OpenStack infrastructure: discussions affecting all the projects
  • Nova APIs: discussions around the OpenStack and EC2 API in Nova
  • Nova volumes: discussions around volumes / block storage in Nova
  • Nova networking: discussions around networking in Nova and the proposed Network as a Service project
  • Nova core: other discussions on Nova
  • Glance: discussions on the Glance Image service project
  • Swift: discussions on the Swift Object Storage project
  • Other projects: discussions on OpenStack incubating projects

You can find a tentative schedule, organized by day or track, at the following URL: http://summit.openstack.org/ods-d/. You should expect it to change by next week though, as we tune it to ensure required people are present where they are needed. So refresh often !

The second type of sessions in unconference sessions. On the Thursday and the Friday, we'll have an openly-scheduled room available for all types of presentations or discussions. We'll have a big whiteboard with empty 30-minute slots: just mark your name and session title in your preferred time slot. We expect quite a few educational presentations, as well as discussions around peripheral projects to happen there. So watch that space !

Finally, from Wednesday to Friday, after lunch and before the design sessions restart, we'll have 25min of lightning talks. These will also be openly-scheduled, but in 5-minute increments. Anything loosely-connected to OpenStack is relevant, so step up and use your 5 minutes of glory :)

All the project technical leads and myself hope that this mix of sessions will allow us to make the most of those three days together. See you there !