Aspectos do Trabalho Cooperativo no Desenvolvimento de Software Livre

3,092 views
2,977 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,092
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Aspectos do Trabalho Cooperativo no Desenvolvimento de Software Livre

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

×