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.

# October 2011 Board report
Apache Aries delivers a set of pluggable Java components enabling an enterprise OSGi application programming model.

A new module called versionsing has been created for a utility to byte code analyse latest binaries with the last release of those binaries to find changes that should cause an OSGi Export-Package version attribute change, according to the OSGi Semantic Versioning whitepaper.

It looks as though Apache Aries JMX will become the reference implementation of the update to the OSGi JMX spec for which an early draft was released by the OSGi Alliance in September.

##Releases

Bug fix releases:

* Apache Aries Application 0.2.2
* Apache Aries Util 0.2.1

We have been putting together a functional release from trunk but it's taking longer than we'd hoped. Due to our objective of getting the OSGi versioning correct, we're having to release more modules and correct more OSGi version ranges than we had hoped. A fully staged release of Apache Aries Blueprint and its dependencies is imminent.

##Project Branding Board Report Checklist 

A little progress here. Unfortunately there's been little progress here.

* Project Website Basics : homepage is aries.apache.org (done)
* Project Naming And Descriptions : use proper Apache forms, describe product, etc. (pending)
* Website Navigation Links : navbar links included, link to www.apache.org included (pending - feather link done)
* Trademark Attributions : attribution for all ASF marks included in footers, etc. (pending)
* Logos and Graphics : include TM, use consistent product logo on your site (pending)
* Project Metadata : DOAP file checkedin and up to date (done)

##Community update

No new committers since the last report.

There are no board level issues.