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/
Download

Open Source Software Development