
Apache OpenOffice (https://www.openoffice.org)
Copyright 2011-2021 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).

____


Portions of this software copyright (c) 2000-2011, Oracle and/or its affiliates <https://www.oracle.com/>.

Portions of this software (C) Copyright IBM Corporation 2003, 2012. All Rights Reserved.

____

As part of the base system this product also includes code from the following
Apache projects:
- Apache Lucene
- Apache Portable Runtime
- Apache Portable Runtime Utility Library
- Apache Commons - used by MediaWiki Publisher extension
- Apache Jakarta HttpClient - used by MediaWiki Publisher extension
- Apache Tomcat - used by MediaWiki Publisher extension

The notices from these projects are following:

Apache Lucene
Copyright 2006 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

The snowball stemmers in
 contrib/snowball/src/java/net/sf/snowball
were developed by Martin Porter and Richard Boulton.
The full snowball package is available from
 http://snowball.tartarus.org/


Apache Portable Runtime
Copyright (c) 2011 The Apache Software Foundation.

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

Portions of this software were developed at the National Center
for Supercomputing Applications (NCSA) at the University of
Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security
Inc. MD5 Message-Digest Algorithm.

This software contains code derived from UNIX V7, Copyright(C)
Caldera International Inc.


Apache Portable Runtime Utility Library
Copyright (c) 2011 The Apache Software Foundation.

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

Portions of this software were developed at the National Center
for Supercomputing Applications (NCSA) at the University of
Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security
Inc. MD5 Message-Digest Algorithm, including various
modifications by Spyglass Inc., Carnegie Mellon University, and
Bell Communications Research, Inc (Bellcore).


Apache Commons Codec
Copyright 2002-2012 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java contains
test data from http://aspell.sourceforge.net/test/batch0.tab.

Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org). Verbatim copying
and distribution of this entire article is permitted in any medium,
provided this notice is preserved.

Apache Jakarta HttpClient
Copyright 1999-2007 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

Apache Commons Lang
Copyright 2001-2012 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

This product includes software from the Spring Framework,
under the Apache License 2.0 (see: StringUtils.containsWhitespace())


Apache Commons Logging
Copyright 2003-2007 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).


Apache Tomcat
Copyright 1999-2012 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).

Java Management Extensions (JMX) support is provided by
the MX4J package, which is open source software. The
original software and related information is available
at http://mx4j.sourceforge.net/.

The Windows Installer is built with the Nullsoft
Scriptable Install System (NSIS), which is
open source software. The original software and
related information is available at
http://nsis.sourceforge.net/.

Java compilation software for JSP pages is provided by Eclipse,
which is open source software. The original software and
related information is available at
https://www.eclipse.org/.

____

As part of the base system this product also includes code from the following
projects which are licensed under the Apache license:
- serf
- redland
- StAX

The notices from these projects are following:

serf
This product includes software developed by
The Apache Software Foundation (https://www.apache.org/).


redland
This product includes Redland software (http://librdf.org/)
developed at the Institute for Learning and Research Technology,
University of Bristol, UK (http://www.bristol.ac.uk/).


StAX
[no notices]

____

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (https://www.openssl.org/)

$HeadURL$
