Software Livre e Código Aberto Danilo de Sousa Ferreira Fábio Luiz Leite Júnior {danilo,fabio}@dsc.ufcg.edu.br Agosto de 2004 Roteiro Introdução Modelos de Organização Catedral e Bazar Sites de suporte Software Livre Código Aberto Licenças SourceForge.net Java.net Considerações sobre Open Source Software Open Source Software Development Software Livre Refere-se à liberdade dos usuários executarem, copiarem, distribuírem, estudarem, modificarem e aperfeiçoarem o software. Mais precisamente, ele se refere a quatro tipos de liberdade, para os usuários do software: Liberdade de executar o programa Liberdade de estudar o programa e adaptá-lo à suas necessidades Liberdade de redistribuir as cópias Liberdade de aperfieçoar o programa Ideologia defendida pela comunidade Free Software Foundation GNU/Linux Open Source Software A definição de software aberto é um pouco menos restritiva que a definição de software livre Questões ideológicas Uma maneira de fazer negócios e uma metodologia de desenvolvimento Definição Distribuição Livre A licença não deve restringir a vontade de vender ou dar um software como componente de distribuição, não deve requerer royalties Código Fonte Derivação de trabalho Integridade do código fonte do autor … Licenças Distinguir as várias licenças disponíveis, assim como conceitos abordados por elas Software livre x Software não-livre Software semi-livre – – Software semi-livre é software que não é livre, mas que vem com permissão para indivíduos usarem, copiarem, distribuírem e modificarem (incluindo a distribuição de versões modificadas) para fins não lucrativos Possuem restrições adicionais Licenças Domínio Publico Freeware Todo software que não está protegido com copyright Distribuição de pacotes sem taxação, porém sem acesso ao código fonte Shareware Shareware é software que vem com permissão para redistribuir cópias, mas diz que qualquer um que continue usando uma cópia deve pagar por uma licença Não é livre ou até mesmo semi-livre – Categorias de Distribuição Categorias de Distribuição Copyleft O software protegido com copyleft é um software livre cujos termos de distribuição não permite que redistribuidores incluam restrições adicionais quando eles redistribuem ou modificam o software. Para tornar um programa copyleft Primeiro registra o copyright Em seguida é adicionado os termos de distribuição Copyright usado para garantir a liberdade dos usuários – Copyleft GPL LGPL é um conjunto de termos de distribuição específico para proteger um programa com copyleft. http://www.gnu.org/licenses/gpl.html Aplicado, geralmente, a bibliotecas. http://www.gnu.org/licenses/lgpl.html FDL Aplicado a manual, livro-texto http://www.gnu.org/licenses/fdl.html Licenças XFree86 Style Grupo de licenças que não são copyleft, são baseadas nas Licenças BSD. O redistribuidor pode acrescentar restrições Licenças do grupo FreeBSD, XFree86, X11 Exemplo: X Window System (X11) Compatibilidade de Licenças Modelos de Organização Modelo Catedral Modelo seguido pelas grandes empresas de software proprietário, onde se tem equipes de desenvolvedores, projetistas, gerentes que trabalham de uma maneira mais fechada ao ambiente externo Funcionalidades do software são controlados por projetistas, pressões de mercado, possivelmente dirigido por um departamento de marketing Modelos de Organização Modelo Bazar Estilo adotado no desenvolvimento do Linux, com características diferentes do modelo catedral, que inspirou vários modelos de desenvolvimento opensource Funcionalidades orientadas pelos usuários, especialmente, desenvolvedores. Evolução ocorre de acordo com a disponibilidade dos programadores Modelo Bazar Modo de tratamento dos usuários Tratá-los como co-desenvolvedores e/ou beta testers Liberar cedo e freqüentemente Estimula os usuários Dados olhos suficientes, todos os erros são triviais, impacta no tempo de depuração Modelo Bazar Pré-condições A comunidade nascente de desenvolvedores deve ter algo real para se testar e utilizar Convencer os possíveis co-desenvolvedores que o código pode evoluir para algo elegante num futuro próximo O projeto deve ter uma ótima via de comunicação Boa habilidade do coordenador com comunicação e relacionamento Sites de Suporte OSD SourceForge.net É um Web Site de desenvolvimento de software open source e provê um repositório de milhares(mais de 30.000) de projetos Tem a meta de enriquecer a comunidade Open Source provendo um lugar centralizado para desenvolvedores controlar e gerenciar seus projetos, assim como uma forma de dar visibilidade necessária SourceForge.net Services SourceForge Collaborative Development System (CDS) web tools Tracker: Tools for Managing Support Conjunto de ferramentas que auxilia no gerenciamento de equipes virtuais, postar notícias, gerenciar outros serviços providos pelo site Conjunto de ferramentas que ajudam aos usuários postar bugs, sugestões, submeter patches para revisão Mailing lists and discussion forums SourceForge.net Services MySQL Database Services Shell services and compile farm Se um projeto necessitar de usar um banco de dados de teste este é provido pelo site Acesso aos servidores via SSH, pode-se manipular o conteúdo da página diretamente Acesso à vários sistemas operacionais para testar e gerar binários de distribuição do software Project CVS Services Sites de Suporte OSD Java.net Site criado para desenvolvedores trocar experiências, compartilhar código e idéias e participar de projetos e comunidades No Site temos weblogs, espaço para publicar eventos e encontros Incentivar a colaboração e fortalecer as comunidades Java.net Acompanhamento do projeto por Comunity Managers, caso alguma empresa se enteresse pelo projeto o Community Manager apresenta o projeto e contata a equipe Visibilidade dos projetos mais “movimentados” Java.net Idéia de categorias de usuários préconfigurados no sistema Project Owner Developer Content Developer Observer Serviços providos pelo site Web CVS Java.net Issue Tracker Ferramenta de acompanhamento de pendências Documents & Files Announcements Listas de e-mail Fórum Wiki Open Source Software Algumas considerações: Maior confiabilidade; Custos menores; Ciclos de desenvolvimento pequenos; Código com mais qualidade O software é controlado pelos próprios clientes e não pode ser arbitrariamente modificado por uma decisão do vendedor; Incluindo segurança; Tecnicamente, código proprietário está se afundando por conta das elevadas taxas de erro; Cuidado: Qualidade não significa livre de bugs; Open Source Software Algumas considerações: A evidência da superioridade do software de código aberto não está na academia, mas no mundo real; Quem perde? Ex.: Linux, Apache; Monopolistas de software e investidores especulativos; Mito: Desenvolver software de código aberto em escalas maiores que “projeto de garagem” é insustentável e não é capaz de ter retorno do mercado; Software de código aberto deve ser mais centrado no serviço do que no produto; Open Source Software Algumas considerações: Software de código aberto não se encaixa em qualquer modelo; Programadores devem ter uma motivação direta; Usuários querem soluções estáveis; Esta motivação não se aplica às organizações; Usuários não programadores não devem ser testadores ou debuggers; A maioria dos softwares de código aberto carecem de aspectos de usabilidade; Open Source Software Algumas considerações: Qual o custo da qualidade? Ter centenas ou milhares de programadores purificando o código é totalmente produtivo; Mas isto não é evidente com trabalho voluntário; Isto é justificável para algumas infra-estruturas altamente utilizadas; Open Source Software Development Ciclo genérico para desenvolvimento de software de código aberto Open Source Software Development Como processo de criação de software, open source development (OSD) é incompleto [2]; Alguém deve entender as necessidades/requisitos; Alguém deve projetar uma arquitetura e adaptá-la ao longo da evolução do produto; Alguém (ou um grupo) deve estar centrada em coordenar/gerenciar; Suporte e treinamento devem ser fornecidos; Open Source Software Development “Qualquer grupo de pessoas (ou indivíduos únicos) desenvolvendo software e oferecendo seus resultados ao público sob uma licença Open Source” (Open Source Definition) Algumas Características: Altamente Colaborativo; Geograficamente Distribuído; Cenário não apresenta favorecimento ao sucesso do projeto devido: Ao número de pessoas envolvidas; Condições de trabalhos destas pessoas; Open Source Software Development Metas não voltadas para o mercado; Desenvolvedores freqüentemente são voluntários; Concentração de esforços de acordo com o interesse do desenvolvedor; Difícil convencimento para execução de tarefas essenciais; Testes sistemáticos; Reestruturação de código; Open Source Software Development Cronograma Imune ao “time-to-market”; Qualidade de código; Padronização do código; Código instável; 2 formas de manter desenvolvimento concorrente: “development” release; “stable” release; Evolução planejada, testes e manutenção preventiva; Open Source Software Development Características Marcantes Colaboração Descentralizada; Liderança; Motivação interna; Contribuições por razões como: comunidade, status, oportunidades, satisfação pessoal; Comunicação assíncrona; Open Source Software Development Desenv. Convencional Desenv. Open Source Desenvolvimento Linear Paralelo Custo do Desenv. Alto Baixo Organização Centralizado Descentralizado Gerência Hierárquica Comunidade Colaborativa Liderança Emergente Linear Paralela Separados Sobrepostos Nº de participantes Limitado Ilimitado Sistema Fechado Aberto Baixa Alta Aprendizagem Organizacional Usuáriosdesenvolvedores Flexibilidade de plataforma Open Source Software Development “Equipes virtuais são equipes que enfatizam três fatores básicos: compartilham uma meta ou interesse, estão geograficamente distribuídos e fazem uso de tecnologias de comunicação e informação para comunicar e gerenciar interdependências” (Ahuja and Carley 1998) Equipes Convencionais Equipes Virtuais Mesmo espaço físico Distribuídos geograficamente Todos os membros dentro de uma organização Necessariamente, não fazem parte da mesma organização Meio convencional de gerência Relacionamentos múltiplos com diferentes pessoas Open Source Software Development Contextos favoráveis: Comunidades com necessidades de software não satisfeitas; Comunidades de usuários tecnicamente sofisticada; Software de infra-estrutura e propósito geral; Contextos desfavoráveis: Domínios Domínios Domínios Domínios altamente verticais; altamente competitivos; de alta segurança; de alta confiança; Open Source Software Development Porque open source funciona? Redução de custos de aquisição; Diversidade e escala; Simplificação do processo de colaboração; Integração efetiva da comunidade de usuários; Divisão do trabalho em alta escala; Pequenos ciclos de feedback; Inversão de conceitos; Como OSD está afetando o desenvolvimento de software? Mais praticidade Possibilidade de reutilizar componentes, bibliotecas, frameworks, etc. Pela perspectiva do desenvolvedor, open source tem 2 propriedades importantes: Código fonte visível; Direito de fazer derivações; Estas 2 propriedades afetam o produto e o processo de desenvolvimento; Como OSD está afetando o desenvolvimento de software? Influência no produto: Impacto mais óbvio Reutilizar elementos de software existentes; 2 benefícios: O código reusado terá tipicamente mais qualidade; A funcionalidade do elemento reusado será mais completa; Granularidade do reuso: Linhas de código, métodos, classes, biblioteca, componentes, ferramentas ou sistemas completos; Como OSD está afetando o desenvolvimento de software? Influência no produto: Disponibilidade do código fonte Leva a melhorias, consertos e suporte aos elementos reusados; Mitigam os riscos com componentes órfãos ou com caminhos evolutivos incompletos; É preciso ter cuidado com as dependências entre os elementos utilizados; Reusar componentes também pode afetar o modelo de licença do produto final; Nenhum processo padrão conjunto de métricas são utilizados para avaliar a qualidade; Como OSD está afetando o desenvolvimento de software? Influência no processo: Acesso a ferramentas mais sofisticadas; Se o software reusado não está evoluindo ou está evoluindo num sentido inconsistente com a necessidade da organização, então a organização deve alocar recursos para contribuir com sua melhoria; Os elementos de software que estão sendo reusados precisam ser integrados ao processo de desenvolvimento; Como OSD está afetando o desenvolvimento de software? Influência no processo: A adoção de práticas de desenvolvimento de código aberto pode causar desatenção: No plano estratégico; No detalhamento dos requisitos; Nos testes; No suporte; Open Source Projects[8] Investigação em 80 projetos open source; Características Comuns: Linux, Apache, Mozilla, outros. Adesão ao Open Source Definition; Desenvolvedores são usuários; Características Variáveis: Ponto de Partida; Motivação; Comunidade; Suporte ao desenvolvimento de software; Licença; Tamanho; Open Source Projects Classificação dos usuários e desenvolvedores open source Gerência de Configuração Controle de Versão; Gerenciamento de builds; Seleção de Configuração; Gerenciamento de Wokspace; Controle de concorrência; Gerenciamento de mudanças; Gerenciamento de release; Referências [1] RAYMOND, Eric S. Up from Alchemy. IEEE Software, January/February 2004. [2] MESSERSCHMITT, David G. Back to the User. IEEE Software, January/February 2004. [3] WU, Ming-Wei, LIN, Ying-Dar. Open Source Software Development: An Overview. IEEE Software, June 2001. [4] SPINELLIS, Diomidis, SZYPERSKI, Clemens. How is Open Source Affecting Software Development? IEEE Software, January/February 2004. [5] DAFERMOS, George N. Management and Virtual Descentralised Networks: The Linux Project. Disponível em: http://www.firstmonday.dk/issues/issue6_11/dafermos. Acessado em: 10 de Agosto de 2004 Referências [6] ASKLUND, Ulf; BENDIX, Lars. A Study of Configuration Management in Open Source Software Projects. Lind Institute of Technology. [7] LIMA, Carlos A.;GUERRA, Fabricio V. Desenvolvimento de Open Source – Gerenciando Equipes Virtuais para Alcançar Bons Resultados. Universidade Federal de Campina Grande, 2003. [8] GACEK, Cristina; ARIEF, Budi. The Many Meanings of Open Source. IEEE Software, January/February 2004. [9] GODFREY, Michael W. Evolution in Open Source Software: A Case Study. Proceedings of the International Conference on Software Maintenance, 2000. Bibliografia Raymond, Eric S.: The Cathedral & the Bazaar, 1998 http://www.catb.org/~esr/writings/cathedralbazaar/cathedral-bazaar/ Open Source Initiative: The Open Source Definition, http://www.opensource.org/docs/definition.php GNU Operating System - Free Software Foundation, http://www.fsf.org http://sourceforge.net/index.php The Source for java Technology Collaboration http://www.java.net/