= 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
