:doctype: book

Title:     Board Report Notice:    Licensed to the Apache Software Foundation (ASF) under one            or more contributor license agreements.
See the NOTICE file            distributed with this work for additional information            regarding copyright ownership.
The ASF licenses this file            to you under the Apache License, Version 2.0 (the            "License");
you may not use this file except in compliance            with the License.
You may obtain a copy of the License at            .              http://www.apache.org/licenses/LICENSE-2.0            .            Unless required by applicable law or agreed to in writing,            software distributed under the License is distributed on an            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY            KIND, either express or implied.
See the License for the            specific language governing permissions and limitations            under the License.

= March 2011 Board report

Aries delivers a set of pluggable Java components enabling an enterprise OSGi application programming model.

== New releases

These bug fix releases have been completed since the last board report:

* Aries Application 0.2.1
* Aries Blueprint 0.2.1
* Aries Blueprint 0.3.1

== Release by bundle

After some significant investigation and discussion, we recently concluded a vote to switch to a release-by-bundle scheme.
This is to enable us to follow the guidance set out in the OSGi Alliance Semantic Versioning white paper.

== Community update

Largely unchanged since last month dev@ 117 subscribers, user@ 129 subscribers.
The dev@ list continues to be active with less traffic on the user@ list.
No new committers or PMC members.

There are no board level issues.
