Apache Felix OSGi Bundle Repository
Copyright 2008 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.

This product includes software developed at
The OSGi Alliance (http://www.osgi.org/).
Copyright 2006 The OSGi Alliance.
Licensed under the Apache License 2.0.

This product includes software from http://kxml.sourceforge.net.
Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany.
Licensed under BSD License.

II. Used Software

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

III. License Summary
- Apache License 2.0
- BSD License
