Title: Apache Board report for Apache Aries, January 2018
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.

# 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