= January 2018 Board report

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

== Issues:

* None to report this quarter.

== Activity:

* As a community we made 10 releases this quarter.
* After some discussion, the tx-control module is being moved into gitbox.apache.org.

== Health report:

* the net number of JIRA tickets has crept up slightly this month, but generally under control.

== PMC changes:

* Currently 38 PMC members.
* No new PMC members added in the last 3 months
* Last PMC addition was Dominik Przybysz on Tue May 30 2017

== Committer base changes:

* Currently 55 committers.
* No new committers added in the last 3 months
* Last committer addition was Tom De Wolf at Wed May 03 2017

== Releases:

* Aries Blueprint Core (blueprint-core) 1.8.3 on 2017-10-19
* Aries SPI Fly (spi-fly) 1.0.10 on 2017-11-28
* Aries JMX Core (jmx-core) 1.1.8 on 2018-01-09
* Aries JMX Core via Whiteboards (jmx-core-whiteboard) 1.1.6 on 2018-01-09
* Aries JMX Blueprint API (jmx-blueprint-api) 1.2.0 on 2018-01-09
* Aries JMX Blueprint Core (jmx-blueprint-core) 1.2.0 on 2018-01-09
* Aries Whiteboard support for JMX DynamicMBean services (jmx-whiteboard) 1.2.0 on 2018-01-09

== JIRA activity:

* 20 JIRA tickets created in the last 3 months
* 7 JIRA tickets closed/resolved in the last 3 months
