Projetos open-source como o FreeBSD oferecem códigos finalizados de altíssima qualidade [Cov2005]. Estudos anteriores examinaram o efeito da disponibilidade do código fonte no desenvolvimento de software [Com2004].
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 processo contínuo. Os melhores projetos para se colaborar são os que estão 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 indivíduos com acesso de escrita aos repositórios do projeto.
Os objetivos do projeto FreeBSD são [Hub1994]:
O FreeBSD desfruta de uma cultura aberta e transparente de trabalho. Quase todas as discussões no projeto ocorrem por e-mail, em listas publicas de discussão, que também são arquivadas para a posteridade. As políticas do projeto são documentadas e mantidas sob controle de revisão. A participação no projeto é aberta a todos.
Para ser capaz de trabalhar de forma eficaz com o projeto FreeBSD, você precisa entender a cultura do projeto.
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.
Motivação. 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 “elegância jamais é opcional” [Nor1993].
Visão de longo prazo. 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.[1] Alguns dos desenvolvedores originais do CSRG permanecem associados com o projeto.
O projeto valoriza perspectivas de longo prazo [Nor2001]. Uma sigla encontrada com frequência no projeto é DTRT, a qual significa “Faça a Coisa Certa” (Do The Right Thing).
Processo de Desenvolvimento. 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.
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 (Figura 3), são usados em seu lugar. O desenvolvimento do FreeBSD acontece por “consenso áspero e por código sendo executado” [Carp1996].
Figura 3. Um exemplo de entrada no log de alteração
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 comunicação entre os programadores é reforçada pelo uso de um style(9) padrão de codificação, comum entre eles.
Canais de Comunicação. 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.
Agora iremos examinar algumas das melhores práticas para se fazer um melhor uso do FreeBSD no desenvolvimento de produtos.
Implante processos que o ajudem a monitorar o desenvolvimento do FreeBSD. Por exemplo:
Acompanhe o código fonte do FreeBSD. O projeto facilita o espelhamento do seu repositório CVS usando o CVSup. 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.
A Figura 4 mostra as anotações em uma parte do arquivo referenciado pelo log de alterações da Figura 3. 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 disponíveis na web.
Figura 4. Código fonte exibindo a listagem de anotações 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 guardião. Nomeie um guardião (gatekeeper) para monitorar o desenvolvimento do FreeBSD, para manter-se atento a mudanças que poderiam potencialmente afetar os seus produtos.
Comunique os erros que encontrar de volta para o projeto. Se você encontrar um bug no código do FreeBSD que você está utilizando, envie um relatório de problema. 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.
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.
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.
Para produtos com prazos apertados, é recomendado que você contrate o suporte ou consultoria de um desenvolvedor ou empresa com experiência em FreeBSD. A lista de discussão sobre empregos relacionados ao FreeBSD é um canal de comunicação muito útil para se encontrar talentos. O projeto FreeBSD mantém uma galeria de consultores e empresas de consultoria que trabalham com FreeBSD. O Grupo de Certificação BSD oferece certificação para todos os principais sistemas operacionais derivados do BSD.
Para as necessidades menos importantes, você pode pedir ajuda nas listas de discussão do projeto. Um guia útil para seguir quando precisar pedir está listado em [Ray2004].
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.
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 (mind share) dos desenvolvedores. Ao contribuir para aumentar o numero de desenvolvedores interessados no FreeBSD, você estará gerando uma base saudável para o seu futuro.
À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 canal de comunicação dedicado 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 listar suas necessidades.
Por uma política do projeto, o FreeBSD reconhece todas as contribuições recebidas em seu site web.
[1] |
O repositório de código fonte do FreeBSD contém a história do projeto desde a sua concepção, e existem CDROMs disponíveis que contém o código anterior do CSRG. |
Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.