doc/pt_BR.ISO8859-1/articles/building-products/article.xml
2013-11-13 07:52:45 +00:00

1079 lines
46 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Brazilian Portuguese Documentation Project
Original revision: r39544
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="pt_br">
<info><title>Construindo Produtos com o FreeBSD</title>
<authorgroup>
<author><personname><firstname>Joseph</firstname><surname>Koshy</surname></personname><affiliation>
<orgname>The FreeBSD Project</orgname>
<address><email>jkoshy@FreeBSD.org</email></address>
</affiliation></author>
</authorgroup>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<title>Sumário</title>
<para>O projeto FreeBSD é um projeto voluntário e colaborativo
de âmbito mundial, o qual desenvolve um sistema operacional de
alta qualidade, capaz de ser utilizado em diferentes
arquiteturas computacionais. O projeto FreeBSD distribui o
código fonte do seu produto sob uma licença liberal, com a
intenção de incentivar o uso de seu código. Colaborar com o
projeto FreeBSD pode ajudar sua empresa a reduzir o tempo
necessário para colocar um produto no mercado, a reduzir
seus custos de engenharia e a melhorar qualidade de seus
produtos.</para>
<para>Este artigo analisa as questões envolvidas no uso do
código do FreeBSD em appliances e softwares. Ele também
destaca as características do FreeBSD, que o tornam uma
excelente base para o desenvolvimento de produtos. O artigo
conclui sugerindo um conjunto das <quote>melhores
práticas</quote> de organizações que colaboram com o projeto
FreeBSD.</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>Introdução</title>
<para>Atualmente o FreeBSD é bem conhecido como um sistema
operacional de alto desempenho para servidores. Ele está
instalado em milhões de servidores web e em outros hosts
conectados diretamente a internet em todo o mundo. O código
do FreeBSD também é parte integrante de muitos produtos, que
vão desde aparelhos como roteadores de rede, firewalls e
dispositivos de armazenamento, até computadores pessoais.
Partes do FreeBSD também têm sido utilizadas em softwares
comerciais (consulte <xref linkend="freebsd-intro"/>).</para>
<para>Neste artigo, vamos olhar para o <link xlink:href="&url.base;/">Projeto FreeBSD</link> como um recurso de
engenharia de software &mdash; como um conjunto de blocos de
construção e de processos os quais você pode utilizar para
construir produtos.</para>
<para>Embora o código fonte do FreeBSD seja distribuído
gratuitamente ao público, para desfrutar plenamente dos
benefícios do trabalho do projeto, as organizações precisam
<emphasis>colaborar</emphasis> com o mesmo. Nas seções
subsequentes do presente artigo discutiremos formas eficazes de
colaborar com o projeto, bem como os perigos que precisam ser
evitados ao fazê-lo.</para>
<formalpara>
<title>Advertência ao Leitor</title>
<para>O autor considera que as características do projeto
FreeBSD mencionadas neste artigo eram substancialmente
verdadeiras no momento em que o artigo foi concebido e
escrito (2005). No entanto, o leitor deve ter em mente que
as práticas e processos utilizados por comunidades de código
aberto podem mudar ao longo do tempo, e que portanto as
informações deste artigo devem ser consideradas apenas como
indicativas e não como verdades absolutas.</para>
</formalpara>
<sect2>
<title>Público Alvo</title>
<para>Este documento tem como público alvo os seguintes grupos
de pessoas:</para>
<itemizedlist>
<listitem>
<simpara>Tomadores de decisão em empresas que estejam em
busca de meios para melhorar a qualidade de seus produtos,
de reduzir o tempo necessário para lançá-los no mercado e
de reduzir seus custos de engenharia no longo
prazo.</simpara>
</listitem>
<listitem>
<simpara>Consultores de tecnologia procurando as melhores
práticas para alavancar projetos de <quote>código
aberto</quote>.</simpara>
</listitem>
<listitem>
<simpara>Observadores da indústria interessados em
compreender a dinâmica dos projetos de <quote>código
aberto</quote>.
</simpara>
</listitem>
<listitem>
<simpara>Desenvolvedores de software que utilizam o FreeBSD
e que buscam formas de contribuir com o projeto.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Objetivos do artigo</title>
<para>Após a leitura deste artigo, você deve ter:</para>
<itemizedlist>
<listitem>
<simpara>Uma melhor compreensão dos objetivos do Projeto
FreeBSD e de sua estrutura organizacional.</simpara>
</listitem>
<listitem>
<simpara>Uma visão geral das tecnologias disponíveis no
projeto.</simpara>
</listitem>
<listitem>
<simpara>Uma melhor compreensão do modelo de
desenvolvimento adotado pelo Projeto FreeBSD e dos
processos de engenharia envolvidos no lançamento de uma
nova versão do sistema.</simpara>
</listitem>
<listitem>
<simpara>Uma compreensão de como os processos convencionais
de desenvolvimento de software em uma empresa diferem dos
processos utilizados no projeto FreeBSD.</simpara>
</listitem>
<listitem>
<simpara>Consciência dos canais de comunicação utilizados
pelo projeto e do nível de transparência que você pode
esperar.</simpara>
</listitem>
<listitem>
<simpara>Consciência das melhores formas de se trabalhar
com o projeto &mdash; a melhor forma de reduzir os custos
de engenharia, de reduzir o tempo necessário para levar
seu produto ao mercado, de gerir vulnerabilidades de
segurança, e de preservar a compatibilidade futura com o
seu produto a medida que o Projeto FreeBSD
evolui.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Estrutura do Artigo</title>
<para>O restante deste artigo está estruturado da seguinte
forma:</para>
<itemizedlist>
<listitem>
<simpara>A <xref linkend="freebsd-intro"/> apresenta o
projeto FreeBSD, explora sua estrutura organizacional, as
principais tecnologias e processos de engenharia
envolvidos no lançamento de uma nova versão do
sistema.</simpara>
</listitem>
<listitem>
<simpara>A <xref linkend="freebsd-collaboration"/>
descreve formas de colaborar com o Projeto FreeBSD. Esta
seção também aborda as armadilhas que são geralmente
encontradas por empresas que trabalham com projetos
voluntários como o FreeBSD.</simpara>
</listitem>
<listitem>
<simpara>A <xref linkend="conclusion"/> conclui o
artigo.</simpara>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 xml:id="freebsd-intro">
<title>O FreeBSD como um conjunto de blocos de construção</title>
<para>O FreeBSD fornece uma excelente base sobre a qual podemos
construir produtos:</para>
<itemizedlist>
<listitem>
<simpara>O código fonte do FreeBSD é distribuído sob uma
licença BSD liberal, o que facilita sua adoção em produtos
comerciais com um mínimo de preocupações.
<citation>Mon2005</citation></simpara>
</listitem>
<listitem>
<simpara>O Projeto FreeBSD possui excelentes práticas de
engenharia as quais podem ser aproveitadas.</simpara>
</listitem>
<listitem>
<simpara>O projeto oferece uma transparência excepcional em
seu funcionamento, permitindo que as empresas que utilizam o
seu código se planejem de forma eficaz para o
futuro.</simpara>
</listitem>
<listitem>
<simpara>A cultura do projeto FreeBSD, herdada do Grupo de
Pesquisa de Ciências da Computação da Universidade da
Califórnia em Berkeley <citation>McKu1999-1</citation>,
fomenta trabalhos de alta qualidade. Algumas
funcionalidades do FreeBSD definem o estado da
arte.</simpara>
</listitem>
</itemizedlist>
<simpara>O <citation>GoldGab2005</citation> analisa em maior
profundidade os motivos comerciais para se utilizar código fonte
aberto. Para as organizações, os benefícios do uso de
componentes do FreeBSD em seus produtos incluem a redução do
tempo necessário para lançar novos produtos no mercado,
menores custos e menores riscos de desenvolvimento.</simpara>
<sect2>
<title>Construindo com o FreeBSD</title>
<simpara>Aqui estão alguns exemplos de como as empresas estão
utilizando o FreeBSD:</simpara>
<itemizedlist>
<listitem>
<simpara>Como um provedor (<foreignphrase>upstream
source</foreignphrase>) de códigos testados para
bibliotecas e utilitários.</simpara>
<simpara>Sendo o <foreignphrase>downstream</foreignphrase>
do projeto, as organizações se aproveitam das novas
funcionalidades, das correções de bugs e dos testes que o
código fonte do projeto FreeBSD recebe.</simpara>
</listitem>
<listitem>
<simpara>Como sistema operacional integrado (por exemplo, em
um roteador OEM e ou em um dispositivo de firewall).
Neste modelo, as empresas utilizam uma versão customizada
do kernel e do conjunto de aplicativos do FreeBSD,
juntamente com uma camada proprietária de gestão para os
seus dispositivos. Os fabricantes de equipamentos
originais (OEMs) se beneficiam da adição por parte do
FreeBSD de suporte a novos componentes de hardware, bem
como se beneficia dos testes que o sistema base
recebe.</simpara>
<simpara>O FreeBSD é distribuído com um ambiente de
desenvolvimento auto-hospedado o qual permite a fácil
criação de tais configurações.</simpara>
</listitem>
<listitem>
<simpara>Como um ambiente Unix compatível para as funções de
gerenciamento em dispositivos de armazenamento high-end e
em dispositivos de rede, executando em uma lâmina
separada.</simpara>
<simpara>O FreeBSD fornece ferramentas para a criação de
imagens do sistema operacional dedicadas a executar uma
função específica. Sua implementação da API unix BSD é
madura e testada. O FreeBSD também pode proporcionar um
ambiente de desenvolvimento cruzado estável para os outros
componentes de dispositivos topo de linha.</simpara>
</listitem>
<listitem>
<simpara>Como um veículo para obter suporte e testes
amplos de uma equipe mundial de desenvolvedores para a sua
<quote>propriedade intelectual</quote>
não-crítica.</simpara>
<simpara>Neste modelo, as organizações contribuem com
frameworks de infra-estrutura úteis ao projeto FreeBSD
(por exemplo, veja o &man.netgraph.3;). A ampla
exposição que o código obtém ajuda na rápida
identificação de bugs e de problemas de desempenho. O
envolvimento de desenvolvedores de alta qualidade também
resulta no desenvolvimento de extensões úteis para a
infra-estrutura do sistema, e das quais a empresa que está
contribuindo com o projeto também se beneficia.</simpara>
</listitem>
<listitem>
<simpara>Como um ambiente de desenvolvimento apoiando
desenvolvimento cruzado para sistemas operacionais
embarcados como <link xlink:href="http://www.rtems.com/">RTEMS</link> e o <link xlink:href="http://ecos.sourceware.org/">eCOS</link>.</simpara>
<simpara>Existem muitos ambientes de desenvolvimento
completos na forte coleção de mais de &os.numports;
aplicativos portados e empacotados para o
FreeBSD.</simpara>
</listitem>
<listitem>
<simpara>Como forma de suportar uma API estilo Unix em um
sistema operacional que de outro modo seria proprietário,
aumentando a sua palatabilidade para os desenvolvedores de
aplicativos.</simpara>
<simpara>Aqui as partes do kernel do FreeBSD e as aplicações
são <quote>portadas</quote> para serem executadas
juntamente com outras tarefas no sistema operacional
proprietário. A disponibilidade de uma implementação
estável e bem testada da API <trademark>Unix</trademark>
pode reduzir o esforço necessário para portar aplicações
populares para um sistema operacional proprietário. Como
o FreeBSD é distribuído acompanhado de uma documentação de
alta qualidade sobre a sua estrutura interna, e possui
processos eficazes de engenharia para gerenciamento de
vulnerabilidades e para lançamento de novas versões, os
custos para mantê-lo atualizado são baixos.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="freebsd-technologies">
<title>Tecnologias</title>
<para>Existe um grande número de tecnologias suportadas pelo
projeto FreeBSD. Abaixo você encontra uma lista com alguma
delas:</para>
<itemizedlist>
<listitem>
<simpara>Um sistema completo que pode compilar a si mesmo
de forma cruzada para as seguintes arquiteturas: alpha
(até o &os; versão 6.X), amd64, ia64, i386, sparc64,
powerpc (veja &man.build.7;).</simpara>
</listitem>
<listitem>
<simpara>Suporte para as seguintes tecnologias, protocolos e
padrões: <!-- Keyword soup. Urk. -->
<acronym>ATA</acronym>, <acronym>ATAPI</acronym>,
<acronym>ATM</acronym>, <trademark>Bluetooth</trademark>,
<acronym>CAM</acronym>, <trademark>CardBus</trademark>,
<acronym>DHCP</acronym>, <acronym>DNS</acronym>,
<trademark>EISA</trademark>,
<trademark>Ethernet</trademark>, <acronym>FDDI</acronym>,
Fibre Channel, <acronym>GPIB</acronym>, IEEE 1394, IPv4,
IPv6, <acronym>IPSEC</acronym>,
<trademark>IPX</trademark>, <acronym>ISDN</acronym>,
<acronym>MAC</acronym>, <acronym>NIS</acronym>,
<acronym>NFS</acronym>, OpenSSH, <acronym>OPIE</acronym>,
<acronym>PAM</acronym>, <trademark>PCI</trademark>,
<acronym>PCMCIA</acronym>, <trademark>POSIX</trademark>,
<acronym>PnP</acronym>, <acronym>RAID</acronym>,
<acronym>RPC</acronym>, <acronym>SATA</acronym>,
<acronym>SCSI</acronym>, <acronym>SMB</acronym>,
<acronym>TCP</acronym>, <acronym>USB</acronym>,
<acronym>VESA</acronym>, <acronym>VLAN</acronym>,
<acronym>VLB</acronym>,
<trademark>WebNFS</trademark>.</simpara>
</listitem>
<listitem>
<simpara>Um kernel modular capaz de multiprocessamento
simétrico, com módulos de kernel carregáveis e um
sistema de configuração flexível e fácil de
usar.</simpara>
</listitem>
<listitem>
<simpara>Suporta a emulação de binários do Linux e do SVR4
com velocidades próximas as que você obtém executando os
aplicativos de forma nativa. Suporte para os binários dos
drivers de rede do <trademark>Windows</trademark>
(<acronym>NDIS</acronym>).</simpara>
</listitem>
<listitem>
<simpara>Bibliotecas para muitas tarefas de programação:
arquivos, suporte a FTP e HTTP, suporte a threads, além
de um ambiente completo de programação
<trademark>POSIX</trademark> like.</simpara>
</listitem>
<listitem>
<simpara>Funcionalidades avançadas de segurança: Controle
de Acesso Obrigatório (&man.mac.9;), jails (&man.jail.2;),
<acronym>ACL</acronym>s,e suporte no kernel a dispositivos
de criptografia.</simpara>
</listitem>
<listitem>
<simpara>Funcionalidades avançadas de rede: firewalls,
gerenciamento de QoS, rede TCP/IP de alta performance com
suporte a muitos recursos avançados.</simpara>
<simpara>O framework Netgraph (&man.netgraph.4;) presente no
kernel do FreeBSD, permite que os módulos de rede possam
ser conectados entre si de formas flexíveis.</simpara>
</listitem>
<listitem>
<simpara>Suporte para tecnologias avançadas de armazenamento
Fibre Channel, <acronym>SCSI</acronym>, RAID por
software e hardware, <acronym>ATA</acronym> e
<acronym>SATA</acronym>.</simpara>
<simpara>O FreeBSD suporta um grande numero de sistemas de
arquivos, e o seu sistema de arquivos nativo UFS2 suporta
<literal>soft updates</literal>,
<literal>snapshots</literal> e sistemas de arquivos de
tamanho muito grandes (até 16 TB por sistema de arquivos)
<citation>McKu1999</citation>.</simpara>
<simpara>O framework <acronym>GEOM</acronym> (&man.geom.4;)
presente no kernel do FreeBSD permite que módulos de
armazenamento sejam compostos de forma flexível.</simpara>
</listitem>
<listitem>
<simpara>Mais de &os.numports; aplicativos portados, tanto
comerciais quanto de código aberto, gerenciados através da
coleção de ports do FreeBSD.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Estrutura Organizacional</title>
<para>A estrutura organizacional do FreeBSD não é
hierárquica</para>
<para>Existem basicamente dois tipos de colaboradores no projeto
FreeBSD, os usuários em geral e os desenvolvedores com acesso
de escrita (conhecidos como <firstterm>committers</firstterm>
no jargão) ao repositório de código fonte.</para>
<para>Existem muitos milhares de colaboradores no primeiro
grupo, a grande maioria das contribuições para o FreeBSD vêm
de indivíduos desse grupo; A permissão de
<literal>commit</literal> (acesso de escrita) no repositório é
concedida a pessoas que contribuem de forma consistente para o
projeto. O direito de <literal>commit</literal> vem
acompanhado de responsabilidades adicionais, e para facilitar
o aprendizado das mesmas, um mentor é atribuído a todos os
novos <literal>committers</literal>.</para>
<figure>
<title>Organização do FreeBSD</title>
<mediaobject>
<imageobject>
<imagedata fileref="freebsd-organization"/>
</imageobject>
</mediaobject>
</figure>
<para>A resolução de conflitos é realizada por um
<quote><literal>Core Team</literal></quote> de 9 pessoas, o
qual é eleito a partir do grupo de
<literal>committers</literal>.</para>
<para>O FreeBSD não tem <literal>committers</literal>
corporativos. Os <literal>committers</literal> são obrigados
a assumir de forma individual a responsabilidade pelas
mudanças que introduzem no código. O <link xlink:href="&url.articles.committers-guide;">FreeBSD Committer's
Guide</link> <citation>ComGuide</citation> documenta as
regras e responsabilidades que se aplicam aos
<literal>committers</literal>.</para>
<para>O modelo do projeto FreeBSD é examinado em detalhes no
<citation>Nik2005</citation>.</para>
</sect2>
<sect2>
<title>Processos de Engenharia para liberação de novas versões
do FreeBSD.</title>
<para>O processo de engenharia para a liberação de uma nova
versão do FreeBSD desempenha um papel importante para
assegurar que as suas novas versões sejam de alta qualidade.
Em qualquer ponto do tempo, os voluntários do FreeBSD suportam
múltiplas versões do código sistema (<xref linkend="fig-freebsd-branches"/>):</para>
<itemizedlist>
<listitem>
<simpara>As novas funcionalidades e os códigos disruptivos
entram no ramo de desenvolvimento, também conhecido como
ramo <firstterm>-CURRENT</firstterm>.</simpara>
</listitem>
<listitem>
<simpara>O ramo <firstterm>-STABLE</firstterm> contém
linhas de código que são ramificadas a partir do HEAD em
intervalos regulares. Apenas código devidamente testado é
permitido no ramo -STABLE. Novas funcionalidades são
permitidas após terem sido testadas e estabilizadas no ramo
-CURRENT.</simpara>
</listitem>
<listitem>
<simpara>O ramo <firstterm>-RELEASE</firstterm> é mantido
pela equipe de segurança do FreeBSD. Somente correções de
bugs críticos são permitidos no ramo -RELEASE.</simpara>
</listitem>
</itemizedlist>
<figure xml:id="fig-freebsd-branches">
<title>Ramos de versões do FreeBSD</title>
<mediaobject>
<imageobject>
<imagedata fileref="freebsd-branches"/>
</imageobject>
</mediaobject>
</figure>
<para>As linhas de código são mantidas vivas enquanto houver
interesse dos usuários e dos desenvolvedores nelas.</para>
<para>As arquiteturas de máquina estão agrupadas em
<quote>tiers</quote>; As arquiteturas <firstterm>Tier
1</firstterm> são totalmente suportadas pelas equipes de
engenharia de lançamento e de segurança, as arquiteturas
<firstterm>Tier 2</firstterm> são suportadas em regime de
<quote>melhores esforços</quote>, e as arquiteturas
experimentais compreendem o <firstterm>Tier 3</firstterm>. A
lista das <link xlink:href="&url.articles.committers-guide;/archs.html">arquiteturas
suportadas</link> é parte da coleção de documentos do
FreeBSD.</para>
<para>A equipe de engenharia de lançamentos publica um <link xlink:href="&url.base;/releng/"><literal>road map</literal></link>
para as versões futuras do FreeBSD no web site do projeto. As
datas indicadas no <literal>road map</literal> não são prazos;
As novas versões do FreeBSD são liberadas apenas quando o seu
código e documentação estão prontos.</para>
<para>O processo de engenharia para a liberação de novas versões
do FreeBSD é descrito em detalhes no
<citation>RelEngDoc</citation>.</para>
</sect2>
</sect1>
<sect1 xml:id="freebsd-collaboration">
<title>Colaborando com o FreeBSD</title>
<para>Projetos <literal>open-source</literal> como o FreeBSD
oferecem códigos finalizados de altíssima qualidade
<citation>Cov2005</citation>. Estudos anteriores examinaram o
efeito da disponibilidade do código fonte no desenvolvimento de
software <citation>Com2004</citation>.</para>
<para>Embora o acesso a um código fonte de qualidade possa reduzir
o custo inicial de desenvolvimento, a longo prazo, os custos com
o gerenciamento de mudanças começam a dominar. A medida que os
ambientes computacionais mudam ao longo dos anos e novas
vulnerabilidades de segurança são descobertas, o seu produto
também precisará mudar e se adaptar. O uso de código
open-source não deve ser encarado como uma atividade pontual,
mas sim como um <emphasis>processo contínuo</emphasis>. Os
melhores projetos para se colaborar são os que estão
<emphasis>vivos</emphasis>, ou seja, aqueles com uma
comunidade ativa, que tenha objetivos claros e que possua um
estilo de trabalho transparente.</para>
<itemizedlist>
<listitem>
<simpara>o FreeBSD tem uma comunidade de desenvolvimento ativa
em torno dele. No momento em que este artigo foi escrito,
existiam milhares de colaboradores com representantes de
praticamente todos os continentes povoados do mundo, e mais
de 300 indivíduos com acesso de escrita aos repositórios
do projeto.</simpara>
</listitem>
<listitem>
<simpara>Os objetivos do projeto FreeBSD são
<citation>Hub1994</citation>:</simpara>
<itemizedlist spacing="compact">
<listitem>
<simpara>Desenvolver um sistema operacional de alta
qualidade para o hardware de computadores populares,
e,</simpara>
</listitem>
<listitem>
<simpara>Tornar o nosso trabalho disponível para todos
sob uma licença liberal.</simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara>O FreeBSD desfruta de uma cultura aberta e
transparente de trabalho. Quase todas as discussões no
projeto ocorrem por e-mail, em <link xlink:href="&a.mailman.listinfo;">listas publicas de
discussão</link>, que também são arquivadas para a
posteridade. As políticas do projeto são <link xlink:href="&url.base;/internal/policies.html">documentadas</link>
e mantidas sob controle de revisão. A participação no
projeto é aberta a todos.</simpara>
</listitem>
</itemizedlist>
<sect2 xml:id="freebsd-org">
<title>Compreendendo a cultura do FreeBSD</title>
<para>Para ser capaz de trabalhar de forma eficaz com o projeto
FreeBSD, você precisa entender a cultura do projeto.</para>
<para>As regras que regem a operação de um projeto voluntário
são diferentes das que regem a operação de uma empresa com
fins lucrativos. Um erro comum que as empresas cometem ao se
aventurar no mundo open-source é o de desvalorizar essas
diferenças.</para>
<formalpara>
<title>Motivação</title>
<para>A maioria das contribuições feitas para o FreeBSD são
feitas voluntariamente, sem que nenhuma recompensa
financeira esteja envolvida. Os fatores que motivam as
pessoas são complexos, e vão desde o puro altruísmo até o
interesse comum em resolver algum tipo de problema que o
FreeBSD esteja tentando resolver. Neste tipo de ambiente,
a <quote>elegância jamais é opcional</quote>
<citation>Nor1993</citation>.</para>
</formalpara>
<formalpara>
<title>Visão de longo prazo</title>
<para>O FreeBSD tem raízes de quase 20 anos para com o
trabalho do Grupo de Pesquisa de Ciências da Computação da
Universidade da Califórnia, Berkeley.<footnote>
<simpara>O <link xlink:href="http://cvsweb.freebsd.org/">repositório
de código fonte</link> do FreeBSD contém a história do
projeto desde a sua concepção, e existem <link xlink:href="http://www.mckusick.com/csrg/">CDROMs
disponíveis</link> que contém o código anterior do
CSRG.</simpara>
</footnote> Alguns dos desenvolvedores originais do CSRG
permanecem associados com o projeto.</para>
</formalpara>
<para>O projeto valoriza perspectivas de longo prazo
<citation>Nor2001</citation>. Uma sigla encontrada com
frequência no projeto é <acronym>DTRT</acronym>, a qual
significa <quote>Faça a Coisa Certa</quote> (<literal>Do The
Right Thing</literal>).</para>
<formalpara>
<title>Processo de Desenvolvimento</title>
<para>Programas de computador são ferramentas de comunicacão:
em um nível os programadores comunicam as suas intenções
usando uma notação precisa para uma ferramenta (um compilador)
que traduz as suas instruções para um código executável. Em
outro nível, a mesma notação é usada para a comunicação das
intenções entre dois programadores.</para>
</formalpara>
<para>Especificações formais e documentos de design raramente
são utilizados no projeto. Código claro e bem escrito,
acompanhado de logs bem escritos para as alterações das
(<xref linkend="fig-change-log"/>), são usados em seu
lugar. O desenvolvimento do FreeBSD acontece por
<quote>consenso áspero e por código sendo executado</quote>
<citation>Carp1996</citation>.</para>
<figure xml:id="fig-change-log">
<title>Um exemplo de entrada no log de alteração</title>
<programlisting>
bde 2005-10-29 16:34:50 UTC
FreeBSD src repository
Modified files:
lib/msun/src e_rem_pio2f.c
Log:
Use double precision to simplify and optimize arg reduction for small
and medium size args too: instead of conditionally subtracting a float
17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always
subtract a double 33+53 bit one. The float version is now closer to
the double version than to old versions of itself &mdash; it uses the same
33+53 bit approximation as the simplest cases in the double version,
and where the float version had to switch to the slow general case at
|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the
double version.
This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and
2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.
Revision Changes Path
1.14 +22 -97 src/lib/msun/src/e_rem_pio2f.c
</programlisting>
</figure>
<simpara>A comunicação entre os programadores é reforçada pelo
uso de um &man.style.9; padrão de codificação, comum entre
eles.</simpara>
<formalpara>
<title>Canais de Comunicação</title>
<para>Os colaboradores do FreeBSD estão espalhados por todo o
mundo. O email (e em menor extensão, o IRC) é o meio de
comunicação preferido no projeto.</para>
</formalpara>
</sect2>
<sect2>
<title>Melhores práticas para colaborar com o projeto
FreeBSD.</title>
<para>Agora iremos examinar algumas das melhores práticas para
se fazer um melhor uso do FreeBSD no desenvolvimento de
produtos.</para>
<variablelist>
<varlistentry>
<term>Se planeje para o longo prazo</term>
<listitem>
<para>Implante processos que o ajudem a monitorar o
desenvolvimento do FreeBSD. Por exemplo:</para>
<formalpara>
<title>Acompanhe o código fonte do FreeBSD</title>
<para>O projeto facilita o espelhamento do seu
repositório CVS usando o <link xlink:href="&url.articles.cvsup-advanced;">CVSup</link>.
Ter o histórico completo do código fonte é útil quando
se está debugando problemas complexos e oferece
informações valiosas sobre as intenções dos
desenvolvedores originais. Utilize um sistema de
controle de código que lhe permita mesclar facilmente
as alterações entre o código original do FreeBSD e o
seu próprio código.</para>
</formalpara>
<para>A <xref linkend="fig-cvs-annotate"/> mostra as
anotações em uma parte do arquivo referenciado pelo log
de alterações da <xref linkend="fig-change-log"/>. A
ascendência de cada linha de código é claramente
visível. Listagens com as anotações mostrando a
história de cada arquivo que faz parte do FreeBSD
estão <link xlink:href="http://cvsweb.freebsd.org/">disponíveis na
web</link>.</para>
<figure xml:id="fig-cvs-annotate">
<title>Código fonte exibindo a listagem de anotações
gerada utilizando o <command>cvs annotate</command>
</title>
<programlisting>
<![CDATA[
#LINE #REV #WHO #DATE #TEXT
62 1.1 (jkh 19-Aug-94): int32_t __ieee754_rem_pio2f(float x, float *y)
63 1.1 (jkh 19-Aug-94): {
64 1.14 (bde 29-Oct-05): double z,w,t,r,fn;
65 1.13 (bde 29-Oct-05): double tx[3];
66 1.14 (bde 29-Oct-05): int32_t e0,i,nx,n,ix,hx;
67 1.1 (jkh 19-Aug-94):
68 1.1 (jkh 19-Aug-94): GET_FLOAT_WORD(hx,x);
69 1.1 (jkh 19-Aug-94): ix = hx&0x7fffffff;
70 1.1 (jkh 19-Aug-94): if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
71 1.1 (jkh 19-Aug-94): {y[0] = x; y[1] = 0; return 0;}
72 1.14 (bde 29-Oct-05): /* 33+53 bit pi is good enough for special and medium size cases */
73 1.2 (bde 07-Apr-95): if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
74 1.14 (bde 29-Oct-05): if(hx>0) {
75 1.15 (bde 06-Nov-05): z = x - pio2;
76 1.15 (bde 06-Nov-05): n = 1;
77 1.15 (bde 06-Nov-05): } else {
78 1.15 (bde 06-Nov-05): z = x + pio2;
79 1.15 (bde 06-Nov-05): n = 3;
80 1.9 (bde 08-Oct-05): }
81 1.15 (bde 06-Nov-05): y[0] = z;
82 1.15 (bde 06-Nov-05): y[1] = z - y[0];
83 1.15 (bde 06-Nov-05): return n;
84 1.15 (bde 06-Nov-05): }
85 1.15 (bde 06-Nov-05): if(ix<0x407b53d1) { /* |x| < 5*pi/4, special case with n=+-2 */
]]>
</programlisting>
</figure>
<formalpara>
<title>Nomeie um guardião</title>
<para>Nomeie um guardião
(<firstterm>gatekeeper</firstterm>) para monitorar o
desenvolvimento do FreeBSD, para manter-se atento a
mudanças que poderiam potencialmente afetar os seus
produtos.</para>
</formalpara>
<formalpara>
<title>Comunique os erros que encontrar de volta para o
projeto</title>
<para>Se você encontrar um bug no código do FreeBSD que
você está utilizando, envie um <link xlink:href="&url.base;/send-pr.html">relatório de
problema</link>. Este procedimento simples irá
ajudar a garantir que você não precisará corrigir o
erro novamente da próxima vez que precisar importar
novamente do código base do FreeBSD.</para>
</formalpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Se alavanque nos esforços de engenharia do FreeBSD
para lançamento de novas versões.</term>
<listitem>
<simpara>Utilize código do ramo de desenvolvimento -STABLE
do FreeBSD. Este ramo de desenvolvimento é formalmente
suportado pelas equipes de engenharia de lançamento e de
segurança, e é formada apenas por código
testado.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Doe código para reduzir seus custos</term>
<listitem>
<simpara>Uma parte significativa dos custos relacionados
ao desenvolvimento de um produto é o de realizar a sua
manutenção. Ao doar partes não criticas do seu código
para o projeto, você se beneficia por ter o seu código
exposto de uma forma ampla, exposição que ele não teria
de outra forma. Esta exposição por sua vez leva
eliminação de um maior numero de bugs e de
vulnerabilidades de segurança, e permite que anomalias
de desempenho sejam identificadas e
corrigidas.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Obtenha suporte efetivo</term>
<listitem>
<simpara>Para produtos com prazos apertados, é recomendado
que você contrate o suporte ou consultoria de um
desenvolvedor ou empresa com experiência em FreeBSD. A
&a.jobs; é um canal de comunicação muito útil para se
encontrar talentos. O projeto FreeBSD mantém uma <link xlink:href="&url.base;/commercial/consult_bycat.html">galeria
de consultores e empresas de consultoria</link> que
trabalham com FreeBSD. O <link xlink:href="http://www.bsdcertification.org/">Grupo de
Certificação BSD</link> oferece certificação para todos
os principais sistemas operacionais derivados do
BSD.</simpara>
<simpara>Para as necessidades menos importantes, você pode
pedir ajuda nas <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">listas
de discussão do projeto</link>. Um guia útil para
seguir quando precisar pedir está listado em
<citation>Ray2004</citation>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Divulgue o seu envolvimento</term>
<listitem>
<simpara>Você não é obrigado a divulgar que faz uso do
FreeBSD, mas ao fazê-lo você estará ajudando ambos os
esforços, o seu e o do projeto.</simpara>
<simpara>Dar visibilidade para a comunidade FreeBSD de que
a sua empresa utiliza o sistema ajuda a melhorar as suas
chances de atrair talentos de alta qualidade. Quanto
maior for a lista de organizações que apoiam o FreeBSD
maior será a presença do sistema na cabeça
(<literal>mind share</literal>) dos desenvolvedores.
Ao contribuir para aumentar o numero de desenvolvedores
interessados no FreeBSD, você estará gerando uma base
saudável para o seu futuro.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Suporte os desenvolvedores do FreeBSD</term>
<listitem>
<simpara>Às vezes, o caminho mais direto para ver uma
funcionalidade que você deseja implementada no FreeBSD é
suportar um desenvolvedor que já esteja olhando um
problema relacionado. A ajuda pode variar de uma doação
de hardware até uma assistência financeira direta. Em
alguns países, as doações para o projeto FreeBSD
usufruem de benefícios fiscais. O projeto possui um
<link xlink:href="&url.base;/donations/">canal de comunicação
dedicado</link> para assuntos relacionados a doações e
para ajudar os doadores. O projeto também mantém uma
página web na qual os desenvolvedores podem <link xlink:href="&url.base;/donations/wantlist.html">listar suas
necessidades</link>.</simpara>
<simpara>Por uma política do projeto, o FreeBSD <link xlink:href="&url.articles.contributors;">reconhece</link>
todas as contribuições recebidas em seu site
web.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 xml:id="conclusion">
<title>Conclusão</title>
<para>O Objetivo do projeto FreeBSD é criar e distribuir o código
fonte de um sistema operacional de alta qualidade. Ao trabalhar
com o projeto FreeBSD você pode reduzir os seus custos de
desenvolvimento e melhorar o tempo necessário para lançar seus
novos produtos no mercado em vários cenários de desenvolvimento
de produtos.</para>
<para>Foram examinadas as características do FreeBSD que o tornam
uma excelente opção na estratégia de produto de uma organização.
Em seguida, abordamos os aspectos predominantes da cultura do
projeto e examinamos formas eficazes de interagir com os seus
desenvolvedores. O artigo finaliza com uma lista das melhores
práticas que podem ajudar na colaboração da iniciativa privada
com o projeto FreeBSD.</para>
</sect1>
<bibliography>
<biblioentry>
<abbrev>Carp1996</abbrev>
<citetitle><link xlink:href="http://www.ietf.org/rfc/rfc1958.txt">The
Architectural Principles of the Internet</link></citetitle>
<author><personname><firstname>B.</firstname><surname>Carpenter</surname></personname><affiliation>
<orgname>The Internet Architecture Board</orgname>
</affiliation></author>
<copyright>
<year>1996</year>
</copyright>
</biblioentry>
<biblioentry xreflabel="Com2004">
<abbrev>Com2004</abbrev>
<citetitle><link xlink:href="http://csdl.computer.org/comp/mags/so/2004/01/s1028.pdf">How
is Open-Source Affecting Software
Development?</link></citetitle>
<authorgroup>
<author><personname><firstname>Diomidis</firstname><surname>Spinellis</surname></personname></author>
<author><personname><firstname>Clemens</firstname><surname>Szyperski</surname></personname></author>
</authorgroup>
<citetitle>IEEE Computer</citetitle>
<copyright>
<year>Jan/Feb 2004</year>
</copyright>
<publisher>
<publishername>IEEE Computer Society</publishername>
</publisher>
</biblioentry>
<biblioentry>
<abbrev>ComGuide</abbrev>
<citetitle><link xlink:href="&url.articles.committers-guide;">Committer's
Guide</link></citetitle>
<authorgroup>
<author><orgname>The FreeBSD Project</orgname></author>
</authorgroup>
<copyright>
<year>2005</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Cov2005</abbrev>
<citetitle><link xlink:href="http://www.coverity.com/news/nf_news_06_27_05_story_9.html">Coverity
study on kernel security holes in Linux and FreeBSD</link></citetitle>
<authorgroup>
<author><orgname>Coverity Inc.</orgname></author>
</authorgroup>
<copyright>
<year>2005</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>GoldGab2005</abbrev> <citetitle><link xlink:href="http://dreamsongs.com/IHE/IHE.html">Innovation Happens
Elsewhere: Open Source as Business Strategy</link></citetitle>
<authorgroup>
<author><personname><firstname>Ron</firstname><surname>Goldman</surname></personname></author>
<author><personname><firstname>Richard</firstname><surname>Gabriel</surname></personname></author>
</authorgroup>
<copyright>
<year>2005</year>
</copyright>
<biblioid class="isbn">ISBN 1558608893</biblioid>
<publisher>
<publishername>Morgan-Kaufmann</publishername>
</publisher>
</biblioentry>
<biblioentry xreflabel="Hub1994">
<!-- XXX Get the date of this article right -->
<abbrev>Hub1994</abbrev>
<citetitle><link xlink:href="&url.articles.contributing;">Contributing
to the FreeBSD Project</link></citetitle>
<author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname></author>
<copyright>
<year>1994&mdash;2005</year>
</copyright>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
</biblioentry>
<biblioentry>
<abbrev>McKu1999</abbrev>
<citetitle><link xlink:href="http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html">Soft
Updates: A Technique for Eliminating Most Synchronous Writes
in the Fast Filesystem</link></citetitle>
<authorgroup>
<author><personname><firstname>Kirk</firstname><surname>McKusick</surname></personname></author>
<author><personname><firstname>Gregory</firstname><surname>Ganger</surname></personname></author>
</authorgroup>
<confgroup>
<conftitle>USENIX Annual Technical Conference</conftitle>
</confgroup>
<copyright>
<year>1999</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>McKu1999-1</abbrev>
<citetitle><link xlink:href="http://www.oreilly.com/catalog/opensources/book/kirkmck.html">Twenty Years of Berkeley Unix: From AT&amp;T-Owned to
Freely Redistributable</link></citetitle>
<authorgroup>
<author><personname><firstname>Marshall Kirk</firstname><surname>McKusick</surname></personname></author>
</authorgroup>
<citetitle><link xlink:href="http://www.oreilly.com/catalog/opensources/book/toc.html">Open
Sources: Voices from the Open Source
Revolution</link></citetitle>
<biblioid class="isbn">ISBN 1-56592-582-3</biblioid>
<publisher>
<publishername>O'Reilly Inc.</publishername>
</publisher>
<copyright>
<year>1993</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Mon2005</abbrev>
<citetitle><link xlink:href="&url.articles.bsdl-gpl;/article.html">Why you should
use a BSD style license for your Open Source
Project</link></citetitle>
<author><personname><firstname>Bruce</firstname><surname>Montague</surname></personname></author>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
<copyright>
<year>2005</year>
</copyright>
</biblioentry>
<biblioentry xreflabel="Nik2005">
<abbrev>Nik2005</abbrev>
<citetitle><link xlink:href="&url.books.dev-model;/book.html">A
project model for the FreeBSD Project</link></citetitle>
<author><personname><firstname>Niklas</firstname><surname>Saers</surname></personname></author>
<copyright>
<year>2005</year>
</copyright>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
</biblioentry>
<biblioentry xreflabel="Nor1993">
<abbrev>Nor1993</abbrev>
<citetitle><link xlink:href="http://www.norvig.com/luv-slides.ps">Tutorial
on Good Lisp Programming Style</link></citetitle>
<authorgroup>
<author><personname><firstname>Peter</firstname><surname>Norvig</surname></personname></author>
<author><personname><firstname>Kent</firstname><surname>Pitman</surname></personname></author>
</authorgroup>
<copyright>
<year>1993</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Nor2001</abbrev>
<citetitle><link xlink:href="http://www.norvig.com/21-days.html">Teach
Yourself Programming in Ten Years</link></citetitle>
<author><personname><firstname>Peter</firstname><surname>Norvig</surname></personname></author>
<copyright>
<year>2001</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Ray2004</abbrev>
<citetitle><link xlink:href="http://www.catb.org/~esr/faqs/smart-questions.html">How
to ask questions the smart way</link></citetitle>
<authorgroup>
<author><personname><firstname>Eric Steven</firstname><surname>Raymond</surname></personname></author>
</authorgroup>
<copyright>
<year>2004</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>RelEngDoc</abbrev>
<citetitle><link xlink:href="&url.articles.releng;">FreeBSD Release
Engineering</link></citetitle>
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname></author>
<copyright>
<year>2001</year>
</copyright>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
</biblioentry>
</bibliography>
</article>