Resumo do Servidor Apache

29
  Trabalho de Hipermídia Servidor Apache  Ivanir Rogério Stern nº USP 5875617  Jonatas Correia Araujo nº USP 5620216 Leandro Martins Pedrosa Volpini nº USP 5874561 Roberto Lopes de Carvalho nº USP 5875318  Rodrigo de Oliveira Barbosa nº USP 5874512 1

description

Apresentação resumo sobre o servidor Web apache para a disciplina de Hipermídia.

Transcript of Resumo do Servidor Apache

5875617
5620216
1
2009
Resumo
  O Apache é o servidor web (webserver) mais popular da Internet
(netcraft.com), sua grande utilização concentra-se, principalmente em prover
acesso por meio do protocolo HTTP (Protocolo de Transferência de
Hipertexto) além do suporte ao protocolo HTTPS. Diferente da maioria dos
softwares
livres, o Apache não utiliza licença GPL (General Public License), mas sim
uma licença própria. Sendo mantido pela Fundação Apache, a sua
popularidade também se deve ao fato de ser distribuído juntamente com a
maior parte das distribuições
PHP, Perl, Ruby, Java e módulos já agregados, possibilitam sua
customização e criação de novos módulos utilizando-se APIs específicas.
Seu código fonte, por ser aberto, pode ser alterado livremente e sua
utilização é gratuita.
Web.................................................................. 4
Apache.............................................. 10
Linux..................................................................... 14
Linux................................................................... 15
Capítulo 4
API: Application Programming Interface. Interface de programa da aplicação.
Browser:
DNS:
GPL: General Public License. Licença pública tradicional no movimento de software livre.
HTML: Hyper Text Markup Language. Linguagem de marcação de hipertexto.
HTTP: Hyper Text Transfer Protocol. Protocolo de transferência de hipertexto.
HTTPS: Hyper Text Transfer Protocol Secure. Protocolo seguro de transferência de hipertexto.
IIS:
NCSA:
URL:
5
1.1.1 – O que é um servidor Web
Um servidor Web é o responsável pelo controle e distribuição de
páginas na internet. Sua função básica, consiste em aguardar requisições de
páginas de um clientes (browser) e retornar dados ao mesmo, normalmente
páginas HTML. Ao receber os dados enviados pelo servidor o browser
apresenta os mesmo ao usuário que fez a requisição. Em conceito, os
servidores são muito simples, fazendo a função básica de responder á
requisições.
O processo de comunicação entre cliente-servidor é feito através de
protocolos de hipertextos – http (Hyper Text Transfer Protocol) – que
padroniza o modo de envio e recebimento dos dados e que possui como
característica principal sua total independência quanto a plataforma utilizada,
podendo estabelecer comunicação, por exemplo, entre um servidor Linux e
um cliente Windows ou mesmo Macintosh.
As informações que trafegam pela Internet, utilizam em sua grande
maioria a linguagem HTML (Hyper Text Markup Language), que é a base
principal de um ambiente Web, oferecendo uma grande gama de
informações ou dados, disponíveis para toda a rede.
Existem atualmente no mercado mais de 500 servidores Web,
disponíveis nas mais variadas plataformas e que vão desde de distribuição
gratuita até valores que chegam a milhares de dólares. As principais
características que devem ser observadas em um servidor Web são as
seguintes:
• Processo de instalação.
• Facilidades de customização.
• Suporte técnico.
Os servidores Web são os responsáveis por armazenar e trocar
informações
com outros equipamentos e baseado nisso, pelo menos dois participantes
estão diretamente envolvidos em cada troca de informações: Um cliente, que
faz a solicitação (requisição) e um servidor que atende (ou não) esse pedido.
Ambos os lados exigem um programa especializado para “negociar” essa
troca de dados.
  O cliente necessita de um browser para isso, como por exemplo o
Mozilla Firefox ou o Internet Explorer. Do lado do servidor, porém, as coisas
não são simples assim. Existe uma gama enorme de softwares disponíveis
para atender esse lado, mas todos tem uma função semelhante que é
negociar a transferência de dados entre clientes e servidores por meio de
HTTP. O software depende do sistema operacional que esta instalado no
servidor. Por exemplo, o IIS da Microsoft é bastante popular quando a
plataforma é Windows, já para quem utiliza Linux, a escolha normalmente é
o Apache.
Uma comunicação em termos gerais e bastante simples entre um
cliente e um servidor Web pode ser descrito da seguinte forma:
• O browser do cliente separa a URL em várias partes
separadas, tais como o nome do domínio, nome da página e o
protocolo. Como exemplo para a URL
http://www.each.usp.br/morandini-hipermidia/xxx.asp  , o nome
do domínio é www.each.usp.br , o nome da página é morandini-
hipermidia, o arquivo solicitado é xxx.asp e o protocolo http.
• Um Servidor de Nome de Domínio (DNS), traduz o nome do
domínio informado, para seu endereço IP, que é o endereço
real do site na Internet. A utilização do nome do domínio é
apenas uma facilidade introduzida na Internet para facilitar a
memorização dos endereços dos sites, já que é mais fácil
lembrar do nome do domínio do que seu endereço IP, porém é
um processo que não obrigatoriamente precisa ser usado,
7
(transferência de hipertextos).
• O servidor passa então a tratar os arquivos solicitados que no
caso do exemplo acima é “xxx.asp” e responde ao cliente.
• O browser recebe então os dados de resposta do servidor na
linguagem HTML, interpreta as instruções contidas e mostra o
resultado ao usuário.
outras
tarefas. Levando-se em conta que um browser simplesmente traduz e exibe
os dados a ele fornecidos, cabe ao servidor Web, tratar uma série de outras
situações. Dentre as outras atribuições de um servidor Web, pode-se
destacar:
• Definir o código apropriado para qualquer tipo de erro interno se
o mesmo ocorrer.
• Distinguir os vários tipos de elementos de uma página Web
(.GIFs, JPEGs, etc) para que o browser saiba que arquivo usar
na hora de formatar a página no cliente.
• Pode ainda tratar de tarefas adicionais como estatísticas,
segurança e criptografia, servir imagens para outros sites,
gerenciar conteúdo dinâmico ou funções de e-commerce.
Abaixo uma pequena lista de servidores Web conhecidos:
•  – Apache HTTP Server
•  – Covalent Enterprise Ready Server, baseado no Apache HTTP
Server
•  – Fnord
8
Windows XP
•  – Roxen
•  – Sun Java System Web Server da Sun Microsystems, antigo Sun
ONE
Server.
1.1.2 – O servidor Apache
O servidor Apache é um dos mais de 500 servidores Web disponíveis
no mercado atualmente. Está disponível para as plataformas Windows, Unix
Like, Solaris, Sun e praticamente todas as distribuições Linux e em sua
distribuição 1.3 existe suporte para uso em mainframes que utilizem EBCDIC
como conjunto de caracteres. Por ser um software de distribuição livre e
gratuita, o Apache é atualmente o servidor mais utilizado na Internet e
algumas das características que fazem dele um servidor bastante conhecido
são:
• Implementado através de módulos
A Internet como ferramenta para usuários finais, é praticamente uma
caixa preta, pois para quem a utiliza, o universo de visão restringe-se
basicamente ao browser utilizado.
Conhecer mais detalhadamente seu funcionamento e o que existe por
traz disso tudo é algo extremamente cativante e uma das formas de se ter
uma visão mais abrangente desse universo é conhecer um dos principais
conceitos que regem a rede, o conceito cliente-servidor. Tomar
conhecimento do que é exatamente um servidor Web, para que serve e sua
principais características, constitui-se na principal motivação desse trabalho.
 
O objetivo principal consiste em ampliar o conhecimento sobre o
funcionamento da Internet, através de um estudo básico da literatura
existente sobre os conceitos de cliente-servidor, com ênfase nos servidores
Web e especificamente sobre o servidor Apache.
1.3.2 – Objetivos específicos:
principalmente sobre o servidor Apache.
• Apresentar uma visão básica do conceito cliente-servidor e o seu
fuincionamento.
10
cliente-servidor que é um dos alicerces da Internet.
• Mostrar de forma clara a função de um servidor Web.
• Mostrar algumas opções de servidores Web existentes no mercado
atualmente.
1.4 – Metodologia: A metodologia a ser seguida consiste basicamente em:
• Levantamento bibliográfico do tema proposto com o material
disponível sobre o mesmo.
• Estudo mais detalhado sobre o servidor Web Apache.
• Redação do relatório final.
2.1.1 – Um pouco de história sobre o Apache
O servidor Apache (ou Apache Server), surgiu no National Center of
Supercomputing Applications (NCSA) através do trabalho de Rob McCool
(ALECRIM, 2006). Quando McCool saiu da NCSA, parou de trabalhar no
software, que recebia nesse época justamente a denominação NCSA e
então outras pessoas passaram a adaptar o serbidor Web para suas
necessidades. No entanto, foram Brian Behlendorf e Cliff Skolnick os
principais responsáveis pela retomada do projeto, contando em seguida com
o apoio de Brandon Long e Beth Frank, sendo que os dois últimos tinham
12
 
como objetivo continuar a desenvolver o servidor, mas para a NCSA. Isso
deu origem ao grupo Apache ou Apache Group que contava com 8
desenvolvedores no total.
Esse processo teve inicio em 1995 e o objetivo desse grupo foi
consolidar uma série de patches – remendos – que haviam sido feitos para o
HTTP daemon da NCSA. Essa série de patches passou a ser controlada
através de uma lista de discussões entre os 8 desenvolvedores envolvidos
no grupo e em 1996, o Apache já era o servidor HTTP mais popular da
Internet.
 Em 1999 foi fundada a Apache Software Foundation, que é uma
organização sem fins lucrativos que dá suporte a uma grande gama de
projetos open source, além é claro do próprio Apache HTTP Server.
Aparentemente, o nome da fundação parece ter sido baseado na
característica do uso de patches, já que pode ser interpretado como um
trocadilho com a expressão em inglês “a patchy”. No entanto os
desenvolvedores garantem que o nome foi baseado em uma tribo indígena
americana. Nos dias atuais a fundação é mantida principalmente por
doações e pelo apoio de grandes corporações, como IBM e Sun. As
atividades da Apache Foundation podem ser conhecidas através de seu site
oficial: www.apache.org
A primeira versão oficial do Apache foi 0.6.2, lançada em 1995 e a
última versão que se teve informação até a escrita desse trabalho foi a
2.2.3/2.2.4. Desde a primeira versão do Apache até os dias atuais houve
muitas mudanças no projeto, mas talvez a mais importante delas tenha sido
o Shambhala, uma arquitetura desenvolvida para o Apache por, Robert
Thau, que tinha como principal característica um melhor gerenciamento de
memória e que gerou a versão 0.8.8. Essa versão possuía, além do
Shambhala, alguns recursos da versão 0.7.x. Após uma série de
aperfeiçoamentos, testes e de uma nova documentação feita por David
Robinson, foi lançado em dezembro de 1995 a versão 1.0.
Em agosto de 2009 o site netcraft.com em sua pesquisa mensalx
consultou 225.950.957 de hospedeiros ao redor do mundo e apontou o
Apache como sendo o servidor Web mais utilizado no mundo, com 54,32%
13
 
dos sites ativos, sendo que entre o milhão de sites mais acessados, o
Apache serve 66% deles.
2.1.2 – Características do Apache
O Apache Server é um software livre, o que significa dizer que pode
ser estudado ou alterado o seu código-fonte por qualquer pessoa, além de
ser possível utilizá-lo gratuitamente. Graças a essa característica, o Apache
foi e continua sendo melhorado ao longo dos anos, graças ao esforço de
vários desenvolvedores ao redor do mundo, o que faz com que seja o
servidor Web mais utilizado no mundo.
Alem de estar disponível para o Linux e todos os outros sistemas
operacionais baseados no Unix, possui também versões para outras
plataformas, como o Windows e OS/2.
Graças a sua estrutura modular que foi planejada desde sua forma
mais básica, o Apache permite facilmente que sejam acrescentados módulos
que ampliam suas funcionalidades básicas como servidor Web. Mesmo sua
estrutura de Multi-Processing Modules (MPMs), permite selecionar o MPM
adequado para a plataforma na qual está instalado, tirando o máximo
proveito dos recursos do sistema operacional.
O Apache pode executar códigos em PHP, CGI-BIN, Python, Perl.
Shell Script ou mesmo em ASP e pode ainda atuar como servidor FTP,
HTTP e HTTPS, entre outros. Sua forma mais conhecida de utilização é a
que combina o Apache com a linguagem PHP e o banco de dados MySQL.
A exigência de hardware depende de sua aplicação, mas um máquina
Pentium com 64 MB de Memória RAM é capaz de executá-lo em um
pequeno ambiente corporativo. Quando se tratar de um site na rede mundial
é aconselhável disponibilizar máquinas poderosas, pois o que mais vai
impactar no processo é o nível de acesso.
Abaixo, segue um resumo com as principais características (extraído
do Guia Foca Linux):
• Possui suporte a scripts cgi usando linguagens como Perl, PHP, Shell
Script,
14
restrições de acesso separadamente para cada
endereço/arquivo/diretório acessado no servidor.
• Autenticação requerendo um nome de usuário e senha válidos para
acesso a alguma página/sub-diretório/arquivo (suportando criptografia
via Crypto e MD5).
• Negociação   de conteúdo, permitindo a exibição da página Web no
idioma requisitado pelo Cliente Navegador.
• Suporte a tipos mime.
• Personalização de logs.
• Mensagens de erro.
• Suporte a virtual hosting (é possível servir 2 ou mais páginas com
endereços/ portas diferentes através do mesmo processo ou usar
mais de um processo para controlar mais de um endereço).
• Suporte a IP virtual hosting.
• Suporte a name virtual hosting.
• Suporte a servidor Proxy ftp e http, com limite de acesso, caching
(todas flexivelmente configuráveis).
endereços Internos.
• Módulos DSO (Dynamic Shared Objects) permitem adicionar/remover
funcionalidades e recursos sem necessidade de recompilação do
programa.
15
de softwares e documentações, para aceitar contribuições regulares de
pessoas tanto jurídicas como físicas e para receber doações de produtos de
softwares existentes.
Essas licenças auxiliam no objetivo de transmitir segurança e longa
duração dos produtos de softwares feitos através do desenvolvimento open
source de colaboração. Em todos os casos, quem contribui tem plenos
direitos de usar suas contribuições originais para quaisquer outros fins fora
do Apache ao fornecer a fundação e seus projetos o direito de distribuir e dar
continuidade a seu trabalho dentro do Apache.
Todos os softwares produzidos pela fundação, ou qualquer outro dos
seus projetos ou assuntos é licenciado de acordo com os termos da Licença
Apache, versão 2.0 disponível em http://www.apache.org/licenses/LICENSE-
2.0
A versão atual da licença Apache (2.0), foi aprovada pela Apache
Sotware Foundation em 2004 e os objetivo dessa revisão foram
• Reduzir o número de perguntas freqüentes, para permitir que a licença
possa ser teutilizável., sem modificações de qualquer projeto, mesmo
não sendo projetos ASF.
• Para permitir que a licença possa ser incluída por referência ao invés
de enumerada em cada arquivo.
• Para esclarecer a licença mediante a apresentação de contribuições.
• Para exigir uma licença de patente relativo ás contribuições que
infringem necessariamente patentes próprias do contribuinte.
• Mover comentários sobre o Apache e outros avisos de atribuições
herdado para um local fora dos termos da licença.
O resultado é uma licença supostamente compatível com outras licenças
de código aberto, mantendo-se fiel aos objetivos originais do grupo
Apache e que apóie o desenvolvimento colaborativo entre as partes, sem
fins lucrativos por parte da ASF.
16
Instalar o servidor Apache no Linux é bastante fácil, principalmente
porque na, na maioria das vezes, está atrelado a facilidades existentes na
própria distribuição Linux. Por exemplo, se o um sistema operacional
utilizado for baseado no Debian (ou o próprio), como o Ubuntu, pode instalar
o Apache através do comando apt-get:
apt-get install apache 
O que se recomenda é instalar as versões do Apache preparadas pela
distribuição que está sendo utilizada, já que provavelmente o software estará
otimizado para rodar nela. É possível baixar pacotes "genéricos" no site da
Apache Foundation. Feito isso, a instalação pode ser feita da seguinte forma:
Supondo que foi baixado o pacote httpd-2.2.2.tar.bz2, digite em um terminal:
tar -xjvf httpd-2.2.2.tar.bz2 
cd httpd-2.2.2  (supondo-se que esta foi a pasta criada)
O primeiro comando acima descompacta o pacote e o segundo inicia
o processo de compilação e instalação:
./configure --prefix=/etc/httpd   (se preferir, indique após o sinal de
igual o local de instalação do Apache)
Na verdade, o comando ./configure pode ser utilizado com a adição
ou a remoção de módulos. Para isso, após "configure", informe "--enable-
módulo" para adicionar um módulo ou "--disable-módulo" para fazer o
contrário. Por exemplo, se for digitado:
./configure --enable-ssl --enable-rewrite --prefix=/etc/httpd 
17
 
Significa que você está habilitando o suporte a SSL e o "rewrite" que,
basicamente, permite "reescrever" endereços usando expressões regulares.
Findo este processo, digite:
Após a instalação estar concluída, pode-se executá-lo. Para isso há
mais de uma forma, uma delas é a descrita a seguir, que pode ser digitada
em um terminal:
No comando acima, o caminho correspondente deve ser alterado,
caso o Apache esteja instalado em um diretório diferente. Em alguns casos,
basta abrir o terminal e digitar apenas "apachectl start ". Isso será suficiente
para iniciar o Apache.
restart -  para reiniciar o Apache;
stop -  para parar o Apache;
status -  para mostrar o status do processo do Apache.
Após iniciar o Apache, é possível testá-lo: abra um navegador de internet
instalado na máquina e digite no campo de endereço: http://localhost:80 
(em alguns casos, basta digitar localhost ). Se o Apache estiver funcionando
corretamente, uma página como a mostrada na figura 1 será exibida no
browser:
Se o objetivo é fazer com que o Apache inicie automaticamente toda
vez que a máquina for ligada, basta executar o seguinte procedimento: Abra
o arquivo /etc/rc.d/rc.local (ou equivalente, de acordo com o seu sistema
18
/etc/httpd/bin/apachectl start
Figura 1 – tela localhost mostrada pelo apache quando já instalado
Se o objetivo é fazer com que o Apache inicie automaticamente toda
vez que a máquina for ligada, basta executar o seguinte procedimento: Abra
o arquivo /etc/rc.d/rc.local (ou equivalente, de acordo com o seu sistema
operacional) e acrescente nele a linha:
/etc/httpd/bin/apachectl start
Existem outras maneiras de iniciar o Apache automaticamente. Outra
opção, para quem utiliza o Fedora Core em português, por exemplo, é a
seguinte (levando-se em conta que o Apache está devidamente instalado):
acesse o menu (chapéu vermelho), Configurações do Sistema /
Configurações do Servidor / Serviços . No menu à esquerda, habilite a opção
"httpd" e clique em Salvar.
O passo seguinte é configurar o Apache (de preferência com o
19
 
servidor parado). Para isso, deve-se acessar o diretório conf - nesse caso,
 /etc/httpd/conf - e abrir os arquivos de configuração. Nessa pasta, encontra-
se basicamente, os arquivos httpd.conf, srm.conf (dependendo da versão) e
access.conf (dependendo da versão).
Dos arquivos citados, o mais importante é o primeiro, pois é nele que
estão as configurações usadas pelo daemon do Apache, o httpd (daemon é
uma espécie de programa que executa tarefas em segundo plano). No
arquivo srm.conf estão indicados os recursos que o Apache precisa,
enquanto que no access.conf estão as diretivas de segurança que controlam
o acesso a arquivos e diretórios.
20
Capítulo 4
4.1 – Finalizando O servidor Apache é um poderoso software, seguro, robusto e muito
utilizado no mundo. Suas várias opções de configuração, faz dele uma
ferramenta que requer tempo para ser totalmente conhecida. Sua
capacidade de adaptação a diversas situações específicas, tais como
plataformas variadas (Linux, Windows, OS/2, etc.), alem de suporte a várias
linguagens, faz com que seja hoje o servidor Web mais utilizado no mundo.
Para um melhor domínio do Apache, se esse for o objetivo, o site oficial da
Apache Software Foundation contêm uma documentação bastante
abrangente. No Brasil também é possível encontrar bom material sobre o
Apache e um dos locais onde oferece esse material, é o Guia Foca Linux ou
o site Laureano
• Documentação da Apache:
  focalinux.cipsga.org.br/guia/avancado/ch-s-apache.htm*;
About the ApacheHTTP Server Project – The Apache HTTP Server Project:
2009
Set. 2009
Project).  Info Wester disponível em:
http://www.infowester.com/servapach.php Acesso em 16 Set. 2009.
APPOLINÁRIO, FÁBIO: Metodologia da ciência: Filosofia e práticas da
pesquisa. 1.ed. São Paulo,Cengage Learning, 2006. 209 p.
APPOLINÁRIO, FÁBIO: Dicionário de metodologia científica – Um guia
para produção do conhecimento científico. 1.ed. São Paulo, Atlas,
2004.300 p.
em: http://www.malima.com.br/article_read.asp?id=143  Acesso em 17
Set 2009.
Disponível em: http://www.malima.com.br/article_read.asp?id=156 
22
Server Project, disponível em: http://httpd.apache.org/docs-project/  
Acesso em 17 Set 2009.
GUIA DO HARDWARE. Apache.  Têrmos técnicos GDH disponível em:
http://www.guiadohardware.net/termos/apache Acesso em 16 Set. 2009.
GUIA FOCA LINUX. Apache.  Guia Foca Gnu/Linux, Capítulo 12,
disponível em:
disponível em: http://www.mlaureano.org/guiasGuiaInstApache.php
LICENÇA: Apache License Version 2.0, - The Apache Software
Foundation: 2009
Set. 09, também disponível em:
http://httpd.apache.org/docs/trunk/license.html Acesso em 17 Set. 2009
NETCRAFT. Web Server Survey.  Netcarft: August 2009, Disponível em
http://news.netcraft.com/archives/2009/08/31/august_2009
 _web_server_survey.html
UNIVERSIDADE DO MINHO. Tecnologias Aplicadas na
Implementação.  Um.Minho, Portugal, 2009 disponível em:
http://www.di.uminho.pt/~gepl/SIEP/tecnologias.htm  Acesso em 16 Set.
2009.
23
Anexo 1
Licença Apache
Apache License
DISTRIBUTION
• Definitions
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the
24
copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other
entities that control, are controlled by, or are under common control
with that entity. For the purposes of this definition, "control" means (i)
the power, direct or indirect, to cause the direction or management of
such entity, whether by contract or otherwise, or (ii) ownership of fifty
percent (50%) or more of the outstanding shares, or (iii) beneficial
ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but not limited
to compiled object code, generated documentation, and conversions to
other media types.
"Work" shall mean the work of authorship, whether in Source or Object
form, made available under the License, as indicated by a copyright
notice that is included in or attached to the work (an example is
provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original
version of the Work and any modifications or additions to that Work or
Derivative Works thereof, that is intentionally submitted to Licensor for
inclusion in the Work by the copyright owner or by an individual or
Legal Entity authorized to submit on behalf of the copyright owner. For
25
the purposes of this definition, "submitted" means any form of
electronic, verbal, or written communication sent to the Licensor or its
representatives, including but not limited to communication on
electronic mailing lists, source code control systems, and issue
tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding
communication that is conspicuously marked or otherwise designated
in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on
behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
• Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright
license to reproduce, prepare Derivative Works of, publicly display,
publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
• Grant of Patent License. Subject to the terms and conditions of this
License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
as stated in this section) patent license to make, have made, use, offer
to sell, sell, import, and otherwise transfer the Work, where such
license applies only to those patent claims licensable by such
Contributor that are necessarily infringed by their Contribution(s) alone
or by combination of their Contribution(s) with the Work to which such
Contribution(s) was submitted. If You institute patent litigation against
any entity (including a cross-claim or counterclaim in a lawsuit) alleging
that the Work or a Contribution incorporated within the Work
constitutes direct or contributory patent infringement, then any patent
licenses granted to You under this License for that Work shall
terminate as of the date such litigation is filed.
• Redistribution. You may reproduce and distribute copies of the Work
or Derivative Works thereof in any medium, with or without
26
 
modifications, and in Source or Object form, provided that You meet
the following conditions:
• You must give any other recipients of the Work or Derivative
Works a copy of this License; and
• You must cause any modified files to carry prominent notices
stating that You changed the files; and
• You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work, excluding
those notices that do not pertain to any part of the Derivative
Works; and
• If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of
the Derivative Works; within the Source form or documentation,
if provided along with the Derivative Works; or, within a display
generated by the Derivative Works, if and wherever such third-
party notices normally appear. The contents of the NOTICE file
are for informational purposes only and do not modify the
License. You may add Your own attribution notices within
Derivative Works that You distribute, alongside or as an
addendum to the NOTICE text from the Work, provided that
such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions for
use, reproduction, or distribution of Your modifications, or for any such
Derivative Works as a whole, provided Your use, reproduction, and
distribution of the Work otherwise complies with the conditions stated
in this License.
any Contribution intentionally submitted for inclusion in the Work by
You to the Licensor shall be under the terms and conditions of this
License, without any additional terms or conditions. Notwithstanding
the above, nothing herein shall supersede or modify the terms of any
separate license agreement you may have executed with Licensor
regarding such Contributions.
• Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
• Disclaimer of Warranty. Unless required by applicable law or agreed
to in writing, Licensor provides the Work (and each Contributor
provides its Contributions) on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions of
TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS
FOR A PARTICULAR PURPOSE. You are solely responsible for
determining the appropriateness of using or redistributing the Work
and assume any risks associated with Your exercise of permissions
under this License.
• Limitation of Liability. In no event and under no legal theory, whether
in tort (including negligence), contract, or otherwise, unless required by
applicable law (such as deliberate and grossly negligent acts) or
agreed to in writing, shall any Contributor be liable to You for damages,
including any direct, indirect, special, incidental, or consequential
damages of any character arising as a result of this License or out of
the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or
malfunction, or any and all other commercial damages or losses), even
if such Contributor has been advised of the possibility of such
damages.
28
 
Work or Derivative Works thereof, You may choose to offer, and
charge a fee for, acceptance of support, warranty, indemnity, or other
liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf
and on Your sole responsibility, not on behalf of any other Contributor,
and only if You agree to indemnify, defend, and hold each Contributor
harmless for any liability incurred by, or claims asserted against, such
Contributor by reason of your accepting any such warranty or
additional liability.
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included
on the same "printed page" as the copyright notice for easier identification
within third-party archives.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.