Title: The Apache(tm) XML Graphics Project - Legal Stuff

#The Apache&trade; XML Graphics Project - Legal Stuff

<notice></notice><abstract></abstract>

## Legal Stuff { #Legal}

* [Home](/)
* [Who We Are](/team.html)
* [Legal Stuff](legal.html)
* [Project Charter](charter.html)
* [Mailing Lists](mail.html)
* [Code Repositories](repo.html)

All software and material on this website is licensed under the [Apache License V2.0](https://www.apache.org/licenses/LICENSE-2.0).

For more details, please see the [licenses page of The Apache Software Foundation](https://www.apache.org/licenses/).

## Trademarks { #Trademarks}

Apache, Apache XML Graphics, the Apache feather logo, and the Apache XML Graphics logos are trademarks of The Apache Software Foundation.

IBM is a trademark of International Business Systems, Inc. Lotus is a trademark of Lotus Development Corporation. Sun and Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. UNIX is a registered trademark in the United States and other countries, exclusively licensed through X/Open Company, Ltd. Windows, WindowsNT, and Win32 are registered trademarks of Microsoft Corp. Mac OS X and Macintosh are registered trademarks of Apple Computer, Inc.

All other marks mentioned may be trademarks or registered trademarks of their respective owners.
