# Plug-in

Na informática, um plugin ou módulo de extensão (também conhecido por plug-in, add-in, add-on) é um programa de computador usado para adicionar funções a outros programas maiores, provendo alguma funcionalidade especial ou muito específica. Geralmente pequeno e leve, é usado somente sob demanda.
Uma aplicação pode utilizar tal técnica por diversos motivos, como permitir que desenvolvedores de software externos estendam as funcionalidades do produto, suportem funcionalidades antes desconhecidas, reduzam o tamanho do programa ou, até mesmo, separem o código fonte de diferentes componentes devido a incompatibilidade de licenças de software.

## Mecanismo

A aplicação hospedeira provê serviços que o plugin pode usar, incluindo uma forma da extensão registrar a si mesma na aplicação hospedeira e um protocolo para a troca de informações entre eles. Os plugins dependem de tais serviços, e geralmente não trabalham por conta própria. Em contrapartida, a aplicação hospedeira é independente, de forma que é possível adicionar e atualizar os plugins dinamicamente, sem a necessidade de efetuar alterações na própria aplicação hospedeira.

## Plug-ins e extensões

No que diz respeito aos navegadores, plugins diferem de extensões.
Plugins geralmente são externos, componentes binários usando o Netscape Plugin API (ou ActiveX no Microsoft Internet Explorer) para lidar com novos tipo de multimídia.
Extensões, por outro lado, geralmente são integradas com a lógica da aplicação do browser, isto é, a interface do próprio navegador.
Já que ambos, plugins e extensões, aumentam a utilidade da aplicação original, a Mozilla usa o termo "add-on" como uma categoria inclusiva de módulos de reposição que consiste de plugins, temas e ferramentas de busca.
Por exemplo, o impulso original por trás do desenvolvimento do Mozilla Firefox foi o exercício de uma aplicação de base pequena, deixando funcionalidades exóticas ou personalizadas para serem implementadas por extensões para evitar a fluência característica. Isto está em contraste com a abordagem "kitchen sink" (também conhecido como "scope creep", denominações utilizadas quando um projeto muda demais durante seu desenvolvimento) de seus antecessores, o Mozilla Application Suite e o Netscape 6 e 7. Portanto, depois da integração, extensões podem ser vistas como parte do próprio browser, adaptado de um conjunto de módulos opcionais. O Firefox também suporta plug-ins usando NPAPI (ou Relação de Programação de Aplicação Plugin De Netscape). Quando o browser encontra referências a um conteúdo o qual um plug-in é especializado, os dados são entregues para serem processados por aquele plug-in. Uma vez que geralmente há uma separação clara entre o browser e o plugin, os resultados são objetos discretos encaixados dentro de uma página web. A mesma distinção entre plugins e extensões está em uso por outros navegadores, como o Microsoft Internet Explorer, onde uma extensão típica pode ser uma nova barra de ferramentas, e um plugin pode incorporar um player de vídeo na página.
Uma extensão de software é um programa de computador feito para ser incorporado a outra parte do software a fim de reforçar ou estender as funcionalidades deste. Por conta própria, o programa não é útil ou funcional para o usuário.
Atualizações de plugins ou add-ons ajudam o usuário a trabalhar com as aplicações mais avançadas hospedadas pelos respectivos websites. O uso de plugins criou um revolucionário avanço tecnológico impactante na área de tecnologia da informação.
Exemplos de aplicações de software que suporte extensões incluem o navegador Mozilla Firefox, a Adobe Systems Photoshop e Microsoft Windows Explorer extensões de shell. É comum achar que aplicações cujo escopo é potencialmente ilimitado terão uma interface de extensões (API), e a descrição da API, muitas vezes, será publicada para que os desenvolvedores de terceiros possam produzir extensões.
Mecanismos de extensão também podem ser encontrados em alguns sistemas operacionais, como com os módulos do kernel Linux. O ambiente de execução de algumas linguagens de programação também suportam extensões, como o PHP com suporte a extensões que oferecem uma interface para bibliotecas de terceiros, e para oferecer extensões de depuração, perfis, segurança e melhoria de desempenho.
Outros termos populares usados para designar as extensões são add-ons, add-ins ou plugins.
Os termos "módulos" e "componentes" também são utilizados, mas eles não enfatizam o aspecto da extensão. Eles são termos para geralmente descrever a estrutura de programas e pode ser usado para o programa de núcleo estendido também.

## Histórico

Plugins apareceram logo em meados de 1970, quando o editor de texto EDT em execução no sistema operacional Unisys VS / 9, utilizando o computador mainframe Univac 90/60 série, desde que a capacidade de executar um programa a partir do editor e permitir que esse programa de acessar o buffer editor, permitindo assim que um programa externo para acessar uma sessão de edição na memória. O plugin programa poderá fazer chamadas para o editor executar serviços de edição de texto sobre a reserva que o editor comum com o plugin. O Waterloo compilador Fortran utilizado este recurso para permitir a elaboração de programas interativos Fortran editado pelo EDT.
Atualmente, os programadores geralmente implementam as funcionalidade plug-in usando bibliotecas compartilhadas obrigatoriamente instalada em local prescrito pelo aplicativo host. HyperCard apoiou uma instalação similar, mais comumente incluído o plugin de código nos documentos HyperCard (chamados stacks) próprios. Assim, o HyperCard pilha tornou-se uma aplicação independente de direito próprio, distribuído como uma entidade única que os utilizadores finais poderia funcionar sem a necessidade de instalação adicional etapas.

## Exemplos

Eis alguns plugins muito usados e suas funções:
* Adobe Acrobat Reader: visualização de arquivos PDF (Portable Document Format).
* Crescendo: inserção de arquivos MIDI em páginas, na Internet.
* Macromedia Flash: visualização de páginas feitas parcialmente ou inteiramente em Flash.
* QuickTime, Quick Time Alternativo: visualização de vídeos em vários formatos, inclusive o mov.
* Real Player Alternativo: execução de sons e vídeos em tempo real.
Exemplos de aplicações e seus plugins incluem:
* Clientes de e-mail usam plugins para criptografar e descriptografar e-mail (Pretty Good Privacy) ou enviar e-mail anexos de grandes dimensões (GlobalSCAPE Express Mail).
* Softwares gráficos usam plugins para suportar os formatos de arquivo e processamento de imagens (Adobe Photoshop).
* Os leitores multimédia usam plugins para suportar os formatos de arquivo e aplicar filtros (foobar2000, GStreamer, Quintessential, VST, Winamp, XMMS).
* Microsoft Office usa plugins (mais conhecido como add-ins) para ampliar a capacidade de sua aplicação, adicionando comandos personalizados e recursos especializados.
* Sniffers usam plugins para decodificar os formatos de pacotes (OmniPeek).
* Aplicações de sensoriamento remoto use plugins para processar dados de diferentes tipos de sensores (ótica).
* Rockbox, um firmware para players de áudio digital, pode usar plugins, por exemplo, jogar, usar o editor de texto.
* Ambientes de desenvolvimento de software usam plugins para suportar linguagens de programação (Eclipse, jEdit, MonoDevelop).
* Os navegadores da Web usam plugins para a reprodução de vídeo e formatos de apresentação (Flash, QuickTime, Microsoft Silverlight, 3DMLW).
* Alguns consoles de mistura digital permitem plugins para ampliar recursos como efeitos de reverberação, equalização e compressão.