Apache Felix Descriptor Generator Implementation
Copyright 2010-2011 The Apache Software Foundation


I. Included Software

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
Licensed under the Apache License 2.0.


II. Used Software

This product uses software developed at
The Apache Software Foundation (http://www.apache.org/).
Licensed under the Apache License 2.0.

This product uses software developed at
The OSGi Alliance (http://www.osgi.org/).
Copyright (c) OSGi Alliance (2000, 2009).
Licensed under the Apache License 2.0. 

This product uses software developed at http://asm.objectweb.org
Copyright (c) 2000-2005 INRIA, France Telecom
Licensed under the BSD License.

This product uses software developed at
The Codehaus (http://www.codehaus.org)
Licensed under the Apache License 2.0.

This product uses software developed at
slf4j (http://www.sl4j.org)
Licensed under the MIT License.


III. License Summary
- Apache License 2.0
- BSD License
- MIT License