Title:
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 2015 Report from the Apache Aries committee [Jeremy Hughes]

## Description: 
   OSGi Enterprise Programming Model 
   
## Issues: 

There are no issues requiring board attention at this time
   
## Activity: 

Rising activity on mailing lists. At the moment very few active committers.
Main development areas are subsystems, transaction and jpa.
   
## Health report: 


   
## PMC changes: 
   
 - Currently 38 PMC members. 
 - No new PMC members added in the last 3 months 
 - Last PMC addition was Jean-Baptiste Onofre at Fri Apr 10 2015 
   
## LDAP changes: 
   
 - Currently 48 committers and 38 committee group members. 
 - No new committee group members added in the last 3 months 
 - Last committee group addition was Jean-Baptiste Onofre at Sat Apr 11 2015 
 - No new committers added in the last 3 months 
 - Last committer addition was Giuseppe Gerla at Wed May 27 2015 
   
## Releases: 
   
 - Versioning 0.3.1 2015-07-16
 - Blueprint Core 1.4.4 2015-07-16
 - Blueprint CM 1.0.7 2015-07-16
 - subsystem-bundle:2.0.4 2015-10-07
 - subsystem-api:2.0.4 2015-10-07
 - subsystem-core:2.0.4 2015-10-07
 - subsystem-obr:1.0.4 2015-10-07
 - transaction blueprint 1.1.1 2015-08-11
 - JPA 2.2.0 2015-09-26
 - transaction blueprint 2.0.0 2015-09-25
 - blueprint-maven-plugin 1.2.0 2015-09-25
 - Subsystem Gogo Command 1.0.0 2015-10-05
 - transaction manager 1.3.0 2015-08-10
 - JPA 2.1.0 2015-08-10
 - Aries Asynchronous OSGi Services 1.0.1 2015-08-10
 - Aries Util 1.1.1 2015-08-10
 - JMX 1.1.5 2015-08-30
   
## Mailing list activity: 
   
 - dev@aries.apache.org:  
    - 136 subscribers (up 5 in the last 3 months): 
    - 833 emails sent to list (394 in previous quarter) 
   
 - user@aries.apache.org:  
    - 232 subscribers (down -1 in the last 3 months): 
    - 106 emails sent to list (11 in previous quarter) 
   
   
## JIRA activity: 
   
 - 79 JIRA tickets created in the last 3 months 
 - 90 JIRA tickets closed/resolved in the last 3 months 
   
