Post on 07-Apr-2016
Software Livre e Código Aberto
Danilo de Sousa FerreiraFábio Luiz Leite Júnior
{danilo,fabio}@dsc.ufcg.edu.br
Agosto de 2004
Roteiro Introdução
Software Livre Código Aberto Licenças
Modelos de Organização Catedral e Bazar
Sites de suporte 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
Todo software que não está protegido com copyright Freeware
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
é um conjunto de termos de distribuição específico para proteger um programa com copyleft.
http://www.gnu.org/licenses/gpl.html LGPL
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 Conjunto de ferramentas que auxilia no
gerenciamento de equipes virtuais, postar notícias, gerenciar outros serviços providos pelo site
Tracker: Tools for Managing Support 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
Se um projeto necessitar de usar um banco de dados de teste este é provido pelo site
Shell services and compile farm 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; O software é controlado pelos próprios clientes e não
pode ser arbitrariamente modificado por uma decisão do vendedor;
Custos menores; Ciclos de desenvolvimento pequenos; Código com mais qualidade
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;
Ex.: Linux, Apache; Quem perde?
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;
Esta motivação não se aplica às organizações; Usuários querem soluções estáveis;
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 ParaleloCusto do Desenv. Alto BaixoOrganização Centralizado Descentralizado Gerência Hierárquica Comunidade Colaborativa
Liderança EmergenteAprendizagem Organizacional
Linear Paralela
Usuários-desenvolvedores
Separados Sobrepostos
Nº de participantes Limitado IlimitadoSistema Fechado AbertoFlexibilidade de plataforma
Baixa Alta
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)
Relacionamentos múltiplos com diferentes pessoas
Meio convencional de gerência
Necessariamente, não fazem parte da mesma organização
Todos os membros dentro de uma organização
Distribuídos geograficamenteMesmo espaço físicoEquipes VirtuaisEquipes Convencionais
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 altamente verticais; Domínios altamente competitivos; Domínios de alta segurança; Domínios 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; Linux, Apache, Mozilla, outros.
Características Comuns: 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/cathedral-bazaar/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/