SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Aspectos do Trabalho Cooperativo no
                               Desenvolvimento de Software Livre

                                                    Marcelo Sávio
                                                      IT Architect
                                           http://www.linkedin.com/in/msavio
                                               http://msavio.myplaxo.com/

                                           Rio de Janeiro - Janeiro de 2007



         Resumo. Software livre é todo software cujo código fonte está disponibilizado publicamente, e
         seu conteúdo pode ser livremente modificado e redistribuído (e não sendo permitida a
         apropriação desse código). Uma conseqüência indireta desta liberdade é o aparecimento de
         comunidades de desenvolvimento que trabalham de forma descentralizada, através da Internet,
         desenvolvendo e mantendo os diferentes projetos de software livre. Essas comunidades,
         que a primeira vista parecem estar desorganizadas, produzem software de qualidade, com
         alta produtividade e satisfação entre os seus desenvolvedores e usuários. O objetivo deste
         artigo é verificar os aspectos do Trabalho Cooperativo Suportado por Computador, CSCW
         (Computer Supported Cooperative Work), que suportam o desenvolvimento
         descentralizado de software livre, através do estudo de caso do desenvolvimento do sistema
         operacional Linux.



1 Introdução

   Apesar da definição apresentada acima, ainda existem controvérsias em relação ao que seja
precisamente considerado software livre. Isso se dá pelo fato de que se trata de um assunto
multifacetado, que contém questões relacionadas a assuntos como engenharia de software,
propriedade intelectual, modelo econômico, política tecnológica, cooperação1, liderança e
motivação. Uma olhada mais de perto em alguns projetos de software livre revela, ainda, uma
grande diversidade de objetivos, formas de participação e técnicas de implementação.
   Ao analisar as atividades que suportam o desenvolvimento de software livre, do ponto de
vista do trabalho cooperativo suportado por computador, é possível identificar um desafio
comum a todos os projetos: a necessidade da criação e manutenção de um ambiente
sociotécnico onde os participantes possam, de forma cooperativa, construir soluções para os
problemas de interesse mútuo.
   As práticas do desenvolvimento de software livre são importantes para a pesquisa em CSCW
por dois motivos principais. Primeiro porque o desenvolvimento de software é tradicionalmente
um processo de coordenação intensiva que tem atraído pesquisadores de CSCW (KRAUT,
1995; BUTTON, 1996) e segundo porque o processo de desenvolvimento de software livre é
efetuado por participantes geograficamente dispersos, com a ajuda de tecnologias colaborativas
como o email, conversação on-line, World Wide Web e sistemas de controle de versão e de
gerenciamento de configuração, tecnologias que, por sua vez, têm sido um aspecto central nas
pesquisas de CSCW.




1
    O conceito de cooperação é mais complexo que o de interação e de colaboração, pois além de pressupor ambos
    requer relações de respeito mútuo e não hierárquicas entre os envolvidos, uma postura de tolerância e convivência
    com as diferenças e um processo de negociação constante. Percebemos que a diferença fundamental entre os
    conceitos de colaboração e cooperação reside no fato de que para haver colaboração o indivíduo deve interagir com
    o outro existindo ajuda - mútua ou unilateral. Para existir cooperação deve haver interação, colaboração, mas
    também objetivos comuns, atividades e ações conjuntas e coordenadas. (MAÇADA; TIJIBOY, 1998).
1.1 Histórico Resumido do Software Livre (e do Linux)

   Software Livre é um conceito antigo, embora ainda não tivesse este nome específico desde o
início. Até a década de 70, o valor de um computador estava contido essencialmente no
hardware, que tinha um custo muito alto. A maioria dos fabricantes fornecia, junto com o
hardware vendido, o código fonte de seus sistemas operacionais e aplicativos. Embora as
licenças não explicitassem claramente a liberdade, a redistribuição do software era vista como
positiva, e quase todo o software era fornecido com o seu código fonte (STALLMAN, 1999).
Os fabricantes até estimulavam, como forma de diminuir os custos de suporte, o
compartilhamento de informações e melhorias de software produzidas entre seus usuários2.
Assim o software era, em geral, desenvolvido de forma cooperativa e aberta em diversas
universidades e empresas. O sistema operacional UNIX, nos seus anos iniciais, foi um exemplo
desta época (MCKUSICK, 1999), assim como o desenvolvimento da Internet foi inteiramente
baseado no uso e compartilhamento de programas de código fonte aberto em escala mundial.
   No início da década de 80 o cenário mudou, quando ganhou força o licenciamento restritivo,
que não permitia a redistribuição do software fornecido e este passou a significar basicamente o
módulo executável, suprimindo o acesso à maioria dos códigos-fonte. Esta mudança de cenário
fez com que, em 1984, (STALLMAN, 1999) criasse a Free Software Foundation (FSF3). A
filosofia do software livre se baseia em uma definição de liberdade. Por causa da ambigüidade
em inglês da palavra "free", tornou-se necessário esclarecer que free software não se refere ao
preço, mas à liberdade dos usuários de executar, copiar, distribuir, estudar, modificar e melhorar
o software. Mais precisamente, referem-se a quatro tipos de liberdades:
  1. A liberdade de executar programas para qualquer propósito.
  2. A liberdade de estudar como o programa funciona e adaptá-lo às suas necessidades (o acesso ao
     código fonte é essencial para isso).
  3. A liberdade para redistribuir cópias do programa de modo que outros se beneficiem.
  4. A liberdade de melhorar o programa e distribuir o seu aperfeiçoamento para o público, de modo que
     toda a comunidade se beneficie (novamente o código fonte é necessário).

   O primeiro projeto da FSF foi o de promover o desenvolvimento de um novo sistema
operacional, completamente livre. Para garantir esta liberdade, criou em 1989 um novo modelo
de licenciamento de software, a General Public License (GPL), descrita no Anexo 1.
   O novo sistema operacional que seria desenvolvido, e que teria o objetivo de ser compatível
com UNIX, foi chamado de GNU4 (um acrônimo recursivo que significa GNU is Not UNIX). O
desafio não se restringia apenas à criação do núcleo do sistema em si (chamado HURD e que
ainda não está pronto até hoje), mas também de uma coleção de aplicativos, ferramentas e
bibliotecas que permitissem sua plena utilização, sem perder a compatibilidade com o UNIX
original.
   A cultura em torno do movimento de software livre, de certa forma, está ligada à cultura em
torno do UNIX, já que os principais representantes do movimento foram usuários desse sistema,
que tinha uma natureza aberta e uma filosofia própria, sumarizada por Gancarz (1995) como
sendo composta dos seguintes pontos:
  1.   Pequeno é belo;
  2.   Faça cada programa perfazer bem apenas uma tarefa apenas;
  3.   Construa um protótipo assim que possível;
  4.   Escolha portabilidade sobre eficiência;
  5.   Armazene dados numéricos em arquivos texto;
  6.   Faça reuso do software para sua vantagem;
  7.   Use scripts shell para aumentar portabilidade e reuso;
  8.   Evite interfaces restritivas com o usuário;
  9.   Faça cada programa ser um filtro de dados para que possa ser usado em conjunto com outros.

2 Havia um grande compartilhamento de software entre os participantes dos grupos de usuários, como o SHARE

(para usuários de sistemas IBM) e o DECUS (para usuários de sistemas DEC).
3 http://www.fsf.org/
4 http://www.gnu.org/
Em 1991, Torvalds (1999) então estudante da Universidade de Helsinki (Finlândia), iniciou o
desenvolvimento do Linux, um núcleo de sistema operacional compatível com o UNIX, a partir
do reuso de códigos e idéias do Minix, um pequeno sistema operacional de uso acadêmico
criado por Tanenbaum (1987). A partir da primeira versão, Torvalds convidou, via newsgroups
da Internet, outros desenvolvedores a contribuírem nessa empreitada. Houve bastante adesão e,
de forma surpreendentemente rápida, a codificação e a manutenção constantes neste núcleo, o
fizeram evoluir para se tornar um software com funcionalidades similares às dos núcleos dos
sistemas UNIX do mercado (SCHENK, 2001). O Linux, ao longo do seu desenvolvimento,
utilizou (e ainda utiliza) muitas ferramentas do Projeto GNU da FSF e por esta razão o sistema
hoje também é chamado de GNU/Linux.
   O licenciamento através da GPL e a utilização da Internet como o canal principal de
comunicação e desenvolvimento transformaram o Linux no mais importante exemplo de
software livre desenvolvido de forma aberta e descentralizada.
   Raymond (1999) rotulou os modelos de desenvolvimento de software e chamou de “Bazar”
esse modelo descentralizado e cooperativo, em contraposição ao “Catedral”, modelo tradicional
no qual o desenvolvimento é realizado de forma fechada e pouco cooperativa. Ele reforçou esta
perspectiva através da afirmação de que o Linux é um contra-exemplo da “Lei de Brooks”, uma
lei clássica da Engenharia de Software, que diz o seguinte:
       “...o tempo de um programador não é acumulativo, pois ao adicionar desenvolvedores em um projeto
       atrasado de software faz com que ele se torne mais atrasado ainda e que a complexidade e os custos
       de comunicação de um projeto crescem com o quadrado do número de desenvolvedores, enquanto o
       trabalho feito cresce somente linearmente” (BROOKS, 1995).

   Outra característica do modelo Bazar, importante para a qualidade do objeto produzido, é ter
uma grande base de usuários com acesso ao código fonte, pois segundo Raymond (1999) “Se
exposto a um número suficiente de olhos, todos os bugs são superficiais”, pois a depuração de
erros é uma atividade paralelizável e será resolvida mais rapidamente quanto maior for a base de
usuários participantes.
   O tamanho e a agilidade de um projeto de software livre, não são as únicas qualidades que o
distinguem de um modelo “Catedral”. Outra importante diferença está em sua organização
interna, particularmente na ausência de uma coordenação global sob uma autoridade central e
pela inexistência de um planejamento de projeto do tipo “Top-Down”. Aliás, em software livre
normalmente a estratégia vem depois do desenvolvimento e a ação antes do planejamento
(TAURION, 2004).
   A partir de 1988 o software livre se tornou notícia cada vez mais freqüente na imprensa,
quando a Netscape abriu o código do seu principal produto, o Communicator e também quando
empresas de grande porte como IBM e Oracle começaram dar suporte ao Linux e ao Apache.
Esse ano também ficou marcado como o ano que a Microsoft reconheceu, pela primeira vez, o
Linux como competidor importante (OSI, 1988).
   Muitas vezes o termo software livre (free software) se confunde com software aberto (open
source). Isso passou a acontecer principalmente após a criação da Open Source Initiative (OSI5),
em 1988. Diferentemente da FSF, que suporta somente o uso de suas próprias licenças, a OSI
não tem licenças próprias, mas certifica todas as dezenas licenças existentes no mercado
(inclusive as da FSF) dentro de seus próprios parâmetros de software aberto. A OSI é uma
entidade conciliadora, que garante às empresas que praticam o modelo comercial de
desenvolvimento de software, uma porta de entrada no movimento de software aberto sem
necessariamente adotar as licenças da FSF, representando assim uma espécie de alternativa
intermediária. Desta forma, todo software livre é, por definição, aberto, porém nem todo
software aberto é livre.




5   http://www.opensource.org/
1.2 Os Projetos de Software Livre

   Embora não exista uma definição precisa do que seja um projeto de software livre, existe um
consenso informal de que o software em conjunto com seus desenvolvedores, usuários e
repositórios de código e documentos constitui um projeto, que desta forma abrange:

     • Código fonte, que é o software propriamente dito, mas que existe em forma de inúmeras
       cópias entre todos seus usuários e repositórios de dados. Software livre, em geral, tem uma
       versão bem definida e distribuída a partir de um ponto central conhecido para o Projeto.

     • Um grupo de desenvolvedores, que trabalha para codificar e corrigir o software. Os
       desenvolvedores, em todos os casos e sem exceção, trabalham cooperativamente através da
       Internet e podem ter status diferenciados dentro do projeto (FIELDING, 1999).

     • Os usuários do software. Apesar de todo software ter usuários, sua participação em
       projetos de software livre é essencial, pois discutem inovações e apresentam erros
       encontrados com freqüência, incentivando os desenvolvedores a trabalhar por um produto
       melhor (RAYMOND, 1999).

     • Os repositórios de documentos e códigos. Normalmente todo projeto tem algum site
       central que é uma referência para desenvolvedores e usuários buscarem códigos e
       informações atualizadas.

   É interessante perceber que todo o processo de desenvolvimento e distribuição depende
essencialmente do uso da Internet, e que esta é um pré-requisito para a existência de um projeto
de software livre.
   Segundo o Sourceforge6, website do Open Source Technology Group (OSTG7), que é o maior
repositório de software livre e de código aberto disponível na Internet, existem em seus registros
mais de 130 mil projetos, em diferentes estágios de desenvolvimento, classificados da seguinte
forma:

     • Planejamento: Nenhum código foi escrito ainda e o escopo do projeto ainda está sendo
       definido, Logo que algum resultado tangível em forma de código apareça, o projeto entra
       no próximo estágio;

     • Pré-Alfa: Código muito preliminar produzido. Não é esperado, entretanto que este código
       seja capaz de compilar ou ser executado. Observadores externos ao projeto poderão ter
       dificuldade em entender o significado do código. Assim que uma intenção coerente que
       indique uma direção seja percebida no código, o projeto passa para o estágio seguinte;
     • Alfa: O código produzido funciona pelo menos de forma parcial e o projeto começa a
       tomar forma e absorver novas características. À medida que o número de sugestões e
       modificações começa a diminuir, o projeto entra no estágio seguinte;

     • Beta: O código está, de uma forma geral, completo em relação às características propostas
       no projeto original, mas requer testes de depuração. Quando o número de erros estiver
       reduzido o suficiente para entrar em produção, o projeto passa para o estágio seguinte;

     • Estável: O software é utilizável e confiável o suficiente. As mudanças serão aplicadas
       cuidadosamente e com o objetivo de aumentar a estabilidade, nunca de adicionar
       funcionalidades. Se nenhuma mudança significante acontecer em um período longo, o
       projeto entra no último estágio, mesmo se problemas menores ainda possam existir;


6   http://sourceforge.net/
7   http://www.ostg.com/
• Maduro: Há muito pouco ou nenhum desenvolvimento no código, uma vez que o software
    preenche todos os seus objetivos corretamente. Mudanças serão aplicadas com extremo
    cuidado. Pode permanecer nesta fase por vários anos, até que se torne obsoleto ou
    substituído por outro melhor. Ainda assim o código permanecerá indefinidamente
    disponível para servir a objetivos educacionais;

  • Inativo: Projeto interrompido por falta de manutenção, movimentação de arquivos ou
    abandono por parte de seus líderes (projeto órfão).



2 O Modelo de Desenvolvimento do Software Livre

   Quando o desenvolvimento é feito por uma equipe pequena e local, ou por uma comunidade
de prática, onde os participantes estão fortemente ligados uns aos outros, o trabalho cooperativo
é certamente mais fácil, pois, nessas comunidades de prática, os membros podem aprender as
novidades de forma mais eficiente, resolver seus problemas de maneira mais tranqüila, e ainda
têm mais possibilidades de encontrar novas oportunidades de inovação (BROWN, 1991). Em
contraste, a coordenação de uma equipe numerosa e remota precisa ser inevitavelmente formal e
o gerenciamento das contingências sempre é uma tarefa muito mais difícil de gerenciar
(KRAUT, 1995).

   Os projetos de desenvolvimento distribuído de software livre apresentam características
comuns, quando analisados do ponto de vista de construção cooperativa. Segundo Scharff
(2002), essas características comuns podem ser mapeadas em um framework que as organiza de
forma descritiva em um modelo que enfatiza a construção cooperativa.
   A figura abaixo representa graficamente este framework conceitual, ilustrando os quatro
componentes principais de um projeto de software livre: As pessoas (participantes), o que eles
estão criando (objeto produzido), os processos empregados (processos colaborativos) e os meios
usados para comunicação e coordenação do projeto (tecnologias colaborativas).




               Fig. 1. Framework conceitual do desenvolvimento do software livre


2.1 Os Participantes

  São os componentes principais de um projeto de software livre. Sem um grupo de
participantes ativos não haverá software produzido ou este será apenas um pedaço de software
sem mudanças. A participação em um projeto de software livre abrange, além da produção do
código fonte em si, a contribuição em forma de idéias, feedbacks, correções e demonstrações.
Assim, os participantes podem ser simpatizantes, usuários, desenvolvedores, testadores,
documentadores ou evangelistas. Geralmente são ativamente envolvidos em todas as fases de
um projeto e trabalham de forma voluntária, motivados por uma mentalidade altruísta
(RAYMOND, 1999).
Um estudo demográfico realizado por Boston (2002) com uma população de líderes e
desenvolvedores principais de projetos registrados no Sourceforge, revelou que entre os
entrevistados:

    •   72,6% disseram que, quando estão programando, perdem a noção do tempo por estarem
        motivados, sendo o tempo de sono considerado a principal contrapartida resultante da
        participação em um projeto de software livre seguida de perto pela vida social;
    •   44,9% são motivados a trabalhar no projeto pelo desafio intelectual que representa;
    •   Apenas 11,1% revelaram como motivação principal desbancar o software proprietário;
    •   70% dos participantes são voluntários e não são financeiramente recompensados (direta
        ou indiretamente) pelo seu trabalho no projeto;
    •   O tempo médio de trabalho gasto nos projetos foi de 14,9 horas por semana;
    •   48,1% revelou que o maior benefício pessoal é o aumento do conhecimento;.
    •   83% se identificaram com a comunidade hacker;
    •   70,2 % dos participantes estão entre 22 e 38 anos, com a média em torno de 30 anos;
    •   A população provém de dezenas de países, e a maior parte vem EUA, Alemanha e
        Reino Unido;
    •   45,4 % dos participantes são programadores profissionais e a média de experiência de
        11 anos;
    •   A maioria afirmou esperar do líder do projeto não só a realização de tarefas práticas
        (criação da base de código original e contribuições constantes), mas uma boa visão de
        longo prazo, iniciativa para diálogo, e disposição para integrar contribuições.


2.2 O Objeto Produzido

   É o resultado da criação e dos refinamentos sucessivos. Ainda que a produção de código
fonte seja atividade central de um projeto de software livre, este não é o único produto final,
pois também figuram neste componente toda a documentação, os relatórios de defeitos, as
ferramentas de instalação e outros materiais de suporte. A versão do software recomendada para
uso em produção é chamada de distribuição padrão.


2.3 Os Processos Colaborativos

   São convenções, procedimentos, práticas, papéis e responsabilidades que regem as interações
entre os membros de um projeto de software livre. Geralmente são difíceis de definir, pois são
conhecimentos tácitos, que a comunidade pode nem perceber que adota, ainda que certamente
estejam presentes e desempenhem um papel importante. Diferentes comunidades podem ter
diferentes perspectivas em relação à construção cooperativa, seja enfatizando a correção de
erros, promovendo novas funcionalidades ou criando referências de implantação.
   Essas diferentes perspectivas afetam a natureza dos processos colaborativos (NAKAKOJI et
al., 2002), e normalmente aparecem quando são endereçadas as questões dos participantes e as
respectivas respostas da comunidade. São situações que invariavelmente remetem a novas
situações de colaborações, como por exemplo:

  • Quando uma comunidade é intolerante com perguntas simples ou assume uma postura
    defensiva perante uma sugestão, pode inibir os participantes;
  • Se algum participante quer contribuir com uma correção ou melhoria, a comunidade deve
    ter processos para absorver e encaminhar estas questões;
  • É necessário que a comunidade esteja preparada para atender às múltiplas contribuições
    em paralelo para vários pedaços ou módulo do software em questão;
  • Finalmente é preciso ter um processo de adoção de mudanças na distribuição padrão, pois
    se nenhuma contribuição for incorporada, os participantes podem se sentir discriminados
    no projeto.
Em um projeto de software livre, este ciclo de discussão, mudança e incorporação de
mudanças, por definição não termina nunca, pelo menos enquanto houver o projeto.
   A técnica mais adotada nos projetos de software livre é a utilização de alguma forma de
liderança. Normalmente um líder de projetos é uma pessoa (ou um pequeno grupo de pessoas)
que participou da concepção da idéia ou de sua implementação inicial e que, principalmente,
goza de respeito e reconhecimento por parte dos outros membros da comunidade. O papel
desempenhado por um líder em um projeto de software livre pode variar muito porque depende
fortemente da pessoa que exerce esta liderança, a começar pela própria definição desta função,
referenciada por diversos nomes como “chefe”, “arquiteto-chefe”, “mantenedor”,
“coordenador”, etc. Em linhas gerais o líder provê direção e coerência para o projeto, resolve
eventuais disputas e mantém o controle da distribuição padrão, diferenciando-se assim de um
ambiente corporativo tradicional, cuja liderança normalmente está inserida em um contexto
hierárquico de uma “cadeia de comando”.
   Outra técnica muito disseminada na organização de processos colaborativos de software livre
diz respeito ao framework do projeto em si, que paraleliza a organização da comunidade e a
arquitetura do software que está sendo desenvolvido. Entre as estruturas organizacionais típicas
temos as decomposições funcionais hierárquicas em módulos fracamente acoplados e um núcleo
central com módulos encaixáveis. Um importante objetivo do framework deste tipo é a
capacidade que oferece de, dado um problema específico, saber quais as mudanças que serão
necessárias e onde precisam ser feitas.
   A divisão de tarefas, diferente do modelo tradicional, é feita de forma democrática e baseada
no interesse pessoal dos participantes, ainda que, quando muitas pessoas estejam trabalhando no
desenvolvimento de uma mesma parte do sistema, possa haver uma delegação de tarefas
visando evitar conflitos e que normalmente é explicitada através de uma lista de participantes e
de subprojetos ativos, criando uma percepção informal de quem está trabalhando no quê. É
importante frisar que cada participante contribui com o software livre por motivos pessoais e,
normalmente, poucos se dedicam a fazer tarefas consideradas “chatas” (como documentação ou
interfaces), ainda que sejam importantes.
   Um conceito implícito do software livre que tem profundas implicações no processo
colaborativo é o compartilhamento de informações. Qualquer um pode ter acesso, ler ou
modificar qualquer código fonte no sistema. Este caráter público do código cria uma espécie de
pressão social que motiva a produção de código de qualidade, pois todos os participantes
querem que suas contribuições sejam reconhecidamente positivas para a comunidade (AOKI et
al., 2001).
   Mudanças em um projeto de software livre acontecem o tempo todo e o desafio é manter um
software de qualidade sem ofender os membros da comunidade, pois críticas ou mudanças em
um pedaço de código podem ser interpretadas como uma crítica pessoal. A submissão não só de
erros e críticas, mas de correções e sugestões é importante para o desenvolvimento de uma
comunidade (PAVLICEK, 2000).


2.4 As Tecnologias Colaborativas

   As tecnologias colaborativas desempenham duas atividades essenciais ao processo de
construção cooperativa. A primeira é dar aos participantes um canal de comunicação entre si e a
segunda fornece mecanismos de armazenamento, distribuição e acompanhamento de versões de
objetos produzidos pela comunidade. Ambas as atividades podem se basear em ferramentas
síncronas ou assíncronas e de forma independente da sofisticação técnica e das questões
temporais, ou seja, podem ser realizadas por contato físico face-a-face, videoconferência, bate-
papo eletrônico, cartas postais, etc..
2.4.1 Comunicação

   A maioria dos projetos de software livre é virtual, com participantes espalhados ao redor do
mundo e, mesmo quando a maioria das pessoas de um projeto está em um único país, as
dificuldades de agendar reuniões com presença física são consideráveis, porém quando os
participantes se encontram fisicamente, estas reuniões são tão importantes quanto qualquer
outra tecnologia colaborativa (LANCASHIRE, 2001).
   A Internet é um elemento indispensável na criação e desenvolvimento de projetos de software
livre. Como os projetos de software livre tiveram sua origem e disseminação em paralelo com
origem e disseminação da própria Internet, as principais tecnologias colaborativas utilizadas
passam pelas ferramentas disponíveis nessa rede. Sobre esse aspecto Yamauchi (2000) oferece
uma visão geral dos mecanismos de comunicação usados em projetos de software livre e afirma
que, apesar da tendência acadêmica da pesquisa em CSCW apontar para a produção de
ferramentas complexas para suportar trabalho cooperativo desta natureza, os projetos de
software livre sobrevivem e comprovam a eficácia do uso de ferramentas e meios de
comunicação simples e disponíveis há muito tempo na Internet, como o email, as listas de
distribuição, os newsgroups, os chats e os sites repositórios de conteúdo.
   Os canais de comunicação baseados na Internet são relativamente baratos (quando
comparadas às ligações telefônicas internacionais, reuniões com presença física e
videoconferência por satélites) e aqueles com características assíncronas são importantes para
minimizar o problema das fronteiras geográficas e dos fusos horários, especialmente na
coordenação de projetos de maior porte, que aliados à capacidade de alcance mundial da
Internet faz com que os projetos de software livre atraiam muito mais participantes do que
conseguiriam se fossem grupos locais ou geograficamente limitados.


2.4.2 Armazenamento e controle de versões e erros

  Os mecanismos de armazenamento, distribuição e acompanhamento de objetos produzidos
pela comunidade também utilizam ferramentas disponíveis na Internet. A distribuição padrão
normalmente é disponibilizada em website conhecido, que funciona como repositório daquela
versão (estática) até que seja substituída por outra mais nova.
  Cada vez mais projetos de software livre estão adotando ferramentas de controle de versão
para gerenciamento do conteúdo do objeto produzido. Essas ferramentas são vistas como uma
extensão natural do processo de desenvolvimento, permitindo que se possam realizar
modificações paralelas de forma coerente e padronizada, através de um mecanismo
automatizado para identificar e controlar as modificações realizadas nos arquivos de um projeto
ao longo do tempo, garantindo a integridade e a rastreabilidade das modificações.
  Para enviar as modificações feitas em um objeto, um participante não precisa enviar todo o
conjunto de arquivos, pois as ferramentas específicas normalmente extraem a diferença do
conjunto original para o modificado e somente o delta precisa ser enviado. Um componente da
mesma ferramenta, do outro lado, se encarrega de aplicar as modificações e gerar a nova versão.
Esse recurso é importante na economia do uso da rede, pois os arquivos com as diferenças
normalmente são substancialmente menores do que as versões completas dos arquivos.
  Existem diversas ferramentas em uso nos projetos de software livre, como BitKeeper8,
Subversion9 e Revision Control System (RCS10), porém a mais utilizada atualmente é a
Concurrent Versions System (CVS11), um software (livre) relativamente simples, que foi


8 http://www.bitkeeper.com/
9 http://subversion.tigris.org/
10 http://www.cs.purdue.edu/homes/trinkle/RCS/
11 http://ximbiot.com/cvs/wiki/
desenvolvido suportar grupos de trabalho voltados para o desenvolvimento de projetos de
construção cooperativa, seja de códigos fonte, documentação, arquivos de configuração, etc.
   O CVS surgiu em 1986 como uma coleção de scripts para melhorar o RCS e depois se
transformou em uma ferramenta própria, que funciona segundo o modelo copy-modify-merge
(copia-modifica-integra) que, baseado no trabalho off-line, permite que múltiplos participantes
efetuem, de forma independente, alterações em suas cópias locais do objeto, uma vez que não
utiliza mecanismos de exclusão mútua. A seguir estão apresentados os principais aspectos do
fluxo de trabalho do CVS, extraído de Reis (2001):




               Fig. 2. Diagrama de fluxo de trabalho com o uso do CVS (REIS, 2001).


• Repositório: Consiste em um conjunto de arquivos mantido em um local central
  (normalmente um servidor conectado à Internet, que permita acesso anônimo). Opera,
  principalmente, segundo um modelo de incrementos, ou seja, armazena as cópias mais atuais
  dos arquivos do projeto, e as diferenças entre esta e as versões anteriores.

• Cópia Local: Qualquer participante interessado solicita ao servidor, através de uma
  ferramenta front-end, uma cópia do objeto em uma determinada versão desejada. Uma vez
  criada esta cópia local, também chamada de sandbox, o participante tem acesso total aos
  arquivos que deseja trabalhar e pode aplicar suas modificações. O participante pode sempre
  solicitar ao servidor uma atualização de sua base de objeto local, recebendo as alterações que
  foram integradas ao repositório principal após a criação da sua cópia local.

• Integração: Ao alterar o código, o participante está livre de qualquer interação com o
  repositório e quando julgar que sua versão alterada está pronta para ser integrada à base
  principal, usa a ferramenta front-end para submeter o objeto de volta ao repositório central. A
  esta ação de integração é dado o nome de checkin ou merge.

• Resolução de conflitos: Se múltiplos participantes alteram o mesmo trecho de um objeto,
  conceitualmente ocorre um conflito. O processo de resolução de conflitos é feito da seguinte
  forma: O primeiro participante a integrar um objeto ignora, a princípio, o fato de que outros
  estejam trabalhando no mesmo trecho. Cada participante subseqüente que iniciar uma ação de
  merge receberá do repositório a mensagem de que precisa atualizar a sua versão local (já que
uma integração no mesmo arquivo foi feita pelo primeiro participante). Neste momento, ao
  atualizar a cópia local a ferramenta irá informar que houve alterações provindas do
  repositório no mesmo trecho de código alterado localmente. Estes trechos do código são
  marcados com indicadores que diferenciam a versão do repositório da versão local. O
  participante precisa analisar com cuidado as alterações e decidir de que forma o código deve
  ficar; ele pode resolver o conflito removendo uma das versões, mas freqüentemente a opção
  correta é integrar mudanças de ambas as versões num novo trecho único.

• Versões: Cada arquivo modificado no repositório recebe uma versão numérica. É possível
  criar aliases (apelidos) que abstraiam as versões de um conjunto de arquivos em um
  determinado instante do tempo. Com isso, é possível reverter alterações de arquivos
  individuais para versões anteriores, e também regenerar uma versão completa do repositório
  em um determinado momento. Do ponto de vista do participante, o CVS permite que se
  comparem facilmente as alterações feitas na sua cópia local com qualquer versão integrada
  no repositório, e torna possível reverter alterações integradas no repositório central para
  versões anteriores. Este último recurso é normalmente utilizado para remover alterações
  problemáticas que tenham causado algum um defeito ou regressão funcional no objeto
  produzido.

• Branches: Além das versões alternativas da base de objeto principal, o CVS permite que se
  crie uma linha de versões paralelas à principal. Resumidamente, é estabelecido um branch
  (bifurcação) a partir do código principal, chamado trunk (tronco). Alterações integradas sobre
  este branch são isoladas, não refletindo no tronco. É possível criar um número arbitrário de
  branches e cada um deles terá um nome simbólico, que o participante especifica ao usar a
  ferramenta. Eventualmente alterações de um branch podem ser “aplicadas” no trunk
  principal. Esta operação tem o nome de merge (incorporação). É prática comum, entre os
  projetos de software livre, manter branches estáveis conforme apresentado a seguir:




    Fig. 3 No exemplo acima, o branch estável foi criado logo após o lançamento da versão 0.9, e
     mantido separado da versão principal (head), recebendo apenas reparos de bugs. Duas novas
          versões estáveis foram lançadas (1.0.1 e 1.0.2). O desenvolvimento e a adição de
            funcionalidades continuam normalmente na versão principal. (REIS, 2001).

  • Branch Estável: Onde tendem a ser integradas apenas correções de erros, ainda que esta
    regra não seja explícita. Esta versão é tratada de forma especial, e usuários têm
    expectativas de que entre uma versão e outra do branch estável não ocorram regressões.

  • Branch Instável: Onde são aceitos tanto reparos de erros quanto adições de funcionalidade.
    Não há uma garantia de que as versões funcionem de forma confiável, especialmente nas
    primeiras versões lançadas neste ciclo. Com o passar do tempo, é declarada uma
    “moratória” à adição de funcionalidades (o chamado feature freeze), e a versão instável
    passa por um período de estabilização. Ao final deste período, uma versão considerada
    “estável o suficiente” é batizada de “nova versão estável”, e um novo ciclo se inicia.
Além de manter versões estáveis, branches são utilizados para implementar mudanças que
tenham grande impacto sobre a base do objeto. Como visto anteriormente, cada participante
trabalha em relativo isolamento, com sua cópia local. Se não existissem branches, a integração
de mudanças extensas seria bem difícil, já que por grandes períodos de tempo corre-se o risco
de outro participante ter alterado o mesmo trecho. Utilizando um branch, é possível desenvolver
a alteração paralelamente, e integrar mudanças no trunk principal de forma incremental.
   As ferramentas que documentam e controlam os erros encontrados (e suas correções) são
muito importantes para qualidade e a produtividade dos projetos de desenvolvimento distribuído
de software. Cada erro, informado por um usuário participante, é registrado em um informe
individual e cada informe possui um ciclo de vida que vai desde a sua criação, no momento em
que é informado, até seu fechamento, quando o erro é reparado no objeto produzido. Essas
ferramentas, que normalmente têm interface Web ou via email permitem, em geral, um bom
gerenciamento dos erros, com capacidade de localização, confirmação e detecção de erros
duplicados ou que não se apliquem à versão atual do objeto.
   A ferramentas de controle de erros mais usada em projetos de software livre atualmente é o
Bugzilla12, que nasceu como ferramenta de controle de alterações do projeto do browser
Mozilla13, no qual é usada em todas as etapas do processo de desenvolvimento, desde a
definição de funcionalidades até o projeto, implementação e revisão de alterações. O Bugzilla
possui, além do registro de informes de erros, funcionalidades de priorização de atendimento,
assinalamento de erros aos participantes apropriados, configuração de dependências entre os
erros, organização de erros por produto ou componentes e, principalmente, a capacidade de
revisão de código, na qual cada informe pode ser vinculado a uma alteração de código
provisória, que deve ser revisada e aprovada para integração na base de código principal. Outra
ferramenta comumente utilizada é o GNATS14.


2.5 As Inter-relações

   Nenhum dos componentes deste framework conceitual existe de forma isolada e assim como
cada aspecto muda com o tempo, o mesmo acontece com as relações. A seguir estão listadas as
inter-relações mais encontradas entre os componentes:

2.5.1 O Uso

   O objeto produzido em um projeto de software livre é um pedaço de software de computador,
que as pessoas irão baixar e usar em um contexto específico. O uso é um tipo de atividade
reflexiva, na qual o usuário cria um modelo de percepção das limitações e pontos fortes do
software em uso e identifica mudanças e características que acreditam que o software deveria
ter para atender suas necessidades e preferências. Quando mais o software estiver relacionado
com cotidiano do usuário, principalmente relacionado ao seu trabalho, mais chances existem
desse usuário querer contribuir com críticas e sugestões para o desenvolvimento do software.

2.5.2 A Facilitação Social

   O processo colaborativo emerge dos participantes ao mesmo tempo em que influencia suas
ações. A facilitação social é a maneira com que os processos colaborativos encorajam as
pessoas a se envolverem no desenvolvimento e evolução do projeto. Por exemplo, o processo
colaborativo pode requerer que as pessoas que corrijam erros anexem seus nomes às correções.
Em alguns grupos isso pode ser um grande incentivo à correção de erros porque o
reconhecimento pessoal e os elogios motivam as pessoas a contribuir cada vez mais. Em outro
exemplo, se um líder que precisa aprovar todas as mudanças nunca aceita as sugestões da

12 http://www.bugzilla.org
13 http://www.mozilla.org
14 http://www.gnu.org/software/gnats/gnats.html
comunidade, seus participantes perceberão que suas contribuições não estão recebendo o devido
reconhecimento e poderão abandonar o projeto. Em suma, a facilitação social se refere às
reações dos participantes ao contexto social do projeto.

2.5.3 A Facilitação Técnica

   O processo colaborativo está intimamente relacionado com as tecnologias colaborativas
empregadas. Algumas vezes as limitações da tecnologia influenciam no processo colaborativo
em si. Por exemplo, as equipes que dependem da comunicação por email, muitas vezes têm
dificuldade de encontrar mensagens importantes devido ao volume e a inerente falta de estrutura
dos sistemas de correio eletrônico. Para compensar essa deficiência, o processo colaborativo
pode especificar que quando a palavra “ANNOUNCE” aparece entre colchetes no início do
assunto da mensagem, significa que se trata de um anúncio importante e que todos devem ler.
Em alguns grupos são criados filtros automáticos que varrem as mensagens em busca dos
identificadores de anúncios importantes que, uma vez identificados, são imediatamente postados
em uma página de anúncios no website do grupo. Neste caso uma tecnologia colaborativa foi
adaptada para reforçar um processo colaborativo de divulgação de anúncios importantes. A
facilitação técnica se refere às conexões entre os processos colaborativos e as tecnologias que
suportam esses processos.

2.5.4 Gerenciamento das Mudanças

   O gerenciamento das mudanças está relacionado ao uso das tecnologias de comunicação,
armazenamento e controle de versões e de erros da distribuição padrão. Como os objetos
produzidos devem estar publicamente disponíveis e fáceis de serem acessados, a tecnologia
colaborativa deve prover uma maneira confiável de se armazenar e disponibilizar esses objetos.
A estrutura dos repositórios da distribuição padrão geralmente reflete as mudanças que
ocorreram ao longo do tempo que, junto com os padrões de nomenclatura (numeração de
versões) e com as tecnologias de controle de versão e de erros, ajudam no rastreamento das
mudanças no objeto produzido, facilitando a volta para uma versão anterior caso problemas
sejam encontrados após uma mudança na distribuição padrão.

2.5.5 As Contribuições

   Contribuição são os processos nos quais os indivíduos propõem melhorias ou extensões no
projeto através de mudanças relacionadas à distribuição padrão do objeto produzido. A forma
como uma contribuição acontece varia de projeto para projeto, mas certamente envolve todos os
aspectos e componentes do framework. Participantes criam mudanças, que passam por alguns
processos colaborativos onde o grupo decide aceitar, refinar ou rejeitar as contribuições.
Durante esses processos, a tecnologia colaborativa coordena a comunicação e provê o suporte
técnico para rastrear as múltiplas versões de uma mudança. Se uma contribuição é aceita, passa
então a ser incorporada ao objeto produzido e atualizam-se todas as referências. Assim, apesar
das contribuições serem atividades desempenhadas por participantes, são fortemente
influenciadas pelo objeto, pela tecnologia e pelo contexto social dos processos colaborativos.


3 O projeto de desenvolvimento do Linux

3.1 O Cerne da Questão

  O Linux é um kernel (cerne ou núcleo) de sistema operacional multitarefa preemptivo
baseado na Application Program Interface (API) definida pelo padrão Portable Operating
Systems Interface (POSIX15). É um sistema multiplataforma que suporta mais de dez
arquiteturas de hardware diferentes (DEURZEN, 2004), sendo a mais importante, do ponto de
vista do desenvolvimento e uso, a arquitetura da Intel, utilizada na maioria dos computadores
pessoais.
   Moon (2000) faz uma análise histórica do desenvolvimento do kernel e coloca claramente a
importância do desenvolvimento em comunidade, fornecendo estatísticas históricas da
participação de desenvolvedores externos:

     “ ...em duas semanas do anúncio de Torvalds em Outubro de 1991, 30 pessoas tinham contribuído
     com cerca de 200 informes de erros, contribuições de utilitários, drivers e melhorias para serem
     adicionadas ao kernel [...] em Julho de 1995, mais de 15.000 pessoas de 90 países em 5 continentes
     tinham contribuído com comentários, informes de erro, correções, alterações, reparos e melhorias.”
     (MOON, 2000)

   O primeiro release da primeira versão do kernel possuía um pouco mais de três mil linhas de
código, distribuídas em 88 arquivos escritos em linguagens C e Assembly. Atualmente o kernel
está no release 6 da versão 2, cujo tamanho ultrapassa a quantidade de dois milhões e meio de
linhas de código, distribuídos entre milhares de arquivos. O kernel fica disponível na Internet16 e
uma visão da sua estrutura atual pode ser vista em um mapa disponível no website do projeto
Kernel Mapper17
   O desenvolvimento do kernel costuma ocorrer em duas séries separadas: uma delas é a de
produção, ou estável, cujo segundo número (de release) é sempre par: 2.0.x, 2.2.x, 2.4.x, 2.6.x,
etc. A outra série é a de desenvolvimento, que não é garantida para ser utilizada em sistemas em
produção, e tem o número de release sempre ímpar: 2.1.x, 2.3.x, 2.5.x etc. Quando a série de
desenvolvimento atinge a maturidade, ela muda de numeração e se transforma na nova série de
produção (feature freeze), e uma nova série de desenvolvimento tem início. O terceiro número
(x) refere-se ao patch (remendo) de correção em uso na versão.
   O desenvolvimento do Linux segue a filosofia preconizada por Raymonds (1999) de “Faça
releases o quanto antes e libere-os com freqüência. E ouça o que os seus usuários têm a dizer”.
   O kernel ainda hoje tem em Torvalds seu expoente máximo, que toma as principais decisões
e define a filosofia geral do projeto. Entretanto, cada release tem sempre um mantenedor
responsável, que aprova cada aperfeiçoamento e garante que não haja versões conflitantes. O
primeiro mantenedor do kernel estável foi próprio Linus Torvalds, seguido pelo inglês Alan
Cox (versões 2.0 e 2.2), depois pelo brasileiro Marcelo Tosatti (versão 2.4) e hoje pelo inglês
Andrew Morton (na atual versão 2.6). Torvalds e Cox continuam responsáveis por supervisionar
as versões do kernel que ainda estão em desenvolvimento.
   Em julho de 2003, Torvalds passou, pela primeira vez na vida a trabalhar oficialmente e
integralmente dedicado ao projeto do Linux, como contratado da Open Source Development
Laboratories (OSDL18), uma entidade voltada para a disseminação internacional do Linux. A
OSDL foi fundada no ano 2000, com sedes nos Estados Unidos e Japão, e é mantida por
investimentos de cerca de 50 empresas como Cisco, HP, IBM, Intel e Sun. Posteriormente Cox
e Morton também passaram a fazer parte do OSDL.


3.2 Comunicação e Percepção

   O projeto do desenvolvimento do Linux sempre foi, levando-se em conta o tamanho do
objeto produzido e do número de participantes envolvidos, um dos projetos mais minimalistas
em relação à infra-estrutura de desenvolvimento.
   A lista de distribuição de emails linux-kernel mailing list (LKML) é o fórum central de
discussão entre os participantes do projeto de desenvolvimento do Linux, incluindo o próprio

15   http://www.pasc.org/
16   http://www.kernel.org/
17   http://kernelmapper.osdn.com/
18   http://www.osdl.org/
Torvalds, que sozinho recebe cerca mais de 200 emails diretos por dia, somente dos
participantes do projeto. A intensidade dessa lista dá uma boa idéia do que seja o
desenvolvimento no modelo “Bazar”, pois apenas em uma semana comum de trabalho é normal
alcançar um volume superior a 5 MB de mensagens, sejam relacionadas aos diversos
subprojetos em andamento ou a um conjunto de novas idéias ou mesmo às velhas questões
recorrentes e suas discussões persistentes, todas pertinentes ao assunto do desenvolvimento do
kernel (KUWABARA, 2000).
   O conhecimento, por parte da comunidade, do trabalho produzido pelos participantes fica
registrado no arquivo de créditos que sempre acompanha o kernel. Trata-se de um arquivo de
texto simples onde o participante inclui suas informações pessoais e principais áreas de
contribuição, segundo o seguinte modelo:




                       Fig. 4 A estrutura do arquivo de créditos do Linux.
              As informações são colocadas pelos próprios participantes, mas precisam
                     ser aceitas pelos mantenedores do kernel (TUOMI, 2004).

  Ainda que não haja uma hierarquia definida e que todos trabalham de acordo com interesses e
aptidões pessoais, sabe-se que entre Torvalds e a comunidade de participantes existe um grupo
de consultores técnicos, informalmente chamados de “lieutenants” (“tenentes”), que são
participantes que ganharam o status de programadores competentes e com expertise de
comprovada importância para o projeto através de anos de participação. Apesar desse grupo não
existir de maneira formal, sua composição é aceita pela comunidade como uma espécie de
“seleção natural”, ainda que as informações e opiniões sobre quem faz (ou deveria fazer) parte
do grupo divergem entre os participantes do projeto (KUWABARA, 2000).




                Fig. 5 A estrutura do Linux mostrada através do fluxo de informações.
Esta estrutura mostra que os “lieutenants" representam uma espécie de suporte da cadeia de valor e não uma camada,
pois os participantes podem interagir diretamente com Torvalds. Trata-se de uma estrutura em rede, na qual todos os
participantes têm acesso a todos os nós do sistema. O fluxo da informação também abrange toda a rede, uma vez que
       toda a comunicação se da através da lista de distribuição linux-kernel mailing list (DAFERMOS, 2001).

   Quando um novo participante entra na lista LKML, assim como acontece em outras listas na
Internet, é sempre convidado a ler a documentação de perguntas e respostas mais freqüentes
(LKML FAQ19), que nesse caso, entre suas questões principais, esclarece algumas regras
implícitas que regem o bom funcionamento da lista, a saber:

     •    Mantenha-se no assunto. É uma lista sobre o kernel do Linux, para programadores;
     •    Use somente o idioma inglês!;
     •    Não coloque mensagens em formato HTML, apenas em modo texto;
     •    Se você usa outro sistema operacional, esteja seguro de que seu programa de email não
          usa Charset="Windows*" ou suas mensagens serão bloqueadas;
     •    Se for fazer uma pergunta, antes procure ver se já não há uma resposta na documentação
          ou no arquivo da lista. Lembre-se que 99% das perguntas desta lista já foram respondidas
          pelo menos uma vez. Normalmente a primeira resposta é a mais completa, desta forma a
          resposta armazenada será sempre melhor do que qualquer outra que receba de alguém
          que já respondeu a mesma pergunta uma dúzia de vezes.
     •    Seja preciso, claro e conciso ao fazer uma pergunta, comentário, anúncio de bug,
          sugestão de correção ou qualquer outra coisa. Coloque fatos, evite opiniões.
     •    Seja gentil, não há necessidade em ser rude. Evite expressões que possam ser
          interpretadas como agressivas em relação aos outros participantes da lista, mesmo que o
          assunto tratado seja controverso ou particularmente relevante para você;
     •    Não se arraste em controvérsias. Não tente impor a última palavra. Você até poderá ter a
          última palavra, mas certamente terá perdido toda sua simpatia;
     •    Uma linha de código vale mais do que mil palavras. Se está pensando em uma nova
          funcionalidade, implemente-a primeiro e só depois coloque-a na lista para comentários;
     •    É fácil criticar o código dos outros, mas quando se escreve código pela primeira vez não
          é fácil. Se você encontrar um erro ou alguma coisa que possa ser melhorada, não coloque
          imediatamente uma mensagem do tipo “Este pedaço de código é um lixo, como foi parar
          dentro do kernel?” Ao invés disso, entre em contato com o autor do código, explique a
          questão e faça o entender de uma maneira simples e humilde. Faça isso algumas vezes e
          será reconhecido como um bom depurador de códigos. E quando escrever o seu pedaço
          de código, os outros irão prestar atenção no que fez;
     •    Não se aborreça e responda com veemência os iniciantes que fazem perguntas erradas.
          Isso aumenta o ruído na lista. Envie-os um email privado apontando a fonte da
          informação que procuram (por exemplo, esta FAQ);
     •    Não coloque nenhuma mensagem religiosa ou política, inclusive em sua assinatura de
          email. Ao fazer isso no corpo da mensagem as pessoas irão se aborrecer, pois é um
          assunto fora do objetivo da lista, além do desperdício de uso da banda de rede (lembre-se
          que apesar de estarmos no século XXI, muitas pessoas ainda pagam pelo tempo de uso na
          Internet); Se o fizer em sua assinatura de email, apesar de ser menos irritante, certamente
          fará a maioria das pessoas ignorarem a sua mensagem. Deixe o palanque em casa. E se
          quiser ser levado a sério, limite-se aos assuntos técnicos.

  Apesar de ser um projeto virtual, com participantes espalhados ao redor do mundo, a
comunidade de desenvolvimento do Linux se reúne pessoalmente em eventos anuais informais
como o Kernel Summit20 para trocar experiências, combinar as agendas e próximos passos.




19   http://www.tux.org/lkml/
20   http://lwn.net/Articles/KernelSummit2006/
3.3 Controle de Versões e Erros

   O projeto do desenvolvimento do Linux sempre foi, levando-se em conta o tamanho do
objeto produzido e do número de participantes envolvidos, um dos projetos mais minimalistas
em relação à infra-estrutura de desenvolvimento. Até a versão 2.4, incrivelmente, apenas listas
de discussão e emails eram utilizadas por sua comunidade de desenvolvimento.
   No de final de 2002, no entanto, foi lançado o Kernel Bug Tracker21 sistema para controle de
erros, baseado na ferramenta Bugzilla. Este sistema está hospedado em um website no OSDL,
com a administração do banco de dados de erros sendo realizada pela IBM.
   Outro recente projeto importante na manutenção da qualidade é o Kernel Janitor22, que
objetiva “limpar” constantemente o código-fonte do kernel através da busca e eliminação de
erros em trechos antigos através do reaproveitamento de correções recentes, originalmente feitas
para outros trechos do código do kernel.
   A implantação de uma ferramenta automática de controle de versão (e integração) do objeto
produzido ainda demorou a acontecer no Linux, pois Torvalds sempre se opôs à idéia, uma vez
que somente confiava tal tarefa aos mantenedores credenciados (SHAIKH, 2003).
   Com o número, cada vez maior, de mudanças sugeridas pelos participantes, entretanto, o
projeto precisou adotar uma ferramenta de controle de versões. Torvalds, que nunca quis
trabalhar com o CVS, apesar de alguns participantes usarem essa ferramenta extra-oficialmente,
decidiu pelo uso do BitKeeper, uma ferramenta que, apesar de ser tecnicamente superior à outra,
gerou uma enorme polêmica, com discussões dentro (e fora) da comunidade pois, ao contrário
do CVS, o BitKeeper não possuía a licença de uso segundo os conceitos de software livre
preconizados pela GPL (SHAIKH, 2003). Ideologias à parte, o controle de versões do kernel23
com BitKeeper proporcionou um ganho significativo de produtividade em um sistema que fica
cada dia mais complexo. Como exemplo, somente nos nove primeiros meses do ano de 2003
ocorreram mais de 12 mil mudanças no código do kernel, efetuadas por mais de 550
participantes (SEARLS, 2003). No início de 2005, entretanto, o próprio Linus Torvalds
começou o desenvolvimento de uma nova ferramenta, chamada Git24, que foi disponibilizada
sob a GPL e passou a ser a ferramenta usada na manutenção do kernel, sendo hoje também
aplicada em outros projetos de software.



3.2 A Padronização das Distribuições do Linux

   Nos primeiros anos de existência do Linux, Torvalds simplesmente disponibilizava a versão
estável do kernel e alguns comandos bem básicos. O usuário interessado em usar o sistema,
entretanto, tinha que, além do baixar o kernel pela Internet, também arranjar todos os demais
programas complementares, compilar tudo e acertar os arquivos de configuração para então
poder proceder com a instalação. Como isso é trabalhoso até mesmo para um hacker iniciado no
assunto, surgiram as distribuições, baseadas na idéia de se disponibilizar os programas
principais pré-compilados, de tal forma que o usuário só precisasse pegá-los (em CD-ROM ou
via Internet) e instalá-los em sua máquina.
   Hoje existem dezenas de empresas e instituições, ao redor do mundo, que mantém centenas
de distribuições e as principais diferenças entre elas são:

     • O sistema de empacotamento do software;

     • A estrutura dos diretórios. Teoricamente todas as distribuições seguem um mesmo padrão,
       o Filesystem Standard (FSSTND) mas esse padrão é bem relaxado e, especialmente os
       arquivos de configuração do sistema, são bastante diferentes entre as distribuições;

21 http://bugme.osdl.org/
22 http://janitor.kernelnewbies.org/
23 http://linux.bkbits.net/
24 http://git.or.cz/
• A biblioteca básica libc, que contém funções básicas para o funcionamento do sistema
      operacional. Quando uma nova versão dessa biblioteca é lançada, algumas distribuições a
      adotam imediatamente, enquanto outras, mais conservadoras, aguardam um pouco. Nesse
      meio-tempo, alguns programas podem funcionar em algumas distribuições e não em
      outras.
   A diversidade de distribuições de Linux, que foi providencial na disseminação do sistema em
seus primeiros anos de vida, teve como conseqüência uma falta de padronização que terminou
por criar problemas para a comunidade Linux. Entre outras questões, durante muito tempo era
difícil obter versões pré-compiladas de aplicativos, exceto se tivessem sido preparadas
especificamente para a distribuição de Linux que o usuário estivesse utilizando, o que exigia um
conhecimento da instalação de programas a partir da compilação de seu código-fonte, o que se
constituía numa grande barreira ao uso e adoção do Linux.
   Com a entrada de participantes de maior porte no mercado criado em torno do Linux surgiu a
necessidade de convergência em torno de um padrão, sem restringir a possibilidade de
diferenciação entre as distribuições - mantendo assim a liberdade, sem permitir a fragmentação
do Linux em uma série de alternativas incompatíveis entre si, como ocorreu com o sistema
operacional UNIX. Assim, em 2001, foi criado o Linux Standard Base (LSB25), que visa
desenvolver e promover um conjunto de padrões para aumentar a compatibilidade entre as
distribuições de Linux. O LSB é dividido em três componentes principais: a especificação do
sistema, as ferramentas de teste e um exemplo de distribuição para referência. A especificação
do sistema define a chamada Binary Application Interface (BIA), que é o ambiente que toda
aplicação desenvolvida, levando em conta o LSB, deverá esperar encontrar em qualquer
distribuição de Linux, incluindo o nome e localização dos arquivos, versão das bibliotecas, e
diversos outros fatores. Apesar do padrão LSB ter sido adotado pelos principais participantes do
mercado Linux, incluindo as principais distribuições, os desenvolvedores de aplicativos e as
empresas de suporte, ainda é possível encontrar aplicações que somente funcionam em
determinadas distribuições do Linux.
   Os esforços de padronização são coordenados pelo Free Standards Group (FSG26), que além
de cuidar do LSB, também promove outros padrões do Linux relacionados à
internacionalização, clusterização, impressão, etc.

3.3 O Projeto de Documentação do Linux

   Visando diminuir a barreira de entrada do uso do Linux através da disponibilização de
informações para facilitação do uso, surgiu o Linux Documentation Project (LDP27), um projeto
cujo foco está na produção de documentação padronizada do Linux. Existem quatro tipos de
objetos produzidos no LDP:

     • Guias, que são livros com informação detalhada e aprofundada do sistema, segundo um
       referencial variado (guia usuário, do programador, do administrador do sistema, etc.);

     • HOWTOs, que são como “receitas de bolo” para execução de tarefas comuns no uso do
       sistema, como a instalação, gerenciamento de caixas postais, habilitação de recursos de
       segurança, etc;

     • Man pages, que são as páginas do manual on-line, que contém informações a respeito dos
       programas, funções e utilitários de que fazem parte do sistema;




25 http://www.linuxbase.org/
26 http://www.freestandards.org/
27 http://www.tldp.org/
• FAQs (Frequently Asked Questions) que são as perguntas e respostas mais comuns
    colecionadas ao longo da existência do projeto e que são divididas em categorias
    específicas (Linux, projeto LDP, intgração com outros sistemas operacionais, etc.)

   Além dos objetos descritos acima, o LDP coordena a tradução do conteúdo produzido para
dezenas de idiomas, inclusive o português do Brasil, onde utiliza um vocabulário padronizado
com milhares de entradas (entre termos simples, frases-exemplo reais e acrônimos). Os termos e
suas traduções foram obtidos de outros glossários em papel, web, e termos discutidos (em várias
listas de discussão) quando da tradução de outros livros e programas (ou seja, a experiência de
inúmeros tradutores).


4 Desafios para o Software Livre

   O software livre vem ganhando espaço sistematicamente no cenário mundial e talvez esse
interesse esteja crescendo mais rápido do que a consciência sobre a filosofia na qual é baseado,
e isto pode conduzir a problemas.
   Como já foi dito na introdução deste texto, trata-se de um assunto multifacetado, que contém
questões relacionadas a diversos assuntos (engenharia de software, propriedade intelectual,
etc.). Do ponto de vista dos aspectos relacionados à construção cooperativa, Rothfuss (2002)
indica que esses fatores são decorrentes, principalmente, da falta de organização formal, e
podem ser resumidos conforme a seguir:


4.1 Redundância de Esforços

   A coordenação em projetos de software livre é relativamente pouca. Grupos independentes
muitas vezes desenvolvem tarefas similares em paralelo sem conhecer o trabalho de seus pares,
gerando um consumo adicional de recursos. Não há dúvida que o efeito colateral benéfico disso
é o aumento do número de opções a escolher e que as diferentes alternativas melhoram a
qualidade final do software. Entretanto estes trabalhos paralelos dificultam a escolha de
alternativas por parte dos usuários, o que pode terminar em conflitos de posicionamento no
mercado, gerando discussões apaixonadas, quase religiosas, com potencial de provocar “rachas”
e enfraquecer o movimento de disseminação do software livre.


4.2 Problemas de Comunicação

   Ainda que o inglês seja o principal idioma usado nos projetos de software livre, certamente
não é o idioma nativo de todos os participantes. Isso pode acarretar em diversos problemas de
entendimento, que tendem a piorar conforme os projetos aumentem de número de participantes
ao redor do mundo.
   Outro problema de comunicação, que também está relacionado à expansão, diz respeito ao
volume e à relevância do conteúdo das mensagens, que ainda são a base da comunicação dos
grupos de desenvolvimento. É comum perceber em grupos de discussão, cada vez mais, os
participantes reclamando da falta de etiqueta e boas maneiras em meio a uma profusão de
informações inúteis. Isso certamente é menor nos grupos moderados, mas é inegável que a
relação sinal-ruído na Internet não é das melhores atualmente e está piorando cada vez mais.


4.3 Senso de Prioridade

   Em projetos de software livre, dificilmente as decisões importantes e profundas são tomadas
com a agilidade necessária. Isso acontece devido à natureza distribuída do processo, que aliada
a uma liderança tênue, pode impossibilitar a resolução de uma prioridade ou distorcê-la em
direção às tendências pessoais de algum participante influenciador. Uma necessidade de
mudança mais profunda normalmente desencadeia uma seqüência interminável de argumentos
favoráveis e contrários, uma vez que ninguém pode forçar sua opinião aos demais e todos se
sentem no direito de opinar, mesmo aqueles que não têm o conhecimento ou a preparação
necessária para analisar suas considerações à luz de outras questões.


4.4 Proliferação de “grupos fechados”

   Os projetos de software livre não têm regras formais ou convenções escritas. As relações
entre seus participantes são regidas por um conjunto de regras consuetudinárias – não escritas,
baseadas em costumes – criando uma “netiqueta” (regras de etiqueta na Internet). Dessa forma,
os novos membros têm que gradualmente aprender as regras informais e, de certa forma, são
medidos pelo sucesso em reagir às dicas passadas pelo grupo. As comunidades, principalmente
as mais antigas, são entrosadas e conseguem melhorar a comunicação entre os membros através
do compartilhamento de contextos culturais, porém acabam por dificultar ainda mais a
integração do grupo com os recém chegados. À medida que os participantes competem por
atenção e reconhecimento de talento, essas barreiras são danosas ao projeto, principalmente aos
menores, que ainda se estruturam. O desenvolvimento de software livre é um processo de
aprendizado, onde as partes envolvidas contribuem para (e aprendem da) comunidade e esse
equilíbrio é importante. Edwards (2000) chamou este fenômeno de “Comunidades
Epistêmicas”.


4.5 Falta de Foco

   De acordo com estudos cerca de 70% dos participantes de software livre gastam 10 horas ou
menos por semana em trabalhos relacionados ao projeto e essas horas são, em sua maioria,
gastas durante à noite ou nos finais de semana (BERLECON, 2002). O baixo nível de
participação pode introduzir problemas de comunicação, dado que muitos participantes têm
dificuldade em acompanhar todos os desenvolvimentos realizados no projeto. Essas
circunstâncias certamente dificultam o foco dos participantes no desenvolvimento do projeto.
Normalmente o trabalho é conduzido aos pedaços e finalizado apenas após um longo período. O
esforço dispensado em estar a par de todas as questões é geralmente tão grande que sobra pouco
tempo para as contribuições efetivas. Muitos participantes perdem o interesse ou são absorvidos
por outros comprometimentos externos, deixando muitos projetos pela metade.


4.6 Dependência de Pessoas-Chave

   Muitos projetos de software livre dependem de poucas pessoas. Taurion (2004) afirma que
10% dos participantes contribuem com 78% do código; o segundo décimo, com 12%, o terceiro,
com 3%; os outros, com menos de 1% cada. Existem algumas explicações plausíveis para este
fenômeno. A mais óbvia é que o nível de conhecimento necessário para se analisar e entender
um código-fonte de um sistema grande requer treinamento e experiência. O esforço em adquirir
este conhecimento não é efetuado pela maioria dos participantes. Outra explicação está
relacionada ao nível de reconhecimento que os participantes esperam receber por suas
contribuições. Apenas um número pequeno de participantes acaba se tornando amplamente
reconhecido por suas contribuições, o que tende a fortalecer ainda mais o papel dos
contribuidores principais. Essa dependência pode se tornar um risco se uma pessoa-chave não
puder continuar seu trabalho no projeto por algum motivo. Talvez seja impossível reconstruir
todo seu conhecimento implícito a partir de seus objetos (código-fonte e documentação).
4.7 Escassez de Lideranças Competentes

   O sucesso de um projeto de software livre depende de uma boa e carismática liderança. Além
das qualidades intrínsecas da perspectiva da Engenharia de Software, o líder de projeto precisa
endereçar questões de comunicação, marketing, juízo político e motivação. A liderança
normalmente é feita por persuasão, pois não há um mandato oficial hierarquicamente
estabelecido. O líder é avaliado não só por seus conhecimentos técnicos, mas por sua visão e
habilidade em se comunicar com os co-participantes. (BCG, 2002). Ainda que haja muitos
participantes com conhecimentos técnicos, as exigências são tão seletivas que se torna difícil
preencher todas as posições de liderança com pessoal qualificado. Raymond (1999) diz que o
sucesso do Linux se deve muito mais à excelente liderança exercida por Torvalds do que por
suas habilidades técnicas. A escassez de novos e bons líderes é uma questão muito sensível para
o futuro dos projetos de software livre, conforme atestado pelo próprio Torvalds (SEARLS,
2003).


4.8 Problemas Legais

   A propriedade intelectual, com seus copyrights, patentes, marcas registradas e segredos
comerciais é certamente um dos campos mais obscuros e esotéricos da esfera jurídica,
principalmente quando aplicada ao software e seus algoritmos. É muito difícil saber se
determinado método para se resolver um problema de software já foi patenteado ou não, e a
interpretação dessas leis varia conforme o país.
   Stallman (1999) chegou a afirmar que “A pior ameaça que nós enfrentamos são as patentes
de software que podem colocar algoritmos e características fora dos limites do software livre
por mais de vinte anos”.
   Ainda que esse problema exista para todo o mercado de software (livre e proprietário), no
modelo de desenvolvimento de software livre, distribuído pelo mundo e sem organização
formal, existe um maior risco potencial de se infringirem essas leis. Apenas como exemplo, um
estudo recente conduzido pela Open Source Risk Management28 mostrou que apenas o kernel do
Linux potencialmente viola 283 patentes, incluindo 27 que pertencem à Microsoft. Esse tipo de
preocupação legal, que também varia conforme o país pode prejudicar o futuro do software
livre.


5 Conclusão

   Este artigo procurou mostrar o modelo de desenvolvimento do software livre através da
perspectiva do Trabalho Cooperativo Suportado por Computador. Essa análise ajudou a revelar
um pouco mais do contexto no qual software livre está inserido e reforçar o argumento de que
esse assunto não pode ser explicado somente por uma disciplina ou visão, mas sim através de
um conjunto delas.
   Através da apresentação de um framework conceitual, complementada com um estudo de
caso do desenvolvimento do Linux, foram apresentados os principais elementos e inter-relações
que existem em um projeto típico, com participantes, processos, ferramentas e objetos
produzidos em um modelo cooperativo de trabalho.
   O estudo mostrou também que o fenômeno do software livre, apesar de ainda estar em
formação, vem crescendo bastante nos últimos anos e que sua expansão (e futuro) dependem da
estabilização de alguns fatores hoje apresentados como desafios.




28   http://www.osriskmanagement.com/
Referências
   AOKI, A., Hayashi, K., Kishida, K., Nakakoji, K., Nishinaka, Y., Reeves, B., Takashima,
   A., & Yamamoto,Y. A case study of the evolution of Jun: an object-oriented open-source
   3D multimedia library. In Proceedings of the 23rd international conference on software
   engineering (ICSE 01) (pp. 524–533). Toronto, Canadá, 2001.

   BCG, Boston Consulting Group. Hacker Survey release 0.73, 2002. Disponível em
   www.osdn.com/bcg/BCGHACKERSURVEY-0.73.pdf . Visitado em Jan de 2007.

   BERLECON, Research. FLOSS. Free/Libre and Open Source Software: Survey and Study.
   European Commission, 2002. Disponível em http://www.infonomics.nl/FLOSS/. Visitado
   em Jan de 2007.

   BROOKS, F. P. Jr. The Mythical Man-Month. Addison-Wesley. 2ª ed. 1995

   BROWN, J. S. and Duguid, P. Organizational Learning and Communities-of-Practice:
   Toward a Unified View of Working, Learning, and Innovation, Organization Science, 2(1),
   1991, 40-57

   BUTTON, G., Sharrock, W. Project Work: The Organisation of Collaborative Design and
   Development in SoftwareEngineering, Computer Supported Cooperative Work: The Journal
   of Collaborative Computing, 5, 1996, 369-386

   DAFERMOS, George. Management and Virtual Decentralised Networks: The Linux
   Project,         First         Monday,           2001.           Disponível     em
   http://www.firstmonday.dk/issues/issue6_11/dafermos/ . Visitado em Jan de 2007.

   DEURZEN, Van. Linux Architectures. 2004.
   Disponível em http://home.hccnet.nl/p.van.deurzen/linuxweb/docs/architectures.htm .
   Visitado em Jan de 2007.

   EDWARDS, Kasper. Epistemic Communities, Situated Learning and Open Source Software
   Development Department of Manufacturing Engineering and Management, Technical
   University of Denmark, 2000.

   FIELDING, R. T. Shared leadership in the Apache Project. Communications of the ACM,
   v. 42, n. 4, p. 42–43, abr 1999.

   GANCARZ, M. UNIX Philosophy. Prentice-Hall, 1995.

   HEXSEL, Roberto, Propostas de Ações de Governo para Incentivar o Uso de Software
   Livre, Relatório Técnico do Departamento de Informática da UFPR, 004/2002 , 2002.

   KRAUT, R. E. and Streeter, L. Coordination in SoftwareDevelopment, Communications of
   the ACM, 38(3),1995, 69-81

   KUWABARA, Ko. Linux: A Bazaar at the Edge of Chaos. FirstMonday 5(3), 2000.
   Disponível em http://www.firstmonday.dk/issues/issue5_3/kuwabara/ . Visitado em Jan de
   2007.

   LANCASHIRE, D. Code, culture, and cash: The fading altruism of open source
   development.         FirstMonday,          6(12),         2001.        Disponível em
   http://firstmonday.org/issues/issue6_12/lancashire/ . Visitado em Jan de 2007.
MAÇADA, D. L. TIJIBOY, A.V. Aprendizagem Cooperativa em Ambientes Telemáticos.
In: Congresso Ibero-Americano de Informática na Educação, IV. Brasília, outubro de 1998.

MCKUSICK, M. K. Twenty years of Berkeley UNIX. In: Open Sources. Sebastopol:
O’Reilly and Associates, 1ª ed., 1999. p. 31–46.

MOON, J., SPROULL, L. Essence of Distributed Work: The Case of Linux Kernel. First
Monday. 2000. Disponível em http://www.firstmonday.org/issues/issue5_11/moon/.
Visitado em Jan de 2007.

NAKAKOJI, K., Yamamoto, Y., Nishinaka, Y., Kishida, K., & Ye, Y.. Evolution patterns
of open-source software systems and communities. In Proceedings of the international
workshop on principles of software evolution (IWPSE 2002), Orlando, FL, 2002.

OSI. The Halloween Documents, 1988. Disponível em http://www.catb.org/~esr/halloween/.
Visitado em jan de 2007.

PAVLICEK, C. Embracing insanity: Open source software development. Indianapolis,
Sams, 2000.

RAYMOND, E. S. The Cathedral and The Bazaar. O’Reilly and Associates, 1ª ed., 1999. p.
27–78.

REIS, Christian. Caracterização de um Modelo de Processo para Projetos de Software
Livre, Instituto de Ciências Matemáticas e de Computação, São Carlos SP, 2001.

ROTHFUSS, Gregor. A Framework for Open Source Projects, Universität Zürich, Institut
für Informatik, 2002. Disponível em http://greg.abstrakt.ch/docs/OSP_framework.pdf .
Visitado em Jan de 2005.

SCHARFF, E. D. Open Source: A Conceptual Framework for Collaborative Artifact and
Knowledge. University of Colorado, 2002

STALLMAN, R. M. The GNU Operating System and the Free Software Movement. In:
Open Sources. Sebastopol: O’Reilly and Associates, 1ª. ed., 1999. p. 53–70.

SCHENK, Thomas. Linux: Its history and current distributions. Disponível em
http://www-106.ibm.com/developerworks/library/it-schenk1/schenk1.html, 2001.Visitado
em Jan de 2007.

SEARLS, Doc. Linus & the Lunatics. Transcrição de palestra no Linux Lunacy Geek Cruise
2003. Disponível em http://www.linuxjournal.com/article/7272. Visitado em Jan de 2007.

SHAIKH, M. Cornford, T. 2003. Version Management Tools: CVS to BK in the Linux
Kernel, disponível em http://opensource.mit.edu/papers/shaikhcornford.pdf . Visitado em
Set 2004.

TANENBAUM, Andrew. Operating Systems, Design and Implementation. Prentice-Hall,
1987.

TAURION, Cezar. Software Livre - Potencialidades e Modelos de Negócios. Brasport,
2004.

TORVALDS, L. The Linux Edge. In: Open Sources. Sebastopol: O’Reilly and Associates,
1ª ed., 1999. p. 101–111.
TUOMI, Ilkka. Evolution of the Linux Credits File: Methodological Challenges and
Reference Data for Open Source Research. FirstMonday, 2002 Disponível em
http://www.firstmonday.dk/issues/issue9_6/tuomi/ . Visitado em Jan de 2007.

YAMAUCHI, Y., Yokozawa, M., Shinohara, T., Ishida, T. Collaboration with Lean Media:
How Open Source Succeeds. In: Proceedings of CSCW, 2000. ACM Press. p. 329-338.
Anexo 1

Definições de termos relacionados ao software livre (HEXSEL, 2002)

• BSD: A licença BSD cobre as distribuições de software da Berkeley SoftwareDistribution,
  além de outros programas. Esta é uma licença considerada 'permissiva' porque impõe poucas
  restrições sobre a forma de uso, alterações e redistribuição do software licenciado. O software
  pode ser vendido e não há obrigações quanto à inclusão do código fonte, podendo o mesmo
  ser incluído em software proprietário. Esta licença garante o crédito aos autores do software,
  mas não tenta garantir que trabalhos derivados permanecem como software livre.

• Copyleft: A maioria das licenças usadas na publicação de software livre permite que os
  programas sejam modificados e redistribuídos. Estas práticas são geralmente proibidas pela
  legislação internacional de copyright, que tenta justamente impedir que alterações e cópias
  sejam efetuadas sem a autorização dos autores. As licenças que acompanham software livre
  fazem uso da legislação de copyright para impedir utilização não-autorizada, mas estas
  licenças definem clara e explicitamente as condições sob as quais cópias, modificações e
  redistribuições podem ser efetuadas, para garantir as liberdades de modificar e redistribuir o
  software assim licenciado. A esta versão de copyright, dá-se o nome de copyleft.

• Debian: A licença Debian é parte do contrato social celebrado entre a Debian e a
  comunidade de usuários de software livre, e é chamada de Debian Free SoftwareGuidelines
  (DFSG). Em essência, esta licença contém critérios para a distribuição que incluem, além da
  exigência da publicação do código fonte. Estes critérios são: (a) a redistribuição deve ser
  livre; (b) o código fonte deve ser incluído e deve poder ser redistribuído; (c) trabalhos
  derivados devem poder ser redistribuídos sob a mesma licença do original; (d) pode haver
  restrições quanto à redistribuição do código fonte, se o original foi modificado; (e) a licença
  não pode discriminar contra qualquer pessoa ou grupo de pessoas, nem quanto a formas de
  utilização do software; (f) os direitos outorgados não podem depender da distribuição onde o
  software se encontra; e (g) a licença não pode 'contaminar' outro software.

• Freeware: O termo freeware não possui uma definição amplamente aceita mas é usado com
  programas que permitem a redistribuição mas não a modificação, e seu código fonte não é
  disponibilizado. Estes programas não são software livre.

•   GPL: A Licença Pública Geral GNU (GNU General Public License) é a licença que
    acompanha os pacotes distribuídos pelo Projeto GNU, e mais uma grande variedade de
    software, incluindo o kernel do sistema operacional Linux. A formulação da GPL é tal que ao
    invés de limitar a distribuição do software por ela protegido, ela de fato impede que este
    software seja integrado em software proprietário. A GPL é baseada na legislação
    internacional de copyright.

• Open Source: A licença da Open Source Initiative é derivada da Licença Debian, com as
  menções à Debian removidas.

• Shareware: É o software disponibilizado com a permissão para que seja redistribuído, mas a
  sua utilização implica no pagamento pela sua licença. Geralmente, o código fonte não é
  disponibilizado e portanto modificações são impossíveis.

• Software Comercial: É o software desenvolvido por uma empresa com o objetivo de lucrar
  com sua utilização. Note que 'comercial' e 'proprietário' não são o mesmo. A maioria do
  software comercial é proprietário mas existe software livre que é comercial, e existe software
  não-livre não-comercial.
• Software em Domínio Público: É o software sem copyright. Alguns tipos de cópia, ou
  versões modificadas, podem não ser livres porque o autor permite que restrições adicionais
  sejam impostas na redistribuição do original ou de trabalhos derivados.

• Software Livre (Free Software): É o software disponível com a permissão para qualquer um
  usá-lo, copiá-lo, e distribuí-lo, seja na sua forma original ou com modificações, seja
  gratuitamente ou com custo. Em especial, a possibilidade de modificações implica em que o
  código fonte esteja disponível. Se um programa é livre, potencialmente ele pode ser incluído
  em um sistema operacional também livre. E importante não confundir software livre com
  software grátis porque a liberdade associada ao software livre de copiar, modificar e
  redistribuir independe de gratuidade. Existem programas que podem ser obtidos
  gratuitamente, mas que não podem ser modificados, nem redistribuídos. Por outro lado, existe
  a possibilidade de uso não-gratuito em todas as categorias listadas no que segue. Há uma
  cópia da definição de software livre pela Free SoftwareFoundation publicada na página
  http://www.fsf.org/philosophy/free-sw.pt.html

• Software Proprietário: É aquele cuja cópia, redistribuição ou modificação são em alguma
  medida proibidos pelo seu proprietário. Para usar, copiar ou redistribuir, deve-se solicitar
  permissão ao proprietário, ou pagar para poder fazê-lo.

• Software Semi-livre: É software que não é livre, mas é concedida a permissão para que
  indivíduos o usem, copiem, distribuam e modifiquem, incluindo a distribuição de versões
  modificadas, desde que o façam sem o propósito de auferir lucros. Exemplos de software
  semi-livre são as primeiras versões do Internet Explorer da Microsoft, algumas versões dos
  browsers da Netscape, e o StarOffice.

• X.org: O Consórcio X distribui o X Window System sob uma licença que o faz software livre
  mas não adere ao copyleft. Existem distribuições sob a licença da X.org que são software
  livre, e outras distribuições não o são. Existem algumas versões não-livres do sistema de
  janelas X11 para estações de trabalho e certos dispositivos do IBM-PC que são as únicas
  funcionais disponíveis, sem similares distribuídos como software livre.

Contenu connexe

Tendances

Software Livre
Software LivreSoftware Livre
Software Livreguestdedf2
 
A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...
A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...
A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...Lucas Vinícius
 
Metareciclagem Software Livre
Metareciclagem    Software LivreMetareciclagem    Software Livre
Metareciclagem Software LivreHudson Augusto
 
Educación ciencia y tecnología
Educación ciencia y tecnologíaEducación ciencia y tecnología
Educación ciencia y tecnologíacroreisjp
 
Ficha de trabalho_1_SO
Ficha de trabalho_1_SOFicha de trabalho_1_SO
Ficha de trabalho_1_SONikoameer
 
Ficha de trabalho_1
Ficha de trabalho_1Ficha de trabalho_1
Ficha de trabalho_1fantic3o
 
Apresentação sobre Software Livre
Apresentação sobre Software LivreApresentação sobre Software Livre
Apresentação sobre Software Livreguest6855c7
 
Artigo Jornalistico Web D
Artigo Jornalistico   Web DArtigo Jornalistico   Web D
Artigo Jornalistico Web DJozelena
 
Oficina inpe sadeck
Oficina inpe sadeckOficina inpe sadeck
Oficina inpe sadeckLuis Sadeck
 
Apresentação software livre
Apresentação software livreApresentação software livre
Apresentação software livrejullyanars
 
Crisficha 1 1
Crisficha 1 1Crisficha 1 1
Crisficha 1 1sharik27
 
O desafio das redes sociais no ambiente corporativo
O desafio das redes sociais no ambiente corporativoO desafio das redes sociais no ambiente corporativo
O desafio das redes sociais no ambiente corporativoNeue Labs
 

Tendances (17)

Software Livre
Software LivreSoftware Livre
Software Livre
 
A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...
A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...
A Evolução das Distribuições de SistemaOperacional Linux Patrocinados pela Em...
 
Open Source
Open SourceOpen Source
Open Source
 
Open Source
Open SourceOpen Source
Open Source
 
Open Source
Open SourceOpen Source
Open Source
 
Metareciclagem Software Livre
Metareciclagem    Software LivreMetareciclagem    Software Livre
Metareciclagem Software Livre
 
Educación ciencia y tecnología
Educación ciencia y tecnologíaEducación ciencia y tecnología
Educación ciencia y tecnología
 
Ficha de trabalho_1_SO
Ficha de trabalho_1_SOFicha de trabalho_1_SO
Ficha de trabalho_1_SO
 
Redes sociais
Redes sociaisRedes sociais
Redes sociais
 
Ficha de trabalho_1
Ficha de trabalho_1Ficha de trabalho_1
Ficha de trabalho_1
 
Apresentação sobre Software Livre
Apresentação sobre Software LivreApresentação sobre Software Livre
Apresentação sobre Software Livre
 
Artigo Jornalistico Web D
Artigo Jornalistico   Web DArtigo Jornalistico   Web D
Artigo Jornalistico Web D
 
Interoperabilidade Entre os Padrões ODF e OOXML
Interoperabilidade Entre os Padrões ODF e OOXMLInteroperabilidade Entre os Padrões ODF e OOXML
Interoperabilidade Entre os Padrões ODF e OOXML
 
Oficina inpe sadeck
Oficina inpe sadeckOficina inpe sadeck
Oficina inpe sadeck
 
Apresentação software livre
Apresentação software livreApresentação software livre
Apresentação software livre
 
Crisficha 1 1
Crisficha 1 1Crisficha 1 1
Crisficha 1 1
 
O desafio das redes sociais no ambiente corporativo
O desafio das redes sociais no ambiente corporativoO desafio das redes sociais no ambiente corporativo
O desafio das redes sociais no ambiente corporativo
 

En vedette

Como redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escritoComo redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escritoBiblioteca Escolar Ourique
 
Desafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de Ensino
Desafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de EnsinoDesafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de Ensino
Desafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de EnsinoFormação Cooperativa
 
Modelo de trabalho acadêmico
Modelo de trabalho acadêmicoModelo de trabalho acadêmico
Modelo de trabalho acadêmicomatos236
 
Índice y portada de mi tesis
Índice y portada de mi tesisÍndice y portada de mi tesis
Índice y portada de mi tesislaryenso
 
Capa, contra capa, introdução ,conclusão, biografia,
Capa, contra capa, introdução ,conclusão, biografia,Capa, contra capa, introdução ,conclusão, biografia,
Capa, contra capa, introdução ,conclusão, biografia,Jaqueline Sarges
 

En vedette (6)

Como redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escritoComo redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escrito
 
Desafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de Ensino
Desafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de EnsinoDesafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de Ensino
Desafios do Desenvolvimento: (Trans)Formação Docente e Trabalho de Ensino
 
Modelo de trabalho acadêmico
Modelo de trabalho acadêmicoModelo de trabalho acadêmico
Modelo de trabalho acadêmico
 
Indice de la tesis
Indice  de la tesisIndice  de la tesis
Indice de la tesis
 
Índice y portada de mi tesis
Índice y portada de mi tesisÍndice y portada de mi tesis
Índice y portada de mi tesis
 
Capa, contra capa, introdução ,conclusão, biografia,
Capa, contra capa, introdução ,conclusão, biografia,Capa, contra capa, introdução ,conclusão, biografia,
Capa, contra capa, introdução ,conclusão, biografia,
 

Similaire à Aspectos do Trabalho Cooperativo no Desenvolvimento de Software Livre

Resenha Producao de Software: Software Livre / Código Aberto
Resenha Producao de Software: Software Livre / Código AbertoResenha Producao de Software: Software Livre / Código Aberto
Resenha Producao de Software: Software Livre / Código Abertoantonio sérgio nogueira
 
Software livre: Por que usar?
Software livre: Por que usar?Software livre: Por que usar?
Software livre: Por que usar?UNIEURO
 
Cosmos - Colaboração em Projetos e Office2.0
Cosmos - Colaboração em Projetos e Office2.0Cosmos - Colaboração em Projetos e Office2.0
Cosmos - Colaboração em Projetos e Office2.0ivanlm
 
Ficha de trabalho1 software_open_sorce
Ficha de trabalho1 software_open_sorceFicha de trabalho1 software_open_sorce
Ficha de trabalho1 software_open_sorcebaglungekanchi
 
Software livre: por que usar? (oficial)
Software livre: por que usar? (oficial)Software livre: por que usar? (oficial)
Software livre: por que usar? (oficial)José Nascimento
 
APRESENTAÇÃO TRABALHO II
APRESENTAÇÃO TRABALHO IIAPRESENTAÇÃO TRABALHO II
APRESENTAÇÃO TRABALHO IIguest0f20e6
 
Apresentação sobre Software Livre
Apresentação sobre Software LivreApresentação sobre Software Livre
Apresentação sobre Software Livreguest6855c7
 
Trabalho De Informatica
Trabalho De InformaticaTrabalho De Informatica
Trabalho De Informaticaguest77321e
 
Juventude conectada pspb
Juventude conectada pspbJuventude conectada pspb
Juventude conectada pspbOsvaldo Filho
 
Cscw & Internet
Cscw & InternetCscw & Internet
Cscw & Internetkeitaronit
 
Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Maykon Costa
 
Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Carlos Gleison
 
Apostila LINUX Básico
Apostila LINUX BásicoApostila LINUX Básico
Apostila LINUX BásicoFernando Palma
 
Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Gabriel Rissi
 
Ficha de trabalho so 1 m4 resolução
Ficha de trabalho so 1 m4  resoluçãoFicha de trabalho so 1 m4  resolução
Ficha de trabalho so 1 m4 resoluçãofilipereira
 

Similaire à Aspectos do Trabalho Cooperativo no Desenvolvimento de Software Livre (20)

Resenha Producao de Software: Software Livre / Código Aberto
Resenha Producao de Software: Software Livre / Código AbertoResenha Producao de Software: Software Livre / Código Aberto
Resenha Producao de Software: Software Livre / Código Aberto
 
Software livre: Por que usar?
Software livre: Por que usar?Software livre: Por que usar?
Software livre: Por que usar?
 
Cosmos - Colaboração em Projetos e Office2.0
Cosmos - Colaboração em Projetos e Office2.0Cosmos - Colaboração em Projetos e Office2.0
Cosmos - Colaboração em Projetos e Office2.0
 
Introdução ao Software Livre
Introdução ao Software LivreIntrodução ao Software Livre
Introdução ao Software Livre
 
Ficha de trabalho1 software_open_sorce
Ficha de trabalho1 software_open_sorceFicha de trabalho1 software_open_sorce
Ficha de trabalho1 software_open_sorce
 
Software livre: por que usar? (oficial)
Software livre: por que usar? (oficial)Software livre: por que usar? (oficial)
Software livre: por que usar? (oficial)
 
APRESENTAÇÃO TRABALHO II
APRESENTAÇÃO TRABALHO IIAPRESENTAÇÃO TRABALHO II
APRESENTAÇÃO TRABALHO II
 
Apresentação sobre Software Livre
Apresentação sobre Software LivreApresentação sobre Software Livre
Apresentação sobre Software Livre
 
Trabalho De Informatica
Trabalho De InformaticaTrabalho De Informatica
Trabalho De Informatica
 
Juventude conectada pspb
Juventude conectada pspbJuventude conectada pspb
Juventude conectada pspb
 
Proposta comercial
Proposta comercialProposta comercial
Proposta comercial
 
Cscw & Internet
Cscw & InternetCscw & Internet
Cscw & Internet
 
Socialsoft
SocialsoftSocialsoft
Socialsoft
 
Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1
 
Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1
 
Apostila LINUX Básico
Apostila LINUX BásicoApostila LINUX Básico
Apostila LINUX Básico
 
Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1Apostila linux basico_ncd_v1
Apostila linux basico_ncd_v1
 
Ficha de trabalho so 1 m4 resolução
Ficha de trabalho so 1 m4  resoluçãoFicha de trabalho so 1 m4  resolução
Ficha de trabalho so 1 m4 resolução
 
Módulo I - Linux Básico
Módulo I - Linux BásicoMódulo I - Linux Básico
Módulo I - Linux Básico
 
Cibercultura e redes sociais - aula 01
Cibercultura e redes sociais - aula 01Cibercultura e redes sociais - aula 01
Cibercultura e redes sociais - aula 01
 

Plus de Marcelo Sávio

Trabalhando com jogos eletronicos
Trabalhando com jogos eletronicosTrabalhando com jogos eletronicos
Trabalhando com jogos eletronicosMarcelo Sávio
 
A Trajetória da Internet no Brasil
A Trajetória da Internet no BrasilA Trajetória da Internet no Brasil
A Trajetória da Internet no BrasilMarcelo Sávio
 
Introduction to the cryptography behind blockchain (from roots to quantum cry...
Introduction to the cryptography behind blockchain (from roots to quantum cry...Introduction to the cryptography behind blockchain (from roots to quantum cry...
Introduction to the cryptography behind blockchain (from roots to quantum cry...Marcelo Sávio
 
A carreira na área de TI
A carreira na área de TIA carreira na área de TI
A carreira na área de TIMarcelo Sávio
 
The Dawn of the Internet in Brazil
The Dawn of the Internet in BrazilThe Dawn of the Internet in Brazil
The Dawn of the Internet in BrazilMarcelo Sávio
 
Historias de las TIC en America Latina y el Caribe
Historias de las TIC en America Latina y el CaribeHistorias de las TIC en America Latina y el Caribe
Historias de las TIC en America Latina y el CaribeMarcelo Sávio
 
Transformation and change - 100 mini papers - eBook
Transformation and change - 100 mini papers - eBookTransformation and change - 100 mini papers - eBook
Transformation and change - 100 mini papers - eBookMarcelo Sávio
 
Transformacao e mudanca - 100 mini papers - eBook
Transformacao e mudanca - 100 mini papers - eBookTransformacao e mudanca - 100 mini papers - eBook
Transformacao e mudanca - 100 mini papers - eBookMarcelo Sávio
 
100 Mini Papers sobre tecnologia
100 Mini Papers sobre tecnologia100 Mini Papers sobre tecnologia
100 Mini Papers sobre tecnologiaMarcelo Sávio
 
Gameficacao do mundo corporativo
Gameficacao do mundo corporativoGameficacao do mundo corporativo
Gameficacao do mundo corporativoMarcelo Sávio
 
Enterprise Architecture Governance for an Enterprise Transformation Journey: ...
Enterprise Architecture Governance for an Enterprise Transformation Journey: ...Enterprise Architecture Governance for an Enterprise Transformation Journey: ...
Enterprise Architecture Governance for an Enterprise Transformation Journey: ...Marcelo Sávio
 
Cloud Computing - Technologies and Trends
Cloud Computing - Technologies and TrendsCloud Computing - Technologies and Trends
Cloud Computing - Technologies and TrendsMarcelo Sávio
 
Historia da informática na América Latina
Historia da informática na América LatinaHistoria da informática na América Latina
Historia da informática na América LatinaMarcelo Sávio
 
Governança da Arquitetura Corporativa
Governança da Arquitetura CorporativaGovernança da Arquitetura Corporativa
Governança da Arquitetura CorporativaMarcelo Sávio
 
Gerenciando os Service Level Agreements (SLAs)
Gerenciando os Service Level Agreements (SLAs)Gerenciando os Service Level Agreements (SLAs)
Gerenciando os Service Level Agreements (SLAs)Marcelo Sávio
 
Cloud Computing Overview
Cloud Computing OverviewCloud Computing Overview
Cloud Computing OverviewMarcelo Sávio
 
Certificações em Arquitetura de TI
Certificações em Arquitetura de TICertificações em Arquitetura de TI
Certificações em Arquitetura de TIMarcelo Sávio
 

Plus de Marcelo Sávio (20)

Trabalhando com jogos eletronicos
Trabalhando com jogos eletronicosTrabalhando com jogos eletronicos
Trabalhando com jogos eletronicos
 
A Odisseia do Odyssey
A Odisseia do OdysseyA Odisseia do Odyssey
A Odisseia do Odyssey
 
A Trajetória da Internet no Brasil
A Trajetória da Internet no BrasilA Trajetória da Internet no Brasil
A Trajetória da Internet no Brasil
 
Introduction to the cryptography behind blockchain (from roots to quantum cry...
Introduction to the cryptography behind blockchain (from roots to quantum cry...Introduction to the cryptography behind blockchain (from roots to quantum cry...
Introduction to the cryptography behind blockchain (from roots to quantum cry...
 
A carreira na área de TI
A carreira na área de TIA carreira na área de TI
A carreira na área de TI
 
50 anos do UNIX
50 anos do UNIX50 anos do UNIX
50 anos do UNIX
 
The Dawn of the Internet in Brazil
The Dawn of the Internet in BrazilThe Dawn of the Internet in Brazil
The Dawn of the Internet in Brazil
 
Historias de las TIC en America Latina y el Caribe
Historias de las TIC en America Latina y el CaribeHistorias de las TIC en America Latina y el Caribe
Historias de las TIC en America Latina y el Caribe
 
Transformation and change - 100 mini papers - eBook
Transformation and change - 100 mini papers - eBookTransformation and change - 100 mini papers - eBook
Transformation and change - 100 mini papers - eBook
 
Transformacao e mudanca - 100 mini papers - eBook
Transformacao e mudanca - 100 mini papers - eBookTransformacao e mudanca - 100 mini papers - eBook
Transformacao e mudanca - 100 mini papers - eBook
 
100 Mini Papers sobre tecnologia
100 Mini Papers sobre tecnologia100 Mini Papers sobre tecnologia
100 Mini Papers sobre tecnologia
 
Gameficacao do mundo corporativo
Gameficacao do mundo corporativoGameficacao do mundo corporativo
Gameficacao do mundo corporativo
 
O surgimento da WWW
O surgimento da WWWO surgimento da WWW
O surgimento da WWW
 
Enterprise Architecture Governance for an Enterprise Transformation Journey: ...
Enterprise Architecture Governance for an Enterprise Transformation Journey: ...Enterprise Architecture Governance for an Enterprise Transformation Journey: ...
Enterprise Architecture Governance for an Enterprise Transformation Journey: ...
 
Cloud Computing - Technologies and Trends
Cloud Computing - Technologies and TrendsCloud Computing - Technologies and Trends
Cloud Computing - Technologies and Trends
 
Historia da informática na América Latina
Historia da informática na América LatinaHistoria da informática na América Latina
Historia da informática na América Latina
 
Governança da Arquitetura Corporativa
Governança da Arquitetura CorporativaGovernança da Arquitetura Corporativa
Governança da Arquitetura Corporativa
 
Gerenciando os Service Level Agreements (SLAs)
Gerenciando os Service Level Agreements (SLAs)Gerenciando os Service Level Agreements (SLAs)
Gerenciando os Service Level Agreements (SLAs)
 
Cloud Computing Overview
Cloud Computing OverviewCloud Computing Overview
Cloud Computing Overview
 
Certificações em Arquitetura de TI
Certificações em Arquitetura de TICertificações em Arquitetura de TI
Certificações em Arquitetura de TI
 

Aspectos do Trabalho Cooperativo no Desenvolvimento de Software Livre

  • 1. Aspectos do Trabalho Cooperativo no Desenvolvimento de Software Livre Marcelo Sávio IT Architect http://www.linkedin.com/in/msavio http://msavio.myplaxo.com/ Rio de Janeiro - Janeiro de 2007 Resumo. Software livre é todo software cujo código fonte está disponibilizado publicamente, e seu conteúdo pode ser livremente modificado e redistribuído (e não sendo permitida a apropriação desse código). Uma conseqüência indireta desta liberdade é o aparecimento de comunidades de desenvolvimento que trabalham de forma descentralizada, através da Internet, desenvolvendo e mantendo os diferentes projetos de software livre. Essas comunidades, que a primeira vista parecem estar desorganizadas, produzem software de qualidade, com alta produtividade e satisfação entre os seus desenvolvedores e usuários. O objetivo deste artigo é verificar os aspectos do Trabalho Cooperativo Suportado por Computador, CSCW (Computer Supported Cooperative Work), que suportam o desenvolvimento descentralizado de software livre, através do estudo de caso do desenvolvimento do sistema operacional Linux. 1 Introdução Apesar da definição apresentada acima, ainda existem controvérsias em relação ao que seja precisamente considerado software livre. Isso se dá pelo fato de que se trata de um assunto multifacetado, que contém questões relacionadas a assuntos como engenharia de software, propriedade intelectual, modelo econômico, política tecnológica, cooperação1, liderança e motivação. Uma olhada mais de perto em alguns projetos de software livre revela, ainda, uma grande diversidade de objetivos, formas de participação e técnicas de implementação. Ao analisar as atividades que suportam o desenvolvimento de software livre, do ponto de vista do trabalho cooperativo suportado por computador, é possível identificar um desafio comum a todos os projetos: a necessidade da criação e manutenção de um ambiente sociotécnico onde os participantes possam, de forma cooperativa, construir soluções para os problemas de interesse mútuo. As práticas do desenvolvimento de software livre são importantes para a pesquisa em CSCW por dois motivos principais. Primeiro porque o desenvolvimento de software é tradicionalmente um processo de coordenação intensiva que tem atraído pesquisadores de CSCW (KRAUT, 1995; BUTTON, 1996) e segundo porque o processo de desenvolvimento de software livre é efetuado por participantes geograficamente dispersos, com a ajuda de tecnologias colaborativas como o email, conversação on-line, World Wide Web e sistemas de controle de versão e de gerenciamento de configuração, tecnologias que, por sua vez, têm sido um aspecto central nas pesquisas de CSCW. 1 O conceito de cooperação é mais complexo que o de interação e de colaboração, pois além de pressupor ambos requer relações de respeito mútuo e não hierárquicas entre os envolvidos, uma postura de tolerância e convivência com as diferenças e um processo de negociação constante. Percebemos que a diferença fundamental entre os conceitos de colaboração e cooperação reside no fato de que para haver colaboração o indivíduo deve interagir com o outro existindo ajuda - mútua ou unilateral. Para existir cooperação deve haver interação, colaboração, mas também objetivos comuns, atividades e ações conjuntas e coordenadas. (MAÇADA; TIJIBOY, 1998).
  • 2. 1.1 Histórico Resumido do Software Livre (e do Linux) Software Livre é um conceito antigo, embora ainda não tivesse este nome específico desde o início. Até a década de 70, o valor de um computador estava contido essencialmente no hardware, que tinha um custo muito alto. A maioria dos fabricantes fornecia, junto com o hardware vendido, o código fonte de seus sistemas operacionais e aplicativos. Embora as licenças não explicitassem claramente a liberdade, a redistribuição do software era vista como positiva, e quase todo o software era fornecido com o seu código fonte (STALLMAN, 1999). Os fabricantes até estimulavam, como forma de diminuir os custos de suporte, o compartilhamento de informações e melhorias de software produzidas entre seus usuários2. Assim o software era, em geral, desenvolvido de forma cooperativa e aberta em diversas universidades e empresas. O sistema operacional UNIX, nos seus anos iniciais, foi um exemplo desta época (MCKUSICK, 1999), assim como o desenvolvimento da Internet foi inteiramente baseado no uso e compartilhamento de programas de código fonte aberto em escala mundial. No início da década de 80 o cenário mudou, quando ganhou força o licenciamento restritivo, que não permitia a redistribuição do software fornecido e este passou a significar basicamente o módulo executável, suprimindo o acesso à maioria dos códigos-fonte. Esta mudança de cenário fez com que, em 1984, (STALLMAN, 1999) criasse a Free Software Foundation (FSF3). A filosofia do software livre se baseia em uma definição de liberdade. Por causa da ambigüidade em inglês da palavra "free", tornou-se necessário esclarecer que free software não se refere ao preço, mas à liberdade dos usuários de executar, copiar, distribuir, estudar, modificar e melhorar o software. Mais precisamente, referem-se a quatro tipos de liberdades: 1. A liberdade de executar programas para qualquer propósito. 2. A liberdade de estudar como o programa funciona e adaptá-lo às suas necessidades (o acesso ao código fonte é essencial para isso). 3. A liberdade para redistribuir cópias do programa de modo que outros se beneficiem. 4. A liberdade de melhorar o programa e distribuir o seu aperfeiçoamento para o público, de modo que toda a comunidade se beneficie (novamente o código fonte é necessário). O primeiro projeto da FSF foi o de promover o desenvolvimento de um novo sistema operacional, completamente livre. Para garantir esta liberdade, criou em 1989 um novo modelo de licenciamento de software, a General Public License (GPL), descrita no Anexo 1. O novo sistema operacional que seria desenvolvido, e que teria o objetivo de ser compatível com UNIX, foi chamado de GNU4 (um acrônimo recursivo que significa GNU is Not UNIX). O desafio não se restringia apenas à criação do núcleo do sistema em si (chamado HURD e que ainda não está pronto até hoje), mas também de uma coleção de aplicativos, ferramentas e bibliotecas que permitissem sua plena utilização, sem perder a compatibilidade com o UNIX original. A cultura em torno do movimento de software livre, de certa forma, está ligada à cultura em torno do UNIX, já que os principais representantes do movimento foram usuários desse sistema, que tinha uma natureza aberta e uma filosofia própria, sumarizada por Gancarz (1995) como sendo composta dos seguintes pontos: 1. Pequeno é belo; 2. Faça cada programa perfazer bem apenas uma tarefa apenas; 3. Construa um protótipo assim que possível; 4. Escolha portabilidade sobre eficiência; 5. Armazene dados numéricos em arquivos texto; 6. Faça reuso do software para sua vantagem; 7. Use scripts shell para aumentar portabilidade e reuso; 8. Evite interfaces restritivas com o usuário; 9. Faça cada programa ser um filtro de dados para que possa ser usado em conjunto com outros. 2 Havia um grande compartilhamento de software entre os participantes dos grupos de usuários, como o SHARE (para usuários de sistemas IBM) e o DECUS (para usuários de sistemas DEC). 3 http://www.fsf.org/ 4 http://www.gnu.org/
  • 3. Em 1991, Torvalds (1999) então estudante da Universidade de Helsinki (Finlândia), iniciou o desenvolvimento do Linux, um núcleo de sistema operacional compatível com o UNIX, a partir do reuso de códigos e idéias do Minix, um pequeno sistema operacional de uso acadêmico criado por Tanenbaum (1987). A partir da primeira versão, Torvalds convidou, via newsgroups da Internet, outros desenvolvedores a contribuírem nessa empreitada. Houve bastante adesão e, de forma surpreendentemente rápida, a codificação e a manutenção constantes neste núcleo, o fizeram evoluir para se tornar um software com funcionalidades similares às dos núcleos dos sistemas UNIX do mercado (SCHENK, 2001). O Linux, ao longo do seu desenvolvimento, utilizou (e ainda utiliza) muitas ferramentas do Projeto GNU da FSF e por esta razão o sistema hoje também é chamado de GNU/Linux. O licenciamento através da GPL e a utilização da Internet como o canal principal de comunicação e desenvolvimento transformaram o Linux no mais importante exemplo de software livre desenvolvido de forma aberta e descentralizada. Raymond (1999) rotulou os modelos de desenvolvimento de software e chamou de “Bazar” esse modelo descentralizado e cooperativo, em contraposição ao “Catedral”, modelo tradicional no qual o desenvolvimento é realizado de forma fechada e pouco cooperativa. Ele reforçou esta perspectiva através da afirmação de que o Linux é um contra-exemplo da “Lei de Brooks”, uma lei clássica da Engenharia de Software, que diz o seguinte: “...o tempo de um programador não é acumulativo, pois ao adicionar desenvolvedores em um projeto atrasado de software faz com que ele se torne mais atrasado ainda e que a complexidade e os custos de comunicação de um projeto crescem com o quadrado do número de desenvolvedores, enquanto o trabalho feito cresce somente linearmente” (BROOKS, 1995). Outra característica do modelo Bazar, importante para a qualidade do objeto produzido, é ter uma grande base de usuários com acesso ao código fonte, pois segundo Raymond (1999) “Se exposto a um número suficiente de olhos, todos os bugs são superficiais”, pois a depuração de erros é uma atividade paralelizável e será resolvida mais rapidamente quanto maior for a base de usuários participantes. O tamanho e a agilidade de um projeto de software livre, não são as únicas qualidades que o distinguem de um modelo “Catedral”. Outra importante diferença está em sua organização interna, particularmente na ausência de uma coordenação global sob uma autoridade central e pela inexistência de um planejamento de projeto do tipo “Top-Down”. Aliás, em software livre normalmente a estratégia vem depois do desenvolvimento e a ação antes do planejamento (TAURION, 2004). A partir de 1988 o software livre se tornou notícia cada vez mais freqüente na imprensa, quando a Netscape abriu o código do seu principal produto, o Communicator e também quando empresas de grande porte como IBM e Oracle começaram dar suporte ao Linux e ao Apache. Esse ano também ficou marcado como o ano que a Microsoft reconheceu, pela primeira vez, o Linux como competidor importante (OSI, 1988). Muitas vezes o termo software livre (free software) se confunde com software aberto (open source). Isso passou a acontecer principalmente após a criação da Open Source Initiative (OSI5), em 1988. Diferentemente da FSF, que suporta somente o uso de suas próprias licenças, a OSI não tem licenças próprias, mas certifica todas as dezenas licenças existentes no mercado (inclusive as da FSF) dentro de seus próprios parâmetros de software aberto. A OSI é uma entidade conciliadora, que garante às empresas que praticam o modelo comercial de desenvolvimento de software, uma porta de entrada no movimento de software aberto sem necessariamente adotar as licenças da FSF, representando assim uma espécie de alternativa intermediária. Desta forma, todo software livre é, por definição, aberto, porém nem todo software aberto é livre. 5 http://www.opensource.org/
  • 4. 1.2 Os Projetos de Software Livre Embora não exista uma definição precisa do que seja um projeto de software livre, existe um consenso informal de que o software em conjunto com seus desenvolvedores, usuários e repositórios de código e documentos constitui um projeto, que desta forma abrange: • Código fonte, que é o software propriamente dito, mas que existe em forma de inúmeras cópias entre todos seus usuários e repositórios de dados. Software livre, em geral, tem uma versão bem definida e distribuída a partir de um ponto central conhecido para o Projeto. • Um grupo de desenvolvedores, que trabalha para codificar e corrigir o software. Os desenvolvedores, em todos os casos e sem exceção, trabalham cooperativamente através da Internet e podem ter status diferenciados dentro do projeto (FIELDING, 1999). • Os usuários do software. Apesar de todo software ter usuários, sua participação em projetos de software livre é essencial, pois discutem inovações e apresentam erros encontrados com freqüência, incentivando os desenvolvedores a trabalhar por um produto melhor (RAYMOND, 1999). • Os repositórios de documentos e códigos. Normalmente todo projeto tem algum site central que é uma referência para desenvolvedores e usuários buscarem códigos e informações atualizadas. É interessante perceber que todo o processo de desenvolvimento e distribuição depende essencialmente do uso da Internet, e que esta é um pré-requisito para a existência de um projeto de software livre. Segundo o Sourceforge6, website do Open Source Technology Group (OSTG7), que é o maior repositório de software livre e de código aberto disponível na Internet, existem em seus registros mais de 130 mil projetos, em diferentes estágios de desenvolvimento, classificados da seguinte forma: • Planejamento: Nenhum código foi escrito ainda e o escopo do projeto ainda está sendo definido, Logo que algum resultado tangível em forma de código apareça, o projeto entra no próximo estágio; • Pré-Alfa: Código muito preliminar produzido. Não é esperado, entretanto que este código seja capaz de compilar ou ser executado. Observadores externos ao projeto poderão ter dificuldade em entender o significado do código. Assim que uma intenção coerente que indique uma direção seja percebida no código, o projeto passa para o estágio seguinte; • Alfa: O código produzido funciona pelo menos de forma parcial e o projeto começa a tomar forma e absorver novas características. À medida que o número de sugestões e modificações começa a diminuir, o projeto entra no estágio seguinte; • Beta: O código está, de uma forma geral, completo em relação às características propostas no projeto original, mas requer testes de depuração. Quando o número de erros estiver reduzido o suficiente para entrar em produção, o projeto passa para o estágio seguinte; • Estável: O software é utilizável e confiável o suficiente. As mudanças serão aplicadas cuidadosamente e com o objetivo de aumentar a estabilidade, nunca de adicionar funcionalidades. Se nenhuma mudança significante acontecer em um período longo, o projeto entra no último estágio, mesmo se problemas menores ainda possam existir; 6 http://sourceforge.net/ 7 http://www.ostg.com/
  • 5. • Maduro: Há muito pouco ou nenhum desenvolvimento no código, uma vez que o software preenche todos os seus objetivos corretamente. Mudanças serão aplicadas com extremo cuidado. Pode permanecer nesta fase por vários anos, até que se torne obsoleto ou substituído por outro melhor. Ainda assim o código permanecerá indefinidamente disponível para servir a objetivos educacionais; • Inativo: Projeto interrompido por falta de manutenção, movimentação de arquivos ou abandono por parte de seus líderes (projeto órfão). 2 O Modelo de Desenvolvimento do Software Livre Quando o desenvolvimento é feito por uma equipe pequena e local, ou por uma comunidade de prática, onde os participantes estão fortemente ligados uns aos outros, o trabalho cooperativo é certamente mais fácil, pois, nessas comunidades de prática, os membros podem aprender as novidades de forma mais eficiente, resolver seus problemas de maneira mais tranqüila, e ainda têm mais possibilidades de encontrar novas oportunidades de inovação (BROWN, 1991). Em contraste, a coordenação de uma equipe numerosa e remota precisa ser inevitavelmente formal e o gerenciamento das contingências sempre é uma tarefa muito mais difícil de gerenciar (KRAUT, 1995). Os projetos de desenvolvimento distribuído de software livre apresentam características comuns, quando analisados do ponto de vista de construção cooperativa. Segundo Scharff (2002), essas características comuns podem ser mapeadas em um framework que as organiza de forma descritiva em um modelo que enfatiza a construção cooperativa. A figura abaixo representa graficamente este framework conceitual, ilustrando os quatro componentes principais de um projeto de software livre: As pessoas (participantes), o que eles estão criando (objeto produzido), os processos empregados (processos colaborativos) e os meios usados para comunicação e coordenação do projeto (tecnologias colaborativas). Fig. 1. Framework conceitual do desenvolvimento do software livre 2.1 Os Participantes São os componentes principais de um projeto de software livre. Sem um grupo de participantes ativos não haverá software produzido ou este será apenas um pedaço de software sem mudanças. A participação em um projeto de software livre abrange, além da produção do código fonte em si, a contribuição em forma de idéias, feedbacks, correções e demonstrações. Assim, os participantes podem ser simpatizantes, usuários, desenvolvedores, testadores, documentadores ou evangelistas. Geralmente são ativamente envolvidos em todas as fases de um projeto e trabalham de forma voluntária, motivados por uma mentalidade altruísta (RAYMOND, 1999).
  • 6. Um estudo demográfico realizado por Boston (2002) com uma população de líderes e desenvolvedores principais de projetos registrados no Sourceforge, revelou que entre os entrevistados: • 72,6% disseram que, quando estão programando, perdem a noção do tempo por estarem motivados, sendo o tempo de sono considerado a principal contrapartida resultante da participação em um projeto de software livre seguida de perto pela vida social; • 44,9% são motivados a trabalhar no projeto pelo desafio intelectual que representa; • Apenas 11,1% revelaram como motivação principal desbancar o software proprietário; • 70% dos participantes são voluntários e não são financeiramente recompensados (direta ou indiretamente) pelo seu trabalho no projeto; • O tempo médio de trabalho gasto nos projetos foi de 14,9 horas por semana; • 48,1% revelou que o maior benefício pessoal é o aumento do conhecimento;. • 83% se identificaram com a comunidade hacker; • 70,2 % dos participantes estão entre 22 e 38 anos, com a média em torno de 30 anos; • A população provém de dezenas de países, e a maior parte vem EUA, Alemanha e Reino Unido; • 45,4 % dos participantes são programadores profissionais e a média de experiência de 11 anos; • A maioria afirmou esperar do líder do projeto não só a realização de tarefas práticas (criação da base de código original e contribuições constantes), mas uma boa visão de longo prazo, iniciativa para diálogo, e disposição para integrar contribuições. 2.2 O Objeto Produzido É o resultado da criação e dos refinamentos sucessivos. Ainda que a produção de código fonte seja atividade central de um projeto de software livre, este não é o único produto final, pois também figuram neste componente toda a documentação, os relatórios de defeitos, as ferramentas de instalação e outros materiais de suporte. A versão do software recomendada para uso em produção é chamada de distribuição padrão. 2.3 Os Processos Colaborativos São convenções, procedimentos, práticas, papéis e responsabilidades que regem as interações entre os membros de um projeto de software livre. Geralmente são difíceis de definir, pois são conhecimentos tácitos, que a comunidade pode nem perceber que adota, ainda que certamente estejam presentes e desempenhem um papel importante. Diferentes comunidades podem ter diferentes perspectivas em relação à construção cooperativa, seja enfatizando a correção de erros, promovendo novas funcionalidades ou criando referências de implantação. Essas diferentes perspectivas afetam a natureza dos processos colaborativos (NAKAKOJI et al., 2002), e normalmente aparecem quando são endereçadas as questões dos participantes e as respectivas respostas da comunidade. São situações que invariavelmente remetem a novas situações de colaborações, como por exemplo: • Quando uma comunidade é intolerante com perguntas simples ou assume uma postura defensiva perante uma sugestão, pode inibir os participantes; • Se algum participante quer contribuir com uma correção ou melhoria, a comunidade deve ter processos para absorver e encaminhar estas questões; • É necessário que a comunidade esteja preparada para atender às múltiplas contribuições em paralelo para vários pedaços ou módulo do software em questão; • Finalmente é preciso ter um processo de adoção de mudanças na distribuição padrão, pois se nenhuma contribuição for incorporada, os participantes podem se sentir discriminados no projeto.
  • 7. Em um projeto de software livre, este ciclo de discussão, mudança e incorporação de mudanças, por definição não termina nunca, pelo menos enquanto houver o projeto. A técnica mais adotada nos projetos de software livre é a utilização de alguma forma de liderança. Normalmente um líder de projetos é uma pessoa (ou um pequeno grupo de pessoas) que participou da concepção da idéia ou de sua implementação inicial e que, principalmente, goza de respeito e reconhecimento por parte dos outros membros da comunidade. O papel desempenhado por um líder em um projeto de software livre pode variar muito porque depende fortemente da pessoa que exerce esta liderança, a começar pela própria definição desta função, referenciada por diversos nomes como “chefe”, “arquiteto-chefe”, “mantenedor”, “coordenador”, etc. Em linhas gerais o líder provê direção e coerência para o projeto, resolve eventuais disputas e mantém o controle da distribuição padrão, diferenciando-se assim de um ambiente corporativo tradicional, cuja liderança normalmente está inserida em um contexto hierárquico de uma “cadeia de comando”. Outra técnica muito disseminada na organização de processos colaborativos de software livre diz respeito ao framework do projeto em si, que paraleliza a organização da comunidade e a arquitetura do software que está sendo desenvolvido. Entre as estruturas organizacionais típicas temos as decomposições funcionais hierárquicas em módulos fracamente acoplados e um núcleo central com módulos encaixáveis. Um importante objetivo do framework deste tipo é a capacidade que oferece de, dado um problema específico, saber quais as mudanças que serão necessárias e onde precisam ser feitas. A divisão de tarefas, diferente do modelo tradicional, é feita de forma democrática e baseada no interesse pessoal dos participantes, ainda que, quando muitas pessoas estejam trabalhando no desenvolvimento de uma mesma parte do sistema, possa haver uma delegação de tarefas visando evitar conflitos e que normalmente é explicitada através de uma lista de participantes e de subprojetos ativos, criando uma percepção informal de quem está trabalhando no quê. É importante frisar que cada participante contribui com o software livre por motivos pessoais e, normalmente, poucos se dedicam a fazer tarefas consideradas “chatas” (como documentação ou interfaces), ainda que sejam importantes. Um conceito implícito do software livre que tem profundas implicações no processo colaborativo é o compartilhamento de informações. Qualquer um pode ter acesso, ler ou modificar qualquer código fonte no sistema. Este caráter público do código cria uma espécie de pressão social que motiva a produção de código de qualidade, pois todos os participantes querem que suas contribuições sejam reconhecidamente positivas para a comunidade (AOKI et al., 2001). Mudanças em um projeto de software livre acontecem o tempo todo e o desafio é manter um software de qualidade sem ofender os membros da comunidade, pois críticas ou mudanças em um pedaço de código podem ser interpretadas como uma crítica pessoal. A submissão não só de erros e críticas, mas de correções e sugestões é importante para o desenvolvimento de uma comunidade (PAVLICEK, 2000). 2.4 As Tecnologias Colaborativas As tecnologias colaborativas desempenham duas atividades essenciais ao processo de construção cooperativa. A primeira é dar aos participantes um canal de comunicação entre si e a segunda fornece mecanismos de armazenamento, distribuição e acompanhamento de versões de objetos produzidos pela comunidade. Ambas as atividades podem se basear em ferramentas síncronas ou assíncronas e de forma independente da sofisticação técnica e das questões temporais, ou seja, podem ser realizadas por contato físico face-a-face, videoconferência, bate- papo eletrônico, cartas postais, etc..
  • 8. 2.4.1 Comunicação A maioria dos projetos de software livre é virtual, com participantes espalhados ao redor do mundo e, mesmo quando a maioria das pessoas de um projeto está em um único país, as dificuldades de agendar reuniões com presença física são consideráveis, porém quando os participantes se encontram fisicamente, estas reuniões são tão importantes quanto qualquer outra tecnologia colaborativa (LANCASHIRE, 2001). A Internet é um elemento indispensável na criação e desenvolvimento de projetos de software livre. Como os projetos de software livre tiveram sua origem e disseminação em paralelo com origem e disseminação da própria Internet, as principais tecnologias colaborativas utilizadas passam pelas ferramentas disponíveis nessa rede. Sobre esse aspecto Yamauchi (2000) oferece uma visão geral dos mecanismos de comunicação usados em projetos de software livre e afirma que, apesar da tendência acadêmica da pesquisa em CSCW apontar para a produção de ferramentas complexas para suportar trabalho cooperativo desta natureza, os projetos de software livre sobrevivem e comprovam a eficácia do uso de ferramentas e meios de comunicação simples e disponíveis há muito tempo na Internet, como o email, as listas de distribuição, os newsgroups, os chats e os sites repositórios de conteúdo. Os canais de comunicação baseados na Internet são relativamente baratos (quando comparadas às ligações telefônicas internacionais, reuniões com presença física e videoconferência por satélites) e aqueles com características assíncronas são importantes para minimizar o problema das fronteiras geográficas e dos fusos horários, especialmente na coordenação de projetos de maior porte, que aliados à capacidade de alcance mundial da Internet faz com que os projetos de software livre atraiam muito mais participantes do que conseguiriam se fossem grupos locais ou geograficamente limitados. 2.4.2 Armazenamento e controle de versões e erros Os mecanismos de armazenamento, distribuição e acompanhamento de objetos produzidos pela comunidade também utilizam ferramentas disponíveis na Internet. A distribuição padrão normalmente é disponibilizada em website conhecido, que funciona como repositório daquela versão (estática) até que seja substituída por outra mais nova. Cada vez mais projetos de software livre estão adotando ferramentas de controle de versão para gerenciamento do conteúdo do objeto produzido. Essas ferramentas são vistas como uma extensão natural do processo de desenvolvimento, permitindo que se possam realizar modificações paralelas de forma coerente e padronizada, através de um mecanismo automatizado para identificar e controlar as modificações realizadas nos arquivos de um projeto ao longo do tempo, garantindo a integridade e a rastreabilidade das modificações. Para enviar as modificações feitas em um objeto, um participante não precisa enviar todo o conjunto de arquivos, pois as ferramentas específicas normalmente extraem a diferença do conjunto original para o modificado e somente o delta precisa ser enviado. Um componente da mesma ferramenta, do outro lado, se encarrega de aplicar as modificações e gerar a nova versão. Esse recurso é importante na economia do uso da rede, pois os arquivos com as diferenças normalmente são substancialmente menores do que as versões completas dos arquivos. Existem diversas ferramentas em uso nos projetos de software livre, como BitKeeper8, Subversion9 e Revision Control System (RCS10), porém a mais utilizada atualmente é a Concurrent Versions System (CVS11), um software (livre) relativamente simples, que foi 8 http://www.bitkeeper.com/ 9 http://subversion.tigris.org/ 10 http://www.cs.purdue.edu/homes/trinkle/RCS/ 11 http://ximbiot.com/cvs/wiki/
  • 9. desenvolvido suportar grupos de trabalho voltados para o desenvolvimento de projetos de construção cooperativa, seja de códigos fonte, documentação, arquivos de configuração, etc. O CVS surgiu em 1986 como uma coleção de scripts para melhorar o RCS e depois se transformou em uma ferramenta própria, que funciona segundo o modelo copy-modify-merge (copia-modifica-integra) que, baseado no trabalho off-line, permite que múltiplos participantes efetuem, de forma independente, alterações em suas cópias locais do objeto, uma vez que não utiliza mecanismos de exclusão mútua. A seguir estão apresentados os principais aspectos do fluxo de trabalho do CVS, extraído de Reis (2001): Fig. 2. Diagrama de fluxo de trabalho com o uso do CVS (REIS, 2001). • Repositório: Consiste em um conjunto de arquivos mantido em um local central (normalmente um servidor conectado à Internet, que permita acesso anônimo). Opera, principalmente, segundo um modelo de incrementos, ou seja, armazena as cópias mais atuais dos arquivos do projeto, e as diferenças entre esta e as versões anteriores. • Cópia Local: Qualquer participante interessado solicita ao servidor, através de uma ferramenta front-end, uma cópia do objeto em uma determinada versão desejada. Uma vez criada esta cópia local, também chamada de sandbox, o participante tem acesso total aos arquivos que deseja trabalhar e pode aplicar suas modificações. O participante pode sempre solicitar ao servidor uma atualização de sua base de objeto local, recebendo as alterações que foram integradas ao repositório principal após a criação da sua cópia local. • Integração: Ao alterar o código, o participante está livre de qualquer interação com o repositório e quando julgar que sua versão alterada está pronta para ser integrada à base principal, usa a ferramenta front-end para submeter o objeto de volta ao repositório central. A esta ação de integração é dado o nome de checkin ou merge. • Resolução de conflitos: Se múltiplos participantes alteram o mesmo trecho de um objeto, conceitualmente ocorre um conflito. O processo de resolução de conflitos é feito da seguinte forma: O primeiro participante a integrar um objeto ignora, a princípio, o fato de que outros estejam trabalhando no mesmo trecho. Cada participante subseqüente que iniciar uma ação de merge receberá do repositório a mensagem de que precisa atualizar a sua versão local (já que
  • 10. uma integração no mesmo arquivo foi feita pelo primeiro participante). Neste momento, ao atualizar a cópia local a ferramenta irá informar que houve alterações provindas do repositório no mesmo trecho de código alterado localmente. Estes trechos do código são marcados com indicadores que diferenciam a versão do repositório da versão local. O participante precisa analisar com cuidado as alterações e decidir de que forma o código deve ficar; ele pode resolver o conflito removendo uma das versões, mas freqüentemente a opção correta é integrar mudanças de ambas as versões num novo trecho único. • Versões: Cada arquivo modificado no repositório recebe uma versão numérica. É possível criar aliases (apelidos) que abstraiam as versões de um conjunto de arquivos em um determinado instante do tempo. Com isso, é possível reverter alterações de arquivos individuais para versões anteriores, e também regenerar uma versão completa do repositório em um determinado momento. Do ponto de vista do participante, o CVS permite que se comparem facilmente as alterações feitas na sua cópia local com qualquer versão integrada no repositório, e torna possível reverter alterações integradas no repositório central para versões anteriores. Este último recurso é normalmente utilizado para remover alterações problemáticas que tenham causado algum um defeito ou regressão funcional no objeto produzido. • Branches: Além das versões alternativas da base de objeto principal, o CVS permite que se crie uma linha de versões paralelas à principal. Resumidamente, é estabelecido um branch (bifurcação) a partir do código principal, chamado trunk (tronco). Alterações integradas sobre este branch são isoladas, não refletindo no tronco. É possível criar um número arbitrário de branches e cada um deles terá um nome simbólico, que o participante especifica ao usar a ferramenta. Eventualmente alterações de um branch podem ser “aplicadas” no trunk principal. Esta operação tem o nome de merge (incorporação). É prática comum, entre os projetos de software livre, manter branches estáveis conforme apresentado a seguir: Fig. 3 No exemplo acima, o branch estável foi criado logo após o lançamento da versão 0.9, e mantido separado da versão principal (head), recebendo apenas reparos de bugs. Duas novas versões estáveis foram lançadas (1.0.1 e 1.0.2). O desenvolvimento e a adição de funcionalidades continuam normalmente na versão principal. (REIS, 2001). • Branch Estável: Onde tendem a ser integradas apenas correções de erros, ainda que esta regra não seja explícita. Esta versão é tratada de forma especial, e usuários têm expectativas de que entre uma versão e outra do branch estável não ocorram regressões. • Branch Instável: Onde são aceitos tanto reparos de erros quanto adições de funcionalidade. Não há uma garantia de que as versões funcionem de forma confiável, especialmente nas primeiras versões lançadas neste ciclo. Com o passar do tempo, é declarada uma “moratória” à adição de funcionalidades (o chamado feature freeze), e a versão instável passa por um período de estabilização. Ao final deste período, uma versão considerada “estável o suficiente” é batizada de “nova versão estável”, e um novo ciclo se inicia.
  • 11. Além de manter versões estáveis, branches são utilizados para implementar mudanças que tenham grande impacto sobre a base do objeto. Como visto anteriormente, cada participante trabalha em relativo isolamento, com sua cópia local. Se não existissem branches, a integração de mudanças extensas seria bem difícil, já que por grandes períodos de tempo corre-se o risco de outro participante ter alterado o mesmo trecho. Utilizando um branch, é possível desenvolver a alteração paralelamente, e integrar mudanças no trunk principal de forma incremental. As ferramentas que documentam e controlam os erros encontrados (e suas correções) são muito importantes para qualidade e a produtividade dos projetos de desenvolvimento distribuído de software. Cada erro, informado por um usuário participante, é registrado em um informe individual e cada informe possui um ciclo de vida que vai desde a sua criação, no momento em que é informado, até seu fechamento, quando o erro é reparado no objeto produzido. Essas ferramentas, que normalmente têm interface Web ou via email permitem, em geral, um bom gerenciamento dos erros, com capacidade de localização, confirmação e detecção de erros duplicados ou que não se apliquem à versão atual do objeto. A ferramentas de controle de erros mais usada em projetos de software livre atualmente é o Bugzilla12, que nasceu como ferramenta de controle de alterações do projeto do browser Mozilla13, no qual é usada em todas as etapas do processo de desenvolvimento, desde a definição de funcionalidades até o projeto, implementação e revisão de alterações. O Bugzilla possui, além do registro de informes de erros, funcionalidades de priorização de atendimento, assinalamento de erros aos participantes apropriados, configuração de dependências entre os erros, organização de erros por produto ou componentes e, principalmente, a capacidade de revisão de código, na qual cada informe pode ser vinculado a uma alteração de código provisória, que deve ser revisada e aprovada para integração na base de código principal. Outra ferramenta comumente utilizada é o GNATS14. 2.5 As Inter-relações Nenhum dos componentes deste framework conceitual existe de forma isolada e assim como cada aspecto muda com o tempo, o mesmo acontece com as relações. A seguir estão listadas as inter-relações mais encontradas entre os componentes: 2.5.1 O Uso O objeto produzido em um projeto de software livre é um pedaço de software de computador, que as pessoas irão baixar e usar em um contexto específico. O uso é um tipo de atividade reflexiva, na qual o usuário cria um modelo de percepção das limitações e pontos fortes do software em uso e identifica mudanças e características que acreditam que o software deveria ter para atender suas necessidades e preferências. Quando mais o software estiver relacionado com cotidiano do usuário, principalmente relacionado ao seu trabalho, mais chances existem desse usuário querer contribuir com críticas e sugestões para o desenvolvimento do software. 2.5.2 A Facilitação Social O processo colaborativo emerge dos participantes ao mesmo tempo em que influencia suas ações. A facilitação social é a maneira com que os processos colaborativos encorajam as pessoas a se envolverem no desenvolvimento e evolução do projeto. Por exemplo, o processo colaborativo pode requerer que as pessoas que corrijam erros anexem seus nomes às correções. Em alguns grupos isso pode ser um grande incentivo à correção de erros porque o reconhecimento pessoal e os elogios motivam as pessoas a contribuir cada vez mais. Em outro exemplo, se um líder que precisa aprovar todas as mudanças nunca aceita as sugestões da 12 http://www.bugzilla.org 13 http://www.mozilla.org 14 http://www.gnu.org/software/gnats/gnats.html
  • 12. comunidade, seus participantes perceberão que suas contribuições não estão recebendo o devido reconhecimento e poderão abandonar o projeto. Em suma, a facilitação social se refere às reações dos participantes ao contexto social do projeto. 2.5.3 A Facilitação Técnica O processo colaborativo está intimamente relacionado com as tecnologias colaborativas empregadas. Algumas vezes as limitações da tecnologia influenciam no processo colaborativo em si. Por exemplo, as equipes que dependem da comunicação por email, muitas vezes têm dificuldade de encontrar mensagens importantes devido ao volume e a inerente falta de estrutura dos sistemas de correio eletrônico. Para compensar essa deficiência, o processo colaborativo pode especificar que quando a palavra “ANNOUNCE” aparece entre colchetes no início do assunto da mensagem, significa que se trata de um anúncio importante e que todos devem ler. Em alguns grupos são criados filtros automáticos que varrem as mensagens em busca dos identificadores de anúncios importantes que, uma vez identificados, são imediatamente postados em uma página de anúncios no website do grupo. Neste caso uma tecnologia colaborativa foi adaptada para reforçar um processo colaborativo de divulgação de anúncios importantes. A facilitação técnica se refere às conexões entre os processos colaborativos e as tecnologias que suportam esses processos. 2.5.4 Gerenciamento das Mudanças O gerenciamento das mudanças está relacionado ao uso das tecnologias de comunicação, armazenamento e controle de versões e de erros da distribuição padrão. Como os objetos produzidos devem estar publicamente disponíveis e fáceis de serem acessados, a tecnologia colaborativa deve prover uma maneira confiável de se armazenar e disponibilizar esses objetos. A estrutura dos repositórios da distribuição padrão geralmente reflete as mudanças que ocorreram ao longo do tempo que, junto com os padrões de nomenclatura (numeração de versões) e com as tecnologias de controle de versão e de erros, ajudam no rastreamento das mudanças no objeto produzido, facilitando a volta para uma versão anterior caso problemas sejam encontrados após uma mudança na distribuição padrão. 2.5.5 As Contribuições Contribuição são os processos nos quais os indivíduos propõem melhorias ou extensões no projeto através de mudanças relacionadas à distribuição padrão do objeto produzido. A forma como uma contribuição acontece varia de projeto para projeto, mas certamente envolve todos os aspectos e componentes do framework. Participantes criam mudanças, que passam por alguns processos colaborativos onde o grupo decide aceitar, refinar ou rejeitar as contribuições. Durante esses processos, a tecnologia colaborativa coordena a comunicação e provê o suporte técnico para rastrear as múltiplas versões de uma mudança. Se uma contribuição é aceita, passa então a ser incorporada ao objeto produzido e atualizam-se todas as referências. Assim, apesar das contribuições serem atividades desempenhadas por participantes, são fortemente influenciadas pelo objeto, pela tecnologia e pelo contexto social dos processos colaborativos. 3 O projeto de desenvolvimento do Linux 3.1 O Cerne da Questão O Linux é um kernel (cerne ou núcleo) de sistema operacional multitarefa preemptivo baseado na Application Program Interface (API) definida pelo padrão Portable Operating
  • 13. Systems Interface (POSIX15). É um sistema multiplataforma que suporta mais de dez arquiteturas de hardware diferentes (DEURZEN, 2004), sendo a mais importante, do ponto de vista do desenvolvimento e uso, a arquitetura da Intel, utilizada na maioria dos computadores pessoais. Moon (2000) faz uma análise histórica do desenvolvimento do kernel e coloca claramente a importância do desenvolvimento em comunidade, fornecendo estatísticas históricas da participação de desenvolvedores externos: “ ...em duas semanas do anúncio de Torvalds em Outubro de 1991, 30 pessoas tinham contribuído com cerca de 200 informes de erros, contribuições de utilitários, drivers e melhorias para serem adicionadas ao kernel [...] em Julho de 1995, mais de 15.000 pessoas de 90 países em 5 continentes tinham contribuído com comentários, informes de erro, correções, alterações, reparos e melhorias.” (MOON, 2000) O primeiro release da primeira versão do kernel possuía um pouco mais de três mil linhas de código, distribuídas em 88 arquivos escritos em linguagens C e Assembly. Atualmente o kernel está no release 6 da versão 2, cujo tamanho ultrapassa a quantidade de dois milhões e meio de linhas de código, distribuídos entre milhares de arquivos. O kernel fica disponível na Internet16 e uma visão da sua estrutura atual pode ser vista em um mapa disponível no website do projeto Kernel Mapper17 O desenvolvimento do kernel costuma ocorrer em duas séries separadas: uma delas é a de produção, ou estável, cujo segundo número (de release) é sempre par: 2.0.x, 2.2.x, 2.4.x, 2.6.x, etc. A outra série é a de desenvolvimento, que não é garantida para ser utilizada em sistemas em produção, e tem o número de release sempre ímpar: 2.1.x, 2.3.x, 2.5.x etc. Quando a série de desenvolvimento atinge a maturidade, ela muda de numeração e se transforma na nova série de produção (feature freeze), e uma nova série de desenvolvimento tem início. O terceiro número (x) refere-se ao patch (remendo) de correção em uso na versão. O desenvolvimento do Linux segue a filosofia preconizada por Raymonds (1999) de “Faça releases o quanto antes e libere-os com freqüência. E ouça o que os seus usuários têm a dizer”. O kernel ainda hoje tem em Torvalds seu expoente máximo, que toma as principais decisões e define a filosofia geral do projeto. Entretanto, cada release tem sempre um mantenedor responsável, que aprova cada aperfeiçoamento e garante que não haja versões conflitantes. O primeiro mantenedor do kernel estável foi próprio Linus Torvalds, seguido pelo inglês Alan Cox (versões 2.0 e 2.2), depois pelo brasileiro Marcelo Tosatti (versão 2.4) e hoje pelo inglês Andrew Morton (na atual versão 2.6). Torvalds e Cox continuam responsáveis por supervisionar as versões do kernel que ainda estão em desenvolvimento. Em julho de 2003, Torvalds passou, pela primeira vez na vida a trabalhar oficialmente e integralmente dedicado ao projeto do Linux, como contratado da Open Source Development Laboratories (OSDL18), uma entidade voltada para a disseminação internacional do Linux. A OSDL foi fundada no ano 2000, com sedes nos Estados Unidos e Japão, e é mantida por investimentos de cerca de 50 empresas como Cisco, HP, IBM, Intel e Sun. Posteriormente Cox e Morton também passaram a fazer parte do OSDL. 3.2 Comunicação e Percepção O projeto do desenvolvimento do Linux sempre foi, levando-se em conta o tamanho do objeto produzido e do número de participantes envolvidos, um dos projetos mais minimalistas em relação à infra-estrutura de desenvolvimento. A lista de distribuição de emails linux-kernel mailing list (LKML) é o fórum central de discussão entre os participantes do projeto de desenvolvimento do Linux, incluindo o próprio 15 http://www.pasc.org/ 16 http://www.kernel.org/ 17 http://kernelmapper.osdn.com/ 18 http://www.osdl.org/
  • 14. Torvalds, que sozinho recebe cerca mais de 200 emails diretos por dia, somente dos participantes do projeto. A intensidade dessa lista dá uma boa idéia do que seja o desenvolvimento no modelo “Bazar”, pois apenas em uma semana comum de trabalho é normal alcançar um volume superior a 5 MB de mensagens, sejam relacionadas aos diversos subprojetos em andamento ou a um conjunto de novas idéias ou mesmo às velhas questões recorrentes e suas discussões persistentes, todas pertinentes ao assunto do desenvolvimento do kernel (KUWABARA, 2000). O conhecimento, por parte da comunidade, do trabalho produzido pelos participantes fica registrado no arquivo de créditos que sempre acompanha o kernel. Trata-se de um arquivo de texto simples onde o participante inclui suas informações pessoais e principais áreas de contribuição, segundo o seguinte modelo: Fig. 4 A estrutura do arquivo de créditos do Linux. As informações são colocadas pelos próprios participantes, mas precisam ser aceitas pelos mantenedores do kernel (TUOMI, 2004). Ainda que não haja uma hierarquia definida e que todos trabalham de acordo com interesses e aptidões pessoais, sabe-se que entre Torvalds e a comunidade de participantes existe um grupo de consultores técnicos, informalmente chamados de “lieutenants” (“tenentes”), que são participantes que ganharam o status de programadores competentes e com expertise de comprovada importância para o projeto através de anos de participação. Apesar desse grupo não existir de maneira formal, sua composição é aceita pela comunidade como uma espécie de “seleção natural”, ainda que as informações e opiniões sobre quem faz (ou deveria fazer) parte do grupo divergem entre os participantes do projeto (KUWABARA, 2000). Fig. 5 A estrutura do Linux mostrada através do fluxo de informações.
  • 15. Esta estrutura mostra que os “lieutenants" representam uma espécie de suporte da cadeia de valor e não uma camada, pois os participantes podem interagir diretamente com Torvalds. Trata-se de uma estrutura em rede, na qual todos os participantes têm acesso a todos os nós do sistema. O fluxo da informação também abrange toda a rede, uma vez que toda a comunicação se da através da lista de distribuição linux-kernel mailing list (DAFERMOS, 2001). Quando um novo participante entra na lista LKML, assim como acontece em outras listas na Internet, é sempre convidado a ler a documentação de perguntas e respostas mais freqüentes (LKML FAQ19), que nesse caso, entre suas questões principais, esclarece algumas regras implícitas que regem o bom funcionamento da lista, a saber: • Mantenha-se no assunto. É uma lista sobre o kernel do Linux, para programadores; • Use somente o idioma inglês!; • Não coloque mensagens em formato HTML, apenas em modo texto; • Se você usa outro sistema operacional, esteja seguro de que seu programa de email não usa Charset="Windows*" ou suas mensagens serão bloqueadas; • Se for fazer uma pergunta, antes procure ver se já não há uma resposta na documentação ou no arquivo da lista. Lembre-se que 99% das perguntas desta lista já foram respondidas pelo menos uma vez. Normalmente a primeira resposta é a mais completa, desta forma a resposta armazenada será sempre melhor do que qualquer outra que receba de alguém que já respondeu a mesma pergunta uma dúzia de vezes. • Seja preciso, claro e conciso ao fazer uma pergunta, comentário, anúncio de bug, sugestão de correção ou qualquer outra coisa. Coloque fatos, evite opiniões. • Seja gentil, não há necessidade em ser rude. Evite expressões que possam ser interpretadas como agressivas em relação aos outros participantes da lista, mesmo que o assunto tratado seja controverso ou particularmente relevante para você; • Não se arraste em controvérsias. Não tente impor a última palavra. Você até poderá ter a última palavra, mas certamente terá perdido toda sua simpatia; • Uma linha de código vale mais do que mil palavras. Se está pensando em uma nova funcionalidade, implemente-a primeiro e só depois coloque-a na lista para comentários; • É fácil criticar o código dos outros, mas quando se escreve código pela primeira vez não é fácil. Se você encontrar um erro ou alguma coisa que possa ser melhorada, não coloque imediatamente uma mensagem do tipo “Este pedaço de código é um lixo, como foi parar dentro do kernel?” Ao invés disso, entre em contato com o autor do código, explique a questão e faça o entender de uma maneira simples e humilde. Faça isso algumas vezes e será reconhecido como um bom depurador de códigos. E quando escrever o seu pedaço de código, os outros irão prestar atenção no que fez; • Não se aborreça e responda com veemência os iniciantes que fazem perguntas erradas. Isso aumenta o ruído na lista. Envie-os um email privado apontando a fonte da informação que procuram (por exemplo, esta FAQ); • Não coloque nenhuma mensagem religiosa ou política, inclusive em sua assinatura de email. Ao fazer isso no corpo da mensagem as pessoas irão se aborrecer, pois é um assunto fora do objetivo da lista, além do desperdício de uso da banda de rede (lembre-se que apesar de estarmos no século XXI, muitas pessoas ainda pagam pelo tempo de uso na Internet); Se o fizer em sua assinatura de email, apesar de ser menos irritante, certamente fará a maioria das pessoas ignorarem a sua mensagem. Deixe o palanque em casa. E se quiser ser levado a sério, limite-se aos assuntos técnicos. Apesar de ser um projeto virtual, com participantes espalhados ao redor do mundo, a comunidade de desenvolvimento do Linux se reúne pessoalmente em eventos anuais informais como o Kernel Summit20 para trocar experiências, combinar as agendas e próximos passos. 19 http://www.tux.org/lkml/ 20 http://lwn.net/Articles/KernelSummit2006/
  • 16. 3.3 Controle de Versões e Erros O projeto do desenvolvimento do Linux sempre foi, levando-se em conta o tamanho do objeto produzido e do número de participantes envolvidos, um dos projetos mais minimalistas em relação à infra-estrutura de desenvolvimento. Até a versão 2.4, incrivelmente, apenas listas de discussão e emails eram utilizadas por sua comunidade de desenvolvimento. No de final de 2002, no entanto, foi lançado o Kernel Bug Tracker21 sistema para controle de erros, baseado na ferramenta Bugzilla. Este sistema está hospedado em um website no OSDL, com a administração do banco de dados de erros sendo realizada pela IBM. Outro recente projeto importante na manutenção da qualidade é o Kernel Janitor22, que objetiva “limpar” constantemente o código-fonte do kernel através da busca e eliminação de erros em trechos antigos através do reaproveitamento de correções recentes, originalmente feitas para outros trechos do código do kernel. A implantação de uma ferramenta automática de controle de versão (e integração) do objeto produzido ainda demorou a acontecer no Linux, pois Torvalds sempre se opôs à idéia, uma vez que somente confiava tal tarefa aos mantenedores credenciados (SHAIKH, 2003). Com o número, cada vez maior, de mudanças sugeridas pelos participantes, entretanto, o projeto precisou adotar uma ferramenta de controle de versões. Torvalds, que nunca quis trabalhar com o CVS, apesar de alguns participantes usarem essa ferramenta extra-oficialmente, decidiu pelo uso do BitKeeper, uma ferramenta que, apesar de ser tecnicamente superior à outra, gerou uma enorme polêmica, com discussões dentro (e fora) da comunidade pois, ao contrário do CVS, o BitKeeper não possuía a licença de uso segundo os conceitos de software livre preconizados pela GPL (SHAIKH, 2003). Ideologias à parte, o controle de versões do kernel23 com BitKeeper proporcionou um ganho significativo de produtividade em um sistema que fica cada dia mais complexo. Como exemplo, somente nos nove primeiros meses do ano de 2003 ocorreram mais de 12 mil mudanças no código do kernel, efetuadas por mais de 550 participantes (SEARLS, 2003). No início de 2005, entretanto, o próprio Linus Torvalds começou o desenvolvimento de uma nova ferramenta, chamada Git24, que foi disponibilizada sob a GPL e passou a ser a ferramenta usada na manutenção do kernel, sendo hoje também aplicada em outros projetos de software. 3.2 A Padronização das Distribuições do Linux Nos primeiros anos de existência do Linux, Torvalds simplesmente disponibilizava a versão estável do kernel e alguns comandos bem básicos. O usuário interessado em usar o sistema, entretanto, tinha que, além do baixar o kernel pela Internet, também arranjar todos os demais programas complementares, compilar tudo e acertar os arquivos de configuração para então poder proceder com a instalação. Como isso é trabalhoso até mesmo para um hacker iniciado no assunto, surgiram as distribuições, baseadas na idéia de se disponibilizar os programas principais pré-compilados, de tal forma que o usuário só precisasse pegá-los (em CD-ROM ou via Internet) e instalá-los em sua máquina. Hoje existem dezenas de empresas e instituições, ao redor do mundo, que mantém centenas de distribuições e as principais diferenças entre elas são: • O sistema de empacotamento do software; • A estrutura dos diretórios. Teoricamente todas as distribuições seguem um mesmo padrão, o Filesystem Standard (FSSTND) mas esse padrão é bem relaxado e, especialmente os arquivos de configuração do sistema, são bastante diferentes entre as distribuições; 21 http://bugme.osdl.org/ 22 http://janitor.kernelnewbies.org/ 23 http://linux.bkbits.net/ 24 http://git.or.cz/
  • 17. • A biblioteca básica libc, que contém funções básicas para o funcionamento do sistema operacional. Quando uma nova versão dessa biblioteca é lançada, algumas distribuições a adotam imediatamente, enquanto outras, mais conservadoras, aguardam um pouco. Nesse meio-tempo, alguns programas podem funcionar em algumas distribuições e não em outras. A diversidade de distribuições de Linux, que foi providencial na disseminação do sistema em seus primeiros anos de vida, teve como conseqüência uma falta de padronização que terminou por criar problemas para a comunidade Linux. Entre outras questões, durante muito tempo era difícil obter versões pré-compiladas de aplicativos, exceto se tivessem sido preparadas especificamente para a distribuição de Linux que o usuário estivesse utilizando, o que exigia um conhecimento da instalação de programas a partir da compilação de seu código-fonte, o que se constituía numa grande barreira ao uso e adoção do Linux. Com a entrada de participantes de maior porte no mercado criado em torno do Linux surgiu a necessidade de convergência em torno de um padrão, sem restringir a possibilidade de diferenciação entre as distribuições - mantendo assim a liberdade, sem permitir a fragmentação do Linux em uma série de alternativas incompatíveis entre si, como ocorreu com o sistema operacional UNIX. Assim, em 2001, foi criado o Linux Standard Base (LSB25), que visa desenvolver e promover um conjunto de padrões para aumentar a compatibilidade entre as distribuições de Linux. O LSB é dividido em três componentes principais: a especificação do sistema, as ferramentas de teste e um exemplo de distribuição para referência. A especificação do sistema define a chamada Binary Application Interface (BIA), que é o ambiente que toda aplicação desenvolvida, levando em conta o LSB, deverá esperar encontrar em qualquer distribuição de Linux, incluindo o nome e localização dos arquivos, versão das bibliotecas, e diversos outros fatores. Apesar do padrão LSB ter sido adotado pelos principais participantes do mercado Linux, incluindo as principais distribuições, os desenvolvedores de aplicativos e as empresas de suporte, ainda é possível encontrar aplicações que somente funcionam em determinadas distribuições do Linux. Os esforços de padronização são coordenados pelo Free Standards Group (FSG26), que além de cuidar do LSB, também promove outros padrões do Linux relacionados à internacionalização, clusterização, impressão, etc. 3.3 O Projeto de Documentação do Linux Visando diminuir a barreira de entrada do uso do Linux através da disponibilização de informações para facilitação do uso, surgiu o Linux Documentation Project (LDP27), um projeto cujo foco está na produção de documentação padronizada do Linux. Existem quatro tipos de objetos produzidos no LDP: • Guias, que são livros com informação detalhada e aprofundada do sistema, segundo um referencial variado (guia usuário, do programador, do administrador do sistema, etc.); • HOWTOs, que são como “receitas de bolo” para execução de tarefas comuns no uso do sistema, como a instalação, gerenciamento de caixas postais, habilitação de recursos de segurança, etc; • Man pages, que são as páginas do manual on-line, que contém informações a respeito dos programas, funções e utilitários de que fazem parte do sistema; 25 http://www.linuxbase.org/ 26 http://www.freestandards.org/ 27 http://www.tldp.org/
  • 18. • FAQs (Frequently Asked Questions) que são as perguntas e respostas mais comuns colecionadas ao longo da existência do projeto e que são divididas em categorias específicas (Linux, projeto LDP, intgração com outros sistemas operacionais, etc.) Além dos objetos descritos acima, o LDP coordena a tradução do conteúdo produzido para dezenas de idiomas, inclusive o português do Brasil, onde utiliza um vocabulário padronizado com milhares de entradas (entre termos simples, frases-exemplo reais e acrônimos). Os termos e suas traduções foram obtidos de outros glossários em papel, web, e termos discutidos (em várias listas de discussão) quando da tradução de outros livros e programas (ou seja, a experiência de inúmeros tradutores). 4 Desafios para o Software Livre O software livre vem ganhando espaço sistematicamente no cenário mundial e talvez esse interesse esteja crescendo mais rápido do que a consciência sobre a filosofia na qual é baseado, e isto pode conduzir a problemas. Como já foi dito na introdução deste texto, trata-se de um assunto multifacetado, que contém questões relacionadas a diversos assuntos (engenharia de software, propriedade intelectual, etc.). Do ponto de vista dos aspectos relacionados à construção cooperativa, Rothfuss (2002) indica que esses fatores são decorrentes, principalmente, da falta de organização formal, e podem ser resumidos conforme a seguir: 4.1 Redundância de Esforços A coordenação em projetos de software livre é relativamente pouca. Grupos independentes muitas vezes desenvolvem tarefas similares em paralelo sem conhecer o trabalho de seus pares, gerando um consumo adicional de recursos. Não há dúvida que o efeito colateral benéfico disso é o aumento do número de opções a escolher e que as diferentes alternativas melhoram a qualidade final do software. Entretanto estes trabalhos paralelos dificultam a escolha de alternativas por parte dos usuários, o que pode terminar em conflitos de posicionamento no mercado, gerando discussões apaixonadas, quase religiosas, com potencial de provocar “rachas” e enfraquecer o movimento de disseminação do software livre. 4.2 Problemas de Comunicação Ainda que o inglês seja o principal idioma usado nos projetos de software livre, certamente não é o idioma nativo de todos os participantes. Isso pode acarretar em diversos problemas de entendimento, que tendem a piorar conforme os projetos aumentem de número de participantes ao redor do mundo. Outro problema de comunicação, que também está relacionado à expansão, diz respeito ao volume e à relevância do conteúdo das mensagens, que ainda são a base da comunicação dos grupos de desenvolvimento. É comum perceber em grupos de discussão, cada vez mais, os participantes reclamando da falta de etiqueta e boas maneiras em meio a uma profusão de informações inúteis. Isso certamente é menor nos grupos moderados, mas é inegável que a relação sinal-ruído na Internet não é das melhores atualmente e está piorando cada vez mais. 4.3 Senso de Prioridade Em projetos de software livre, dificilmente as decisões importantes e profundas são tomadas com a agilidade necessária. Isso acontece devido à natureza distribuída do processo, que aliada a uma liderança tênue, pode impossibilitar a resolução de uma prioridade ou distorcê-la em direção às tendências pessoais de algum participante influenciador. Uma necessidade de
  • 19. mudança mais profunda normalmente desencadeia uma seqüência interminável de argumentos favoráveis e contrários, uma vez que ninguém pode forçar sua opinião aos demais e todos se sentem no direito de opinar, mesmo aqueles que não têm o conhecimento ou a preparação necessária para analisar suas considerações à luz de outras questões. 4.4 Proliferação de “grupos fechados” Os projetos de software livre não têm regras formais ou convenções escritas. As relações entre seus participantes são regidas por um conjunto de regras consuetudinárias – não escritas, baseadas em costumes – criando uma “netiqueta” (regras de etiqueta na Internet). Dessa forma, os novos membros têm que gradualmente aprender as regras informais e, de certa forma, são medidos pelo sucesso em reagir às dicas passadas pelo grupo. As comunidades, principalmente as mais antigas, são entrosadas e conseguem melhorar a comunicação entre os membros através do compartilhamento de contextos culturais, porém acabam por dificultar ainda mais a integração do grupo com os recém chegados. À medida que os participantes competem por atenção e reconhecimento de talento, essas barreiras são danosas ao projeto, principalmente aos menores, que ainda se estruturam. O desenvolvimento de software livre é um processo de aprendizado, onde as partes envolvidas contribuem para (e aprendem da) comunidade e esse equilíbrio é importante. Edwards (2000) chamou este fenômeno de “Comunidades Epistêmicas”. 4.5 Falta de Foco De acordo com estudos cerca de 70% dos participantes de software livre gastam 10 horas ou menos por semana em trabalhos relacionados ao projeto e essas horas são, em sua maioria, gastas durante à noite ou nos finais de semana (BERLECON, 2002). O baixo nível de participação pode introduzir problemas de comunicação, dado que muitos participantes têm dificuldade em acompanhar todos os desenvolvimentos realizados no projeto. Essas circunstâncias certamente dificultam o foco dos participantes no desenvolvimento do projeto. Normalmente o trabalho é conduzido aos pedaços e finalizado apenas após um longo período. O esforço dispensado em estar a par de todas as questões é geralmente tão grande que sobra pouco tempo para as contribuições efetivas. Muitos participantes perdem o interesse ou são absorvidos por outros comprometimentos externos, deixando muitos projetos pela metade. 4.6 Dependência de Pessoas-Chave Muitos projetos de software livre dependem de poucas pessoas. Taurion (2004) afirma que 10% dos participantes contribuem com 78% do código; o segundo décimo, com 12%, o terceiro, com 3%; os outros, com menos de 1% cada. Existem algumas explicações plausíveis para este fenômeno. A mais óbvia é que o nível de conhecimento necessário para se analisar e entender um código-fonte de um sistema grande requer treinamento e experiência. O esforço em adquirir este conhecimento não é efetuado pela maioria dos participantes. Outra explicação está relacionada ao nível de reconhecimento que os participantes esperam receber por suas contribuições. Apenas um número pequeno de participantes acaba se tornando amplamente reconhecido por suas contribuições, o que tende a fortalecer ainda mais o papel dos contribuidores principais. Essa dependência pode se tornar um risco se uma pessoa-chave não puder continuar seu trabalho no projeto por algum motivo. Talvez seja impossível reconstruir todo seu conhecimento implícito a partir de seus objetos (código-fonte e documentação).
  • 20. 4.7 Escassez de Lideranças Competentes O sucesso de um projeto de software livre depende de uma boa e carismática liderança. Além das qualidades intrínsecas da perspectiva da Engenharia de Software, o líder de projeto precisa endereçar questões de comunicação, marketing, juízo político e motivação. A liderança normalmente é feita por persuasão, pois não há um mandato oficial hierarquicamente estabelecido. O líder é avaliado não só por seus conhecimentos técnicos, mas por sua visão e habilidade em se comunicar com os co-participantes. (BCG, 2002). Ainda que haja muitos participantes com conhecimentos técnicos, as exigências são tão seletivas que se torna difícil preencher todas as posições de liderança com pessoal qualificado. Raymond (1999) diz que o sucesso do Linux se deve muito mais à excelente liderança exercida por Torvalds do que por suas habilidades técnicas. A escassez de novos e bons líderes é uma questão muito sensível para o futuro dos projetos de software livre, conforme atestado pelo próprio Torvalds (SEARLS, 2003). 4.8 Problemas Legais A propriedade intelectual, com seus copyrights, patentes, marcas registradas e segredos comerciais é certamente um dos campos mais obscuros e esotéricos da esfera jurídica, principalmente quando aplicada ao software e seus algoritmos. É muito difícil saber se determinado método para se resolver um problema de software já foi patenteado ou não, e a interpretação dessas leis varia conforme o país. Stallman (1999) chegou a afirmar que “A pior ameaça que nós enfrentamos são as patentes de software que podem colocar algoritmos e características fora dos limites do software livre por mais de vinte anos”. Ainda que esse problema exista para todo o mercado de software (livre e proprietário), no modelo de desenvolvimento de software livre, distribuído pelo mundo e sem organização formal, existe um maior risco potencial de se infringirem essas leis. Apenas como exemplo, um estudo recente conduzido pela Open Source Risk Management28 mostrou que apenas o kernel do Linux potencialmente viola 283 patentes, incluindo 27 que pertencem à Microsoft. Esse tipo de preocupação legal, que também varia conforme o país pode prejudicar o futuro do software livre. 5 Conclusão Este artigo procurou mostrar o modelo de desenvolvimento do software livre através da perspectiva do Trabalho Cooperativo Suportado por Computador. Essa análise ajudou a revelar um pouco mais do contexto no qual software livre está inserido e reforçar o argumento de que esse assunto não pode ser explicado somente por uma disciplina ou visão, mas sim através de um conjunto delas. Através da apresentação de um framework conceitual, complementada com um estudo de caso do desenvolvimento do Linux, foram apresentados os principais elementos e inter-relações que existem em um projeto típico, com participantes, processos, ferramentas e objetos produzidos em um modelo cooperativo de trabalho. O estudo mostrou também que o fenômeno do software livre, apesar de ainda estar em formação, vem crescendo bastante nos últimos anos e que sua expansão (e futuro) dependem da estabilização de alguns fatores hoje apresentados como desafios. 28 http://www.osriskmanagement.com/
  • 21. Referências AOKI, A., Hayashi, K., Kishida, K., Nakakoji, K., Nishinaka, Y., Reeves, B., Takashima, A., & Yamamoto,Y. A case study of the evolution of Jun: an object-oriented open-source 3D multimedia library. In Proceedings of the 23rd international conference on software engineering (ICSE 01) (pp. 524–533). Toronto, Canadá, 2001. BCG, Boston Consulting Group. Hacker Survey release 0.73, 2002. Disponível em www.osdn.com/bcg/BCGHACKERSURVEY-0.73.pdf . Visitado em Jan de 2007. BERLECON, Research. FLOSS. Free/Libre and Open Source Software: Survey and Study. European Commission, 2002. Disponível em http://www.infonomics.nl/FLOSS/. Visitado em Jan de 2007. BROOKS, F. P. Jr. The Mythical Man-Month. Addison-Wesley. 2ª ed. 1995 BROWN, J. S. and Duguid, P. Organizational Learning and Communities-of-Practice: Toward a Unified View of Working, Learning, and Innovation, Organization Science, 2(1), 1991, 40-57 BUTTON, G., Sharrock, W. Project Work: The Organisation of Collaborative Design and Development in SoftwareEngineering, Computer Supported Cooperative Work: The Journal of Collaborative Computing, 5, 1996, 369-386 DAFERMOS, George. Management and Virtual Decentralised Networks: The Linux Project, First Monday, 2001. Disponível em http://www.firstmonday.dk/issues/issue6_11/dafermos/ . Visitado em Jan de 2007. DEURZEN, Van. Linux Architectures. 2004. Disponível em http://home.hccnet.nl/p.van.deurzen/linuxweb/docs/architectures.htm . Visitado em Jan de 2007. EDWARDS, Kasper. Epistemic Communities, Situated Learning and Open Source Software Development Department of Manufacturing Engineering and Management, Technical University of Denmark, 2000. FIELDING, R. T. Shared leadership in the Apache Project. Communications of the ACM, v. 42, n. 4, p. 42–43, abr 1999. GANCARZ, M. UNIX Philosophy. Prentice-Hall, 1995. HEXSEL, Roberto, Propostas de Ações de Governo para Incentivar o Uso de Software Livre, Relatório Técnico do Departamento de Informática da UFPR, 004/2002 , 2002. KRAUT, R. E. and Streeter, L. Coordination in SoftwareDevelopment, Communications of the ACM, 38(3),1995, 69-81 KUWABARA, Ko. Linux: A Bazaar at the Edge of Chaos. FirstMonday 5(3), 2000. Disponível em http://www.firstmonday.dk/issues/issue5_3/kuwabara/ . Visitado em Jan de 2007. LANCASHIRE, D. Code, culture, and cash: The fading altruism of open source development. FirstMonday, 6(12), 2001. Disponível em http://firstmonday.org/issues/issue6_12/lancashire/ . Visitado em Jan de 2007.
  • 22. MAÇADA, D. L. TIJIBOY, A.V. Aprendizagem Cooperativa em Ambientes Telemáticos. In: Congresso Ibero-Americano de Informática na Educação, IV. Brasília, outubro de 1998. MCKUSICK, M. K. Twenty years of Berkeley UNIX. In: Open Sources. Sebastopol: O’Reilly and Associates, 1ª ed., 1999. p. 31–46. MOON, J., SPROULL, L. Essence of Distributed Work: The Case of Linux Kernel. First Monday. 2000. Disponível em http://www.firstmonday.org/issues/issue5_11/moon/. Visitado em Jan de 2007. NAKAKOJI, K., Yamamoto, Y., Nishinaka, Y., Kishida, K., & Ye, Y.. Evolution patterns of open-source software systems and communities. In Proceedings of the international workshop on principles of software evolution (IWPSE 2002), Orlando, FL, 2002. OSI. The Halloween Documents, 1988. Disponível em http://www.catb.org/~esr/halloween/. Visitado em jan de 2007. PAVLICEK, C. Embracing insanity: Open source software development. Indianapolis, Sams, 2000. RAYMOND, E. S. The Cathedral and The Bazaar. O’Reilly and Associates, 1ª ed., 1999. p. 27–78. REIS, Christian. Caracterização de um Modelo de Processo para Projetos de Software Livre, Instituto de Ciências Matemáticas e de Computação, São Carlos SP, 2001. ROTHFUSS, Gregor. A Framework for Open Source Projects, Universität Zürich, Institut für Informatik, 2002. Disponível em http://greg.abstrakt.ch/docs/OSP_framework.pdf . Visitado em Jan de 2005. SCHARFF, E. D. Open Source: A Conceptual Framework for Collaborative Artifact and Knowledge. University of Colorado, 2002 STALLMAN, R. M. The GNU Operating System and the Free Software Movement. In: Open Sources. Sebastopol: O’Reilly and Associates, 1ª. ed., 1999. p. 53–70. SCHENK, Thomas. Linux: Its history and current distributions. Disponível em http://www-106.ibm.com/developerworks/library/it-schenk1/schenk1.html, 2001.Visitado em Jan de 2007. SEARLS, Doc. Linus & the Lunatics. Transcrição de palestra no Linux Lunacy Geek Cruise 2003. Disponível em http://www.linuxjournal.com/article/7272. Visitado em Jan de 2007. SHAIKH, M. Cornford, T. 2003. Version Management Tools: CVS to BK in the Linux Kernel, disponível em http://opensource.mit.edu/papers/shaikhcornford.pdf . Visitado em Set 2004. TANENBAUM, Andrew. Operating Systems, Design and Implementation. Prentice-Hall, 1987. TAURION, Cezar. Software Livre - Potencialidades e Modelos de Negócios. Brasport, 2004. TORVALDS, L. The Linux Edge. In: Open Sources. Sebastopol: O’Reilly and Associates, 1ª ed., 1999. p. 101–111.
  • 23. TUOMI, Ilkka. Evolution of the Linux Credits File: Methodological Challenges and Reference Data for Open Source Research. FirstMonday, 2002 Disponível em http://www.firstmonday.dk/issues/issue9_6/tuomi/ . Visitado em Jan de 2007. YAMAUCHI, Y., Yokozawa, M., Shinohara, T., Ishida, T. Collaboration with Lean Media: How Open Source Succeeds. In: Proceedings of CSCW, 2000. ACM Press. p. 329-338.
  • 24. Anexo 1 Definições de termos relacionados ao software livre (HEXSEL, 2002) • BSD: A licença BSD cobre as distribuições de software da Berkeley SoftwareDistribution, além de outros programas. Esta é uma licença considerada 'permissiva' porque impõe poucas restrições sobre a forma de uso, alterações e redistribuição do software licenciado. O software pode ser vendido e não há obrigações quanto à inclusão do código fonte, podendo o mesmo ser incluído em software proprietário. Esta licença garante o crédito aos autores do software, mas não tenta garantir que trabalhos derivados permanecem como software livre. • Copyleft: A maioria das licenças usadas na publicação de software livre permite que os programas sejam modificados e redistribuídos. Estas práticas são geralmente proibidas pela legislação internacional de copyright, que tenta justamente impedir que alterações e cópias sejam efetuadas sem a autorização dos autores. As licenças que acompanham software livre fazem uso da legislação de copyright para impedir utilização não-autorizada, mas estas licenças definem clara e explicitamente as condições sob as quais cópias, modificações e redistribuições podem ser efetuadas, para garantir as liberdades de modificar e redistribuir o software assim licenciado. A esta versão de copyright, dá-se o nome de copyleft. • Debian: A licença Debian é parte do contrato social celebrado entre a Debian e a comunidade de usuários de software livre, e é chamada de Debian Free SoftwareGuidelines (DFSG). Em essência, esta licença contém critérios para a distribuição que incluem, além da exigência da publicação do código fonte. Estes critérios são: (a) a redistribuição deve ser livre; (b) o código fonte deve ser incluído e deve poder ser redistribuído; (c) trabalhos derivados devem poder ser redistribuídos sob a mesma licença do original; (d) pode haver restrições quanto à redistribuição do código fonte, se o original foi modificado; (e) a licença não pode discriminar contra qualquer pessoa ou grupo de pessoas, nem quanto a formas de utilização do software; (f) os direitos outorgados não podem depender da distribuição onde o software se encontra; e (g) a licença não pode 'contaminar' outro software. • Freeware: O termo freeware não possui uma definição amplamente aceita mas é usado com programas que permitem a redistribuição mas não a modificação, e seu código fonte não é disponibilizado. Estes programas não são software livre. • GPL: A Licença Pública Geral GNU (GNU General Public License) é a licença que acompanha os pacotes distribuídos pelo Projeto GNU, e mais uma grande variedade de software, incluindo o kernel do sistema operacional Linux. A formulação da GPL é tal que ao invés de limitar a distribuição do software por ela protegido, ela de fato impede que este software seja integrado em software proprietário. A GPL é baseada na legislação internacional de copyright. • Open Source: A licença da Open Source Initiative é derivada da Licença Debian, com as menções à Debian removidas. • Shareware: É o software disponibilizado com a permissão para que seja redistribuído, mas a sua utilização implica no pagamento pela sua licença. Geralmente, o código fonte não é disponibilizado e portanto modificações são impossíveis. • Software Comercial: É o software desenvolvido por uma empresa com o objetivo de lucrar com sua utilização. Note que 'comercial' e 'proprietário' não são o mesmo. A maioria do software comercial é proprietário mas existe software livre que é comercial, e existe software não-livre não-comercial.
  • 25. • Software em Domínio Público: É o software sem copyright. Alguns tipos de cópia, ou versões modificadas, podem não ser livres porque o autor permite que restrições adicionais sejam impostas na redistribuição do original ou de trabalhos derivados. • Software Livre (Free Software): É o software disponível com a permissão para qualquer um usá-lo, copiá-lo, e distribuí-lo, seja na sua forma original ou com modificações, seja gratuitamente ou com custo. Em especial, a possibilidade de modificações implica em que o código fonte esteja disponível. Se um programa é livre, potencialmente ele pode ser incluído em um sistema operacional também livre. E importante não confundir software livre com software grátis porque a liberdade associada ao software livre de copiar, modificar e redistribuir independe de gratuidade. Existem programas que podem ser obtidos gratuitamente, mas que não podem ser modificados, nem redistribuídos. Por outro lado, existe a possibilidade de uso não-gratuito em todas as categorias listadas no que segue. Há uma cópia da definição de software livre pela Free SoftwareFoundation publicada na página http://www.fsf.org/philosophy/free-sw.pt.html • Software Proprietário: É aquele cuja cópia, redistribuição ou modificação são em alguma medida proibidos pelo seu proprietário. Para usar, copiar ou redistribuir, deve-se solicitar permissão ao proprietário, ou pagar para poder fazê-lo. • Software Semi-livre: É software que não é livre, mas é concedida a permissão para que indivíduos o usem, copiem, distribuam e modifiquem, incluindo a distribuição de versões modificadas, desde que o façam sem o propósito de auferir lucros. Exemplos de software semi-livre são as primeiras versões do Internet Explorer da Microsoft, algumas versões dos browsers da Netscape, e o StarOffice. • X.org: O Consórcio X distribui o X Window System sob uma licença que o faz software livre mas não adere ao copyleft. Existem distribuições sob a licença da X.org que são software livre, e outras distribuições não o são. Existem algumas versões não-livres do sistema de janelas X11 para estações de trabalho e certos dispositivos do IBM-PC que são as únicas funcionais disponíveis, sem similares distribuídos como software livre.