                   Construindo Produtos com o FreeBSD

  Joseph Koshy

   The FreeBSD Project

   <jkoshy@FreeBSD.org>

   $FreeBSD:
   release/8.4.0/pt_BR.ISO8859-1/articles/building-products/article.xml
   39632 2012-10-01 11:56:00Z gabor $

   $FreeBSD:
   release/8.4.0/pt_BR.ISO8859-1/articles/building-products/article.xml
   39632 2012-10-01 11:56:00Z gabor $

   FreeBSD is a registered trademark of the FreeBSD Foundation.

   Many of the designations used by manufacturers and sellers to
   distinguish their products are claimed as trademarks. Where those
   designations appear in this document, and the FreeBSD Project was
   aware of the trademark claim, the designations have been followed
   by the "(TM)" or the "(R)" symbol.

   Sumario

   O projeto FreeBSD e um projeto voluntario e colaborativo de ambito
   mundial, o qual desenvolve um sistema operacional de alta
   qualidade, capaz de ser utilizado em diferentes arquiteturas
   computacionais. O projeto FreeBSD distribui o codigo fonte do seu
   produto sob uma licenc,a liberal, com a intenc,ao de incentivar o
   uso de seu codigo. Colaborar com o projeto FreeBSD pode ajudar sua
   empresa a reduzir o tempo necessario para colocar um produto no
   mercado, a reduzir seus custos de engenharia e a melhorar
   qualidade de seus produtos.

   Este artigo analisa as questoes envolvidas no uso do codigo do
   FreeBSD em appliances e softwares. Ele tambem destaca as
   caracteristicas do FreeBSD, que o tornam uma excelente base para o
   desenvolvimento de produtos. O artigo conclui sugerindo um
   conjunto das "melhores praticas" de organizac,oes que colaboram
   com o projeto FreeBSD.

     --------------------------------------------------------------

1 Introduc,ao

   Atualmente o FreeBSD e bem conhecido como um sistema operacional
   de alto desempenho para servidores. Ele esta instalado em milhoes
   de servidores web e em outros hosts conectados diretamente a
   internet em todo o mundo. O codigo do FreeBSD tambem e parte
   integrante de muitos produtos, que vao desde aparelhos como
   roteadores de rede, firewalls e dispositivos de armazenamento, ate
   computadores pessoais. Partes do FreeBSD tambem tem sido
   utilizadas em softwares comerciais (consulte Sec,ao 2).

   Neste artigo, vamos olhar para o Projeto FreeBSD como um recurso
   de engenharia de software - como um conjunto de blocos de
   construc,ao e de processos os quais voce pode utilizar para
   construir produtos.

   Embora o codigo fonte do FreeBSD seja distribuido gratuitamente ao
   publico, para desfrutar plenamente dos beneficios do trabalho do
   projeto, as organizac,oes precisam colaborar com o mesmo. Nas
   sec,oes subsequentes do presente artigo discutiremos formas
   eficazes de colaborar com o projeto, bem como os perigos que
   precisam ser evitados ao faze-lo.

   Advertencia ao Leitor. O autor considera que as caracteristicas 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 praticas e
   processos utilizados por comunidades de codigo aberto podem mudar
   ao longo do tempo, e que portanto as informac,oes deste artigo
   devem ser consideradas apenas como indicativas e nao como verdades
   absolutas.

     --------------------------------------------------------------

  1.1 Publico Alvo

   Este documento tem como publico alvo os seguintes grupos de
   pessoas:

     * Tomadores de decisao em empresas que estejam em busca de meios
       para melhorar a qualidade de seus produtos, de reduzir o tempo
       necessario para lanc,a-los no mercado e de reduzir seus custos
       de engenharia no longo prazo.

     * Consultores de tecnologia procurando as melhores praticas para
       alavancar projetos de "codigo aberto".

     * Observadores da industria interessados em compreender a
       dinamica dos projetos de "codigo aberto".

     * Desenvolvedores de software que utilizam o FreeBSD e que
       buscam formas de contribuir com o projeto.

     --------------------------------------------------------------

  1.2 Objetivos do artigo

   Apos a leitura deste artigo, voce deve ter:

     * Uma melhor compreensao dos objetivos do Projeto FreeBSD e de
       sua estrutura organizacional.

     * Uma visao geral das tecnologias disponiveis no projeto.

     * Uma melhor compreensao do modelo de desenvolvimento adotado
       pelo Projeto FreeBSD e dos processos de engenharia envolvidos
       no lanc,amento de uma nova versao do sistema.

     * Uma compreensao de como os processos convencionais de
       desenvolvimento de software em uma empresa diferem dos
       processos utilizados no projeto FreeBSD.

     * Consciencia dos canais de comunicac,ao utilizados pelo projeto
       e do nivel de transparencia que voce pode esperar.

     * Consciencia das melhores formas de se trabalhar com o projeto
       - a melhor forma de reduzir os custos de engenharia, de
       reduzir o tempo necessario para levar seu produto ao mercado,
       de gerir vulnerabilidades de seguranc,a, e de preservar a
       compatibilidade futura com o seu produto a medida que o
       Projeto FreeBSD evolui.

     --------------------------------------------------------------

  1.3 Estrutura do Artigo

   O restante deste artigo esta estruturado da seguinte forma:

     * A Sec,ao 2 apresenta o projeto FreeBSD, explora sua estrutura
       organizacional, as principais tecnologias e processos de
       engenharia envolvidos no lanc,amento de uma nova versao do
       sistema.

     * A Sec,ao 3 descreve formas de colaborar com o Projeto FreeBSD.
       Esta sec,ao tambem aborda as armadilhas que sao geralmente
       encontradas por empresas que trabalham com projetos
       voluntarios como o FreeBSD.

     * A Sec,ao 4 conclui o artigo.

     --------------------------------------------------------------

2 O FreeBSD como um conjunto de blocos de construc,ao

   O FreeBSD fornece uma excelente base sobre a qual podemos
   construir produtos:

     * O codigo fonte do FreeBSD e distribuido sob uma licenc,a BSD
       liberal, o que facilita sua adoc,ao em produtos comerciais com
       um minimo de preocupac,oes. [Mon2005]

     * O Projeto FreeBSD possui excelentes praticas de engenharia as
       quais podem ser aproveitadas.

     * O projeto oferece uma transparencia excepcional em seu
       funcionamento, permitindo que as empresas que utilizam o seu
       codigo se planejem de forma eficaz para o futuro.

     * A cultura do projeto FreeBSD, herdada do Grupo de Pesquisa de
       Ciencias da Computac,ao da Universidade da California em
       Berkeley [McKu1999-1], fomenta trabalhos de alta qualidade.
       Algumas funcionalidades do FreeBSD definem o estado da arte.

   O [GoldGab2005] analisa em maior profundidade os motivos
   comerciais para se utilizar codigo fonte aberto. Para as
   organizac,oes, os beneficios do uso de componentes do FreeBSD em
   seus produtos incluem a reduc,ao do tempo necessario para lanc,ar
   novos produtos no mercado, menores custos e menores riscos de
   desenvolvimento.

     --------------------------------------------------------------

  2.1 Construindo com o FreeBSD

   Aqui estao alguns exemplos de como as empresas estao utilizando o
   FreeBSD:

     * Como um provedor (upstream source) de codigos testados para
       bibliotecas e utilitarios.

       Sendo o downstream do projeto, as organizac,oes se aproveitam
       das novas funcionalidades, das correc,oes de bugs e dos testes
       que o codigo fonte do projeto FreeBSD recebe.

     * Como sistema operacional integrado (por exemplo, em um
       roteador OEM e ou em um dispositivo de firewall). Neste
       modelo, as empresas utilizam uma versao customizada do kernel
       e do conjunto de aplicativos do FreeBSD, juntamente com uma
       camada proprietaria de gestao para os seus dispositivos. Os
       fabricantes de equipamentos originais (OEMs) se beneficiam da
       adic,ao por parte do FreeBSD de suporte a novos componentes de
       hardware, bem como se beneficia dos testes que o sistema base
       recebe.

       O FreeBSD e distribuido com um ambiente de desenvolvimento
       auto-hospedado o qual permite a facil criac,ao de tais
       configurac,oes.

     * Como um ambiente Unix compativel para as func,oes de
       gerenciamento em dispositivos de armazenamento high-end e em
       dispositivos de rede, executando em uma lamina separada.

       O FreeBSD fornece ferramentas para a criac,ao de imagens do
       sistema operacional dedicadas a executar uma func,ao
       especifica. Sua implementac,ao da API unix BSD e madura e
       testada. O FreeBSD tambem pode proporcionar um ambiente de
       desenvolvimento cruzado estavel para os outros componentes de
       dispositivos topo de linha.

     * Como um veiculo para obter suporte e testes amplos de uma
       equipe mundial de desenvolvedores para a sua "propriedade
       intelectual" nao-critica.

       Neste modelo, as organizac,oes contribuem com frameworks de
       infra-estrutura uteis ao projeto FreeBSD (por exemplo, veja o
       netgraph(3)). A ampla exposic,ao que o codigo obtem ajuda na
       rapida identificac,ao de bugs e de problemas de desempenho. O
       envolvimento de desenvolvedores de alta qualidade tambem
       resulta no desenvolvimento de extensoes uteis para a
       infra-estrutura do sistema, e das quais a empresa que esta
       contribuindo com o projeto tambem se beneficia.

     * Como um ambiente de desenvolvimento apoiando desenvolvimento
       cruzado para sistemas operacionais embarcados como RTEMS e o
       eCOS.

       Existem muitos ambientes de desenvolvimento completos na forte
       colec,ao de mais de 24,000 aplicativos portados e empacotados
       para o FreeBSD.

     * Como forma de suportar uma API estilo Unix em um sistema
       operacional que de outro modo seria proprietario, aumentando a
       sua palatabilidade para os desenvolvedores de aplicativos.

       Aqui as partes do kernel do FreeBSD e as aplicac,oes sao
       "portadas" para serem executadas juntamente com outras tarefas
       no sistema operacional proprietario. A disponibilidade de uma
       implementac,ao estavel e bem testada da API Unix(TM) pode
       reduzir o esforc,o necessario para portar aplicac,oes
       populares para um sistema operacional proprietario. Como o
       FreeBSD e distribuido acompanhado de uma documentac,ao de alta
       qualidade sobre a sua estrutura interna, e possui processos
       eficazes de engenharia para gerenciamento de vulnerabilidades
       e para lanc,amento de novas versoes, os custos para mante-lo
       atualizado sao baixos.

     --------------------------------------------------------------

  2.2 Tecnologias

   Existe um grande numero de tecnologias suportadas pelo projeto
   FreeBSD. Abaixo voce encontra uma lista com alguma delas:

     * Um sistema completo que pode compilar a si mesmo de forma
       cruzada para as seguintes arquiteturas: alpha (ate o FreeBSD
       versao 6.X), amd64, ia64, i386, sparc64, powerpc (veja
       build(7)).

     * Suporte para as seguintes tecnologias, protocolos e padroes:
       ATA, ATAPI, ATM, Bluetooth(TM), CAM, CardBus(TM), DHCP, DNS,
       EISA(TM), Ethernet(TM), FDDI, Fibre Channel, GPIB, IEEE 1394,
       IPv4, IPv6, IPSEC, IPX(TM), ISDN, MAC, NIS, NFS, OpenSSH,
       OPIE, PAM, PCI(TM), PCMCIA, POSIX(TM), PnP, RAID, RPC, SATA,
       SCSI, SMB, TCP, USB, VESA, VLAN, VLB, WebNFS(TM).

     * Um kernel modular capaz de multiprocessamento simetrico, com
       modulos de kernel carregaveis e um sistema de configurac,ao
       flexivel e facil de usar.

     * Suporta a emulac,ao de binarios do Linux e do SVR4 com
       velocidades proximas as que voce obtem executando os
       aplicativos de forma nativa. Suporte para os binarios dos
       drivers de rede do Windows(TM) (NDIS).

     * Bibliotecas para muitas tarefas de programac,ao: arquivos,
       suporte a FTP e HTTP, suporte a threads, alem de um ambiente
       completo de programac,ao POSIX like.

     * Funcionalidades avanc,adas de seguranc,a: Controle de Acesso
       Obrigatorio (mac(9)), jails (jail(2)), ACLs,e suporte no
       kernel a dispositivos de criptografia.

     * Funcionalidades avanc,adas de rede: firewalls, gerenciamento
       de QoS, rede TCP/IP de alta performance com suporte a muitos
       recursos avanc,ados.

       O framework Netgraph (netgraph(4)) presente no kernel do
       FreeBSD, permite que os modulos de rede possam ser conectados
       entre si de formas flexiveis.

     * Suporte para tecnologias avanc,adas de armazenamento Fibre
       Channel, SCSI, RAID por software e hardware, ATA e SATA.

       O FreeBSD suporta um grande numero de sistemas de arquivos, e
       o seu sistema de arquivos nativo UFS2 suporta soft updates,
       snapshots e sistemas de arquivos de tamanho muito grandes (ate
       16 TB por sistema de arquivos) [McKu1999].

       O framework GEOM (geom(4)) presente no kernel do FreeBSD
       permite que modulos de armazenamento sejam compostos de forma
       flexivel.

     * Mais de 24,000 aplicativos portados, tanto comerciais quanto
       de codigo aberto, gerenciados atraves da colec,ao de ports do
       FreeBSD.

     --------------------------------------------------------------

  2.3 Estrutura Organizacional

   A estrutura organizacional do FreeBSD nao e hierarquica

   Existem basicamente dois tipos de colaboradores no projeto
   FreeBSD, os usuarios em geral e os desenvolvedores com acesso de
   escrita (conhecidos como committers no jargao) ao repositorio de
   codigo fonte.

   Existem muitos milhares de colaboradores no primeiro grupo, a
   grande maioria das contribuic,oes para o FreeBSD vem de individuos
   desse grupo; A permissao de commit (acesso de escrita) no
   repositorio e concedida a pessoas que contribuem de forma
   consistente para o projeto. O direito de commit vem acompanhado de
   responsabilidades adicionais, e para facilitar o aprendizado das
   mesmas, um mentor e atribuido a todos os novos committers.

   Figura 1. Organizac,ao do FreeBSD

   A resoluc,ao de conflitos e realizada por um "Core Team" de 9
   pessoas, o qual e eleito a partir do grupo de committers.

   O FreeBSD nao tem committers corporativos. Os committers sao
   obrigados a assumir de forma individual a responsabilidade pelas
   mudanc,as que introduzem no codigo. O FreeBSD Committer's Guide
   [ComGuide] documenta as regras e responsabilidades que se aplicam
   aos committers.

   O modelo do projeto FreeBSD e examinado em detalhes no [Nik2005].

     --------------------------------------------------------------

  2.4 Processos de Engenharia para liberac,ao de novas versoes do
  FreeBSD.

   O processo de engenharia para a liberac,ao de uma nova versao do
   FreeBSD desempenha um papel importante para assegurar que as suas
   novas versoes sejam de alta qualidade. Em qualquer ponto do tempo,
   os voluntarios do FreeBSD suportam multiplas versoes do codigo
   sistema (Figura 2):

     * As novas funcionalidades e os codigos disruptivos entram no
       ramo de desenvolvimento, tambem conhecido como ramo -CURRENT.

     * O ramo -STABLE contem linhas de codigo que sao ramificadas a
       partir do HEAD em intervalos regulares. Apenas codigo
       devidamente testado e permitido no ramo -STABLE. Novas
       funcionalidades sao permitidas apos terem sido testadas e
       estabilizadas no ramo -CURRENT.

     * O ramo -RELEASE e mantido pela equipe de seguranc,a do
       FreeBSD. Somente correc,oes de bugs criticos sao permitidos no
       ramo -RELEASE.

   Figura 2. Ramos de versoes do FreeBSD

   As linhas de codigo sao mantidas vivas enquanto houver interesse
   dos usuarios e dos desenvolvedores nelas.

   As arquiteturas de maquina estao agrupadas em "tiers"; As
   arquiteturas Tier 1 sao totalmente suportadas pelas equipes de
   engenharia de lanc,amento e de seguranc,a, as arquiteturas Tier 2
   sao suportadas em regime de "melhores esforc,os", e as
   arquiteturas experimentais compreendem o Tier 3. A lista das
   arquiteturas suportadas e parte da colec,ao de documentos do
   FreeBSD.

   A equipe de engenharia de lanc,amentos publica um road map para as
   versoes futuras do FreeBSD no web site do projeto. As datas
   indicadas no road map nao sao prazos; As novas versoes do FreeBSD
   sao liberadas apenas quando o seu codigo e documentac,ao estao
   prontos.

   O processo de engenharia para a liberac,ao de novas versoes do
   FreeBSD e descrito em detalhes no [RelEngDoc].

     --------------------------------------------------------------

3 Colaborando com o FreeBSD

   Projetos open-source como o FreeBSD oferecem codigos finalizados
   de altissima qualidade [Cov2005]. Estudos anteriores examinaram o
   efeito da disponibilidade do codigo fonte no desenvolvimento de
   software [Com2004].

   Embora o acesso a um codigo fonte de qualidade possa reduzir o
   custo inicial de desenvolvimento, a longo prazo, os custos com o
   gerenciamento de mudanc,as comec,am a dominar. A medida que os
   ambientes computacionais mudam ao longo dos anos e novas
   vulnerabilidades de seguranc,a sao descobertas, o seu produto
   tambem precisara mudar e se adaptar. O uso de codigo open-source
   nao deve ser encarado como uma atividade pontual, mas sim como um
   processo continuo. Os melhores projetos para se colaborar sao os
   que estao vivos, ou seja, aqueles com uma comunidade ativa, que
   tenha objetivos claros e que possua um estilo de trabalho
   transparente.

     * 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
       individuos com acesso de escrita aos repositorios do projeto.

     * Os objetivos do projeto FreeBSD sao [Hub1994]:

          * Desenvolver um sistema operacional de alta qualidade para
            o hardware de computadores populares, e,
          * Tornar o nosso trabalho disponivel para todos sob uma
            licenc,a liberal.
     * O FreeBSD desfruta de uma cultura aberta e transparente de
       trabalho. Quase todas as discussoes no projeto ocorrem por
       e-mail, em listas publicas de discussao, que tambem sao
       arquivadas para a posteridade. As politicas do projeto sao
       documentadas e mantidas sob controle de revisao. A
       participac,ao no projeto e aberta a todos.

     --------------------------------------------------------------

  3.1 Compreendendo a cultura do FreeBSD

   Para ser capaz de trabalhar de forma eficaz com o projeto FreeBSD,
   voce precisa entender a cultura do projeto.

   As regras que regem a operac,ao de um projeto voluntario sao
   diferentes das que regem a operac,ao de uma empresa com fins
   lucrativos. Um erro comum que as empresas cometem ao se aventurar
   no mundo open-source e o de desvalorizar essas diferenc,as.

   Motivac,ao. A maioria das contribuic,oes feitas para o FreeBSD sao
   feitas voluntariamente, sem que nenhuma recompensa financeira
   esteja envolvida. Os fatores que motivam as pessoas sao complexos,
   e vao desde o puro altruismo ate o interesse comum em resolver
   algum tipo de problema que o FreeBSD esteja tentando resolver.
   Neste tipo de ambiente, a "elegancia jamais e opcional" [Nor1993].

   Visao de longo prazo. O FreeBSD tem raizes de quase 20 anos para
   com o trabalho do Grupo de Pesquisa de Ciencias da Computac,ao da
   Universidade da California, Berkeley.[1] Alguns dos
   desenvolvedores originais do CSRG permanecem associados com o
   projeto.

   O projeto valoriza perspectivas de longo prazo [Nor2001]. Uma
   sigla encontrada com frequencia no projeto e DTRT, a qual
   significa "Fac,a a Coisa Certa" (Do The Right Thing).

   Processo de Desenvolvimento. Programas de computador sao
   ferramentas de comunicacao: em um nivel os programadores comunicam
   as suas intenc,oes usando uma notac,ao precisa para uma ferramenta
   (um compilador) que traduz as suas instruc,oes para um codigo
   executavel. Em outro nivel, a mesma notac,ao e usada para a
   comunicac,ao das intenc,oes entre dois programadores.

   Especificac,oes formais e documentos de design raramente sao
   utilizados no projeto. Codigo claro e bem escrito, acompanhado de
   logs bem escritos para as alterac,oes das (Figura 3), sao usados
   em seu lugar. O desenvolvimento do FreeBSD acontece por "consenso
   aspero e por codigo sendo executado" [Carp1996].

   Figura 3. Um exemplo de entrada no log de alterac,ao

 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 - 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
        

   A comunicac,ao entre os programadores e reforc,ada pelo uso de um
   style(9) padrao de codificac,ao, comum entre eles.

   Canais de Comunicac,ao. Os colaboradores do FreeBSD estao
   espalhados por todo o mundo. O email (e em menor extensao, o IRC)
   e o meio de comunicac,ao preferido no projeto.

     --------------------------------------------------------------

  3.2 Melhores praticas para colaborar com o projeto FreeBSD.

   Agora iremos examinar algumas das melhores praticas para se fazer
   um melhor uso do FreeBSD no desenvolvimento de produtos.

   Se planeje para o longo prazo

           Implante processos que o ajudem a monitorar o
           desenvolvimento do FreeBSD. Por exemplo:

           Acompanhe o codigo fonte do FreeBSD. O projeto facilita o
           espelhamento do seu repositorio CVS usando o CVSup. Ter o
           historico completo do codigo fonte e util quando se esta
           debugando problemas complexos e oferece informac,oes
           valiosas sobre as intenc,oes dos desenvolvedores
           originais. Utilize um sistema de controle de codigo que
           lhe permita mesclar facilmente as alterac,oes entre o
           codigo original do FreeBSD e o seu proprio codigo.

           A Figura 4 mostra as anotac,oes em uma parte do arquivo
           referenciado pelo log de alterac,oes da Figura 3. A
           ascendencia de cada linha de codigo e claramente visivel.
           Listagens com as anotac,oes mostrando a historia de cada
           arquivo que faz parte do FreeBSD estao disponiveis na web.

           Figura 4. Codigo fonte exibindo a listagem de anotac,oes
           gerada utilizando o cvs annotate

 #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 */

              

           Nomeie um guardiao. Nomeie um guardiao (gatekeeper) para
           monitorar o desenvolvimento do FreeBSD, para manter-se
           atento a mudanc,as que poderiam potencialmente afetar os
           seus produtos.

           Comunique os erros que encontrar de volta para o projeto.
           Se voce encontrar um bug no codigo do FreeBSD que voce
           esta utilizando, envie um relatorio de problema. Este
           procedimento simples ira ajudar a garantir que voce nao
           precisara corrigir o erro novamente da proxima vez que
           precisar importar novamente do codigo base do FreeBSD.

   Se alavanque nos esforc,os de engenharia do FreeBSD para
   lanc,amento de novas versoes.

           Utilize codigo do ramo de desenvolvimento -STABLE do
           FreeBSD. Este ramo de desenvolvimento e formalmente
           suportado pelas equipes de engenharia de lanc,amento e de
           seguranc,a, e e formada apenas por codigo testado.

   Doe codigo para reduzir seus custos

           Uma parte significativa dos custos relacionados ao
           desenvolvimento de um produto e o de realizar a sua
           manutenc,ao. Ao doar partes nao criticas do seu codigo
           para o projeto, voce se beneficia por ter o seu codigo
           exposto de uma forma ampla, exposic,ao que ele nao teria
           de outra forma. Esta exposic,ao por sua vez leva
           eliminac,ao de um maior numero de bugs e de
           vulnerabilidades de seguranc,a, e permite que anomalias de
           desempenho sejam identificadas e corrigidas.

   Obtenha suporte efetivo

           Para produtos com prazos apertados, e recomendado que voce
           contrate o suporte ou consultoria de um desenvolvedor ou
           empresa com experiencia em FreeBSD. A lista de discussao
           sobre empregos relacionados ao FreeBSD e um canal de
           comunicac,ao muito util para se encontrar talentos. O
           projeto FreeBSD mantem uma galeria de consultores e
           empresas de consultoria que trabalham com FreeBSD. O Grupo
           de Certificac,ao BSD oferece certificac,ao para todos os
           principais sistemas operacionais derivados do BSD.

           Para as necessidades menos importantes, voce pode pedir
           ajuda nas listas de discussao do projeto. Um guia util
           para seguir quando precisar pedir esta listado em
           [Ray2004].

   Divulgue o seu envolvimento

           Voce nao e obrigado a divulgar que faz uso do FreeBSD, mas
           ao faze-lo voce estara ajudando ambos os esforc,os, o seu
           e o do projeto.

           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 organizac,oes que apoiam o FreeBSD maior sera a
           presenc,a do sistema na cabec,a (mind share) dos
           desenvolvedores. Ao contribuir para aumentar o numero de
           desenvolvedores interessados no FreeBSD, voce estara
           gerando uma base saudavel para o seu futuro.

   Suporte os desenvolvedores do FreeBSD

           As vezes, o caminho mais direto para ver uma
           funcionalidade que voce deseja implementada no FreeBSD e
           suportar um desenvolvedor que ja esteja olhando um
           problema relacionado. A ajuda pode variar de uma doac,ao
           de hardware ate uma assistencia financeira direta. Em
           alguns paises, as doac,oes para o projeto FreeBSD usufruem
           de beneficios fiscais. O projeto possui um canal de
           comunicac,ao dedicado para assuntos relacionados a
           doac,oes e para ajudar os doadores. O projeto tambem
           mantem uma pagina web na qual os desenvolvedores podem
           listar suas necessidades.

           Por uma politica do projeto, o FreeBSD reconhece todas as
           contribuic,oes recebidas em seu site web.

     --------------------------------------------------------------

4 Conclusao

   O Objetivo do projeto FreeBSD e criar e distribuir o codigo fonte
   de um sistema operacional de alta qualidade. Ao trabalhar com o
   projeto FreeBSD voce pode reduzir os seus custos de
   desenvolvimento e melhorar o tempo necessario para lanc,ar seus
   novos produtos no mercado em varios cenarios de desenvolvimento de
   produtos.

   Foram examinadas as caracteristicas do FreeBSD que o tornam uma
   excelente opc,ao na estrategia de produto de uma organizac,ao. 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
   praticas que podem ajudar na colaborac,ao da iniciativa privada
   com o projeto FreeBSD.

     --------------------------------------------------------------

                              Bibliografia

   [Carp1996] The Architectural Principles of the Internet, B.
   Carpenter, 1996.

   [Com2004] How is Open-Source Affecting Software Development?,
   Diomidis Spinellis e Clemens Szyperski, IEEE Computer, Jan/Feb
   2004, IEEE Computer Society.

   [ComGuide] Committer's Guide, The FreeBSD Project, 2005.

   [Cov2005] Coverity study on kernel security holes in Linux and
   FreeBSD, Coverity Inc., 2005.

   [GoldGab2005] Innovation Happens Elsewhere: Open Source as
   Business Strategy, Ron Goldman e Richard Gabriel, 2005, ISBN
   1558608893, Morgan-Kaufmann.

   [Hub1994] Contributing to the FreeBSD Project, Jordan Hubbard,
   1994-2005, The FreeBSD Project.

   [McKu1999] Soft Updates: A Technique for Eliminating Most
   Synchronous Writes in the Fast Filesystem, Kirk McKusick e Gregory
   Ganger, USENIX Annual Technical Conference, 1999.

   [McKu1999-1] Twenty Years of Berkeley Unix: From AT&T-Owned to
   Freely Redistributable, Marshall Kirk McKusick, Open Sources:
   Voices from the Open Source Revolution, ISBN 1-56592-582-3,
   O'Reilly Inc., 1993.

   [Mon2005] Why you should use a BSD style license for your Open
   Source Project, Bruce Montague, The FreeBSD Project, 2005.

   [Nik2005] A project model for the FreeBSD Project, Niklas Saers,
   2005, The FreeBSD Project.

   [Nor1993] Tutorial on Good Lisp Programming Style, Peter Norvig e
   Kent Pitman, 1993.

   [Nor2001] Teach Yourself Programming in Ten Years, Peter Norvig,
   2001.

   [Ray2004] How to ask questions the smart way, Eric Steven Raymond,
   2004.

   [RelEngDoc] FreeBSD Release Engineering, Murray Stokely, 2001, The
   FreeBSD Project.

  Notas

   [1] O repositorio de codigo fonte do FreeBSD contem a historia do  
       projeto desde a sua concepc,ao, e existem CDROMs disponiveis   
       que contem o codigo anterior do CSRG.                          

     --------------------------------------------------------------

            Este, e outros documentos, podem ser obtidos em
                ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

  Para perguntas sobre FreeBSD, leia a documentac,ao antes de contatar
                        <questions@FreeBSD.org>.
       Para perguntas sobre esta documentac,ao, envie e-mail para
                           <doc@FreeBSD.org>.
