Title: Public Records

license: https://www.apache.org/licenses/LICENSE-2.0

# {{title}}

The Apache Software Foundation, a Delaware chartered 501C3 membership 
corporation, publishes a wide variety of operational records 
about the corporate operations of the Foundation, as well as 
an [overview of corporate governance procedures](/foundation/governance/).

The Board of Directors publishes a **[formal Board Calendar and Minutes](../board/calendar.html)** 
of our monthly meetings.  An alternate [categorized listing of 
all past Board minutes](https://whimsy.apache.org/board/minutes/) is also available.

## Bylaws And Original Incorporation Records  {#bylaws}

- The [Certificate of Incorporation](certificate.html) for The Apache
Software Foundation

- The [Certificate for Renewal](certificate.html) for The Apache Software
Foundation

- The [Incorporator's Written Consent](incorporator.html) for The Apache
Software Foundation

- The [Bylaws](../bylaws.html) of The Apache Software Foundation

## US Internal Revenue Service Filings and Notices  {#irs}

- IRS Form 8718 - [User Fee for Exempt Organization Determination Letter
Request](ASF-8718.pdf) for The Apache Software Foundation

- IRS Form 1023 - [Application for Recognition of Exemption](ASF-1023.pdf)
for The Apache Software Foundation

-  [Amendments to IRS 1023 Application](ASF-1023-Amendments.pdf) for The
Apache Software Foundation

-  [Definitive Ruling by Internal Revenue Service of 501(c)3
status](ASF-501c3.pdf) for The Apache Software Foundation

The Apache Software Foundation (ASF) filed the below annual Form 990 tax 
returns with the IRS. 

-  [Fiscal Year 2016-2017 Annual Report](990-2016.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2015-2016 Annual Report](990-2015.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2014-2015 Annual Report](990-2014.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2013-2014 Annual Report](990-2013.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2012-2013 Annual Report](990-2012.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2011-2012 Annual Report](990-2011.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2010-2011 Annual Report](990-2010.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2009-2010 Annual Report](990-2009.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2008-2009 Annual Report](990-2008.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2007-2008 Annual Report](990-2007.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2006-2007 Annual Report](990-2006.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2005-2006 Annual Report](990-2005.pdf) for The Apache
Software Foundation

-  For the fiscal years ended in 2004 and 2005, we 
were not required to file an annual return with the IRS because our annual 
gross receipts were less than $25,000.

-  [Fiscal Year 2002-2003 Annual Report](990-2002.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2001-2002 Annual Report](990-2001.pdf) for The Apache
Software Foundation

## Delaware Secretary of State Filings and Notices  {#delaware}

-  [Fiscal Year 2010-2011 Delaware Annual Report](Delaware_e-filing_2011.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2009-2010 Delaware Annual Report](Delaware_e-filing_2010.pdf) for The Apache
Software Foundation


## Other Organizational Records  {#other}

- Records and policies of the [Legal Affairs committee](../../legal/) including licensing information.

- Information about the ASF's [position on the JCP](../../jcp/) (Note: the ASF does not formally participate in the JCP).

- Information on [Export Classifications](../../licenses/exports/) and ECCNs of
Apache products related to cryptography.

- The [Official Foundation blog](http://blogs.apache.org/foundation/) with
press releases and other important news.

- The record of and license for [IBM](http://ibm.com/)'s donation of the
XML4J, XML4C, XML4P, and LotusXSL software packages (in
[PDF](IBM-XML-Licence-Grant.pdf) and [TIFF](IBM-XML-Licence-Grant.tif)
formats)

## Project-Related and Technical Records

Apache projects perform all of their technical work using open, publicly
archived mailing lists. Please review our [overall mailing list information
page](../mailinglists.html).  We have an [overview of all Apache projects](https://projects.apache.org/).
