Apêndice A. Sistemas de Controle de Versão Livres

Estes são todos os sistemas de controle de versão, livres, dos quais tinha conhecimento até meados do ano de 2007. O único que uso regularmente é o Subversion. Exceto pelo Subversion e CVS, tenho pouca ou nenhuma experiência com a maioria desses sistemas; as informações colocadas aqui foram retiradas dos seus respectivos sites. Veja também http://en.wikipedia.org/wiki/List_of_revision_control_software.

O CVS esteve por toda parte, e muitos desenvolvedores se familiarizaram com ele. Em seu tempo ele foi revolucionário: foi o primeiro sistema de controle de versão, livre, com acesso em rede de área ampla (www) aos desenvolvedores (até onde eu sei), e o primeiro a oferecer checkouts somente-leitura a usuários anônimos, o que possibilitou a novos desenvolvedores uma maneira fácil de se envolverem nos projetos. O CVS somente controla versões de arquivos, não de diretórios; ele oferece branching (árvores de versões), tagging (marcação), e boa performance ao lado cliente, mas não trata muito bem de arquivos grandes ou de arquivos binários. Ele também não suporta atomics commits (envios atômicos, literalmente).[Termo de Responsabilidade: Eu estive ativo no desenvolvimento do CVS por aproximadamente cinco anos, antes de ajudar a começar o projeto de sua substituição pelo Subversion.]

O Subversion foi escrito em primeiro lugar para ser um substituto para o CVS—isto é, abordar o controle de versão aproximadamente da mesma forma que o CVS, mas sem os problemas e omissões de recursos que muito frequentemente incomodam aos usuários do mesmo. Um dos objetivos do Subversion é para que pessoas acostumadas ao CVS achem a mudança para ele relativamente suave. Não há espaço aqui para entrar em detalhes sobre os recursos do Subversion; consulte seu web site para maiores informações.[Termo de Responsabilidade: Estou envolvido no desenvolvimento do Subversion, e é o único desses sistemas que eu uso de forma regular.]

Embora seja construído com base no Subversion, o SVK provavelmente se assemelha a alguns dos sistemas descentralizados abaixo do que ao próprio Subversion. O SVK suporta desenvolvimento distribuído (distributed development), envios locais (local commits), change merging (literalmente, mudança de integração) sofisticado, e a habilidade de espelhar (mirror) árvores de diretórios originadas de outros sistemas de controle, não-SVK. Consulte seu web site para maiores informações.

O Mercurial é um sistema de controle de versão distribuída que oferece, entre outras coisas, "indexação cruzada completa de arquivos e conjuntos de alterações (changesets); Protocolos HTTP e de sincronização SSH eficientes em respeito ao uso de largura de banda (bandwidth) e CPU; integração (merging) arbitrária entre as árvores de versões de desenvolvedores; interface web independente integrada; portabilidade para: UNIX, MacOS X, e Windows" e mais (a lista de recursos anterior foi parafraseada do web site do Mercurial).

O Git é um projeto iniciado por Linus Torvalds para administrar a árvore de código do kernel do Linux. Inicialmente o Git era bastante restrito às necessidades de desenvolvimento do kernel, mas acabou se expandindo além e hoje ele é usado para outros tipos de projetos. Seu site diz que ele é "...desenvolvido para tratar de projetos extremamente grandes com velocidade e eficiência; ele é usado principalmente por vários projetos de código aberto (Open Source), mais notavelmente pelo kernel do Linux. O Git se enquadra na categoria de ferramenta de gerenciamento de código fonte distribuído, semelhante ao, por exemplo, GNU Arch ou Monotone (ou ao BitKeeper no mundo proprietário). Todo diretório de trabalho do Git é completo em si (sem falta de partes), tendo inteira capacidade de revisão por rastreamento, sem depender de acesso à rede ou a um servidor central."

O Bazaar (ou bzr) é um sistema de controle de versão distribuída que se concentra na facilidade de uso e em ter um modelo de dados flexível. Ele é um projeto GNU oficial, e é o sistema de controle de versão nativo para o site de hospedagem de projetos de softwares livres, Launchpad.net. O Bazaar faz um controle de versão distribuída completo: todo trabalho toma lugar em árvores de versões (branches), e todo desenvolvedor, tipicamente, tem uma cópia completa do histórico das árvores. Essas árvores podem ser integradas a outras de uma forma descentralizada, mas o Bazaar pode também ser configurado para trabalhar de uma forma centralizada. O Bazaar teve início com o código baseado no GNU Arch, mas foi reescrito a partir do zero e agora não possui relação direta com ele.

Darcs — http://darcs.net

"David's Advanced Revision Control System ainda é um outro substituto para o CVS. Ele é escrito em Haskell, e tem sido usado no Linux, MacOS X, FreeBSD, OpenBSD e Microsoft Windows. O Darcs inclui um script cgi, o qual pode ser usado para se visualizar o conteúdo do seu repositório."

O GNU Arch suporta ambos desenvolvimentos distribuído e centralizado. Os desenvolvedores enviam suas modificações para um "arquivo", o qual pode ser local, e as mudanças podem ser "empurradas" e "puxadas" para outros arquivos como os gestores desses arquivos bem entenderem. Como tal metodologia implica, o Arch tem uma mesclagem mais sofisticada que o CVS. O Arch também nos permite a facilmente fazer árvores de versões de arquivos para os que não têm acesso de envio (commit access). Este é apenas um breve resumo; consulte as páginas da web do Arch para maiores informações.

"O monotone é um sistema de controle de versão livre. Ele fornece um simples armazenamento de versão transacional de arquivo único, com completa operação off-line e um protocolo de sincronização ponto-a-ponto eficiente. Ele compreende integração por histórico; possui árvore de versões leve, revisão de código integrada e avaliação por terceiros. Ele usa nomeação de versão por criptografia e certificados RSA de lado cliente (client-side). Possui bom suporte a internacionalização, não possui dependência externa, funciona no Linux, Solaris, OSX e Windows, e está licenciado sob a Licença Pública Geral GNU (GNU GPL)."

Codeville — http://codeville.org/

"Por que ainda mais um sistema de controle de versão? Todos os outros sistemas de controle de versão exigem que você mantenha uma varredura cuidadosa das relações entre os ramos de versões (branches), de modo a não ter que mesclar várias vezes os mesmos conflitos. O Codeville é muito mais anárquico. Ele permite você a atualizar ou enviar, de ou para, qualquer repositório a qualquer hora com nenhuma re-integração desnecessária."

"O Codeville funciona através da criação de um identificador para cada mudança que é feita, e relembrando a lista de todas as mudanças que tem sido aplicadas para cada arquivo e a última mudança que modificou cada linha em cada arquivo. Quando há algum conflito, ele verifica se um dos dois lados já foi aplicado ao outro; se já foi aplicado, ele faz com que o outro lado ganhe automaticamente. Quando há um conflito real, não automático, de versões mescláveis, o Codeville se comporta quase da mesma maneira que o CVS."

"O Vesta é um sistema SCM (Software Configuration Manager - um gerenciador de configuração de software) portável orientado para apoiar o desenvolvimento de sistemas de software de quase qualquer tamanho, desde os relativamente pequenos (abaixo de 10.000 linhas de código) até os muito grandes (10.000.000 de linhas de código)."

"O Vesta é um sistema maduro. Ele é o resultado de aproximadamente 10 anos de pesquisas e desenvolvimento no Compaq/Digital Systems Research Center (Centro de Pesquisas de Sistemas Compaq/Digital), e foi usado em produção pelo Compaq's Alpha microprocessor group (grupo do microprocessador Alpha do Compaq) por aproximadamente dois anos e meio. O grupo Alpha teve cerca de 150 desenvolvedores ativos em dois locais que estavam a milhares de kilômetros de distância um do outro, nas costas leste e oeste dos Estados Unidos. O grupo usava o Vesta para gerenciar compilações com tanto quanto 130 MB de fonte de dados, cada qual produzindo 1,5 GB de dados derivados. As compilações feitas no leste em um dia normal produziram cerca de 10-15 GB de dados derivados, tudo gerenciado pelo Vesta. Embora o Vesta foi projetado com a idéia de gerenciar desenvolvimentos de software, o grupo Alpha demonstrou a flexibilidade do sistema usando-o para desenvolvimento de hardware, registrando seus arquivos de linguagem de descrição de hardware no código fonte do Vesta para habilidade de controle e construção de simuladores e outros objetos derivados com o construtor do Vesta. Os membros do primitivo grupo Alpha, agora uma parte da Intel, continuam usando o Vesta hoje em um novo projeto de microprocessador."

O Aegis é um sistema de gerenciamento de configuração de software baseado em transação. Ele fornece um quadro no qual uma equipe de desenvolvedores pode trabalhar em muitas mudanças para um programa independentemente, e o Aegis coordena integrando essas mudanças de volta para a fonte principal do programa, com o mínimo de transtorno possível.

CVSNT — http://cvsnt.org/

"O CVSNT é um avançado sistema de controle de versão multiplataforma. Compatível com o protocolo CVS, padrão da indústria, ele agora suporta muito mais recursos. ... O CVSNT é um software de código aberto (Open Source) e livre, sob os termos da Licença Pública Geral GNU (GNU GPL)." Sua lista de recursos inclui autenticação via todos os protocolos padrões do CVS, mais os específicos do Windows, SSPI e Active Directory; suporte a transporte seguro, via sserver ou SSPI encriptado; plataforma cruzada (funciona nos ambientes Windows ou Unix); a versão NT é totalmente integrada com o sistema Win32; o processamento MergePoint significa sem mais marcação para mesclar; se encontra sob desenvolvimento ativo.

"O Meta-CVS é um sistema de controle de versão construido em torno do CVS. Embora retenha a maioria dos recursos do CVS, incluindo todo o suporte de rede, ele é mais competente e mais fácil de usar." Os recursos listados no site do Meta-CVS incluem: versionamento da estrutura de diretótio, tratamento aperfeiçoado de tipo de arquivo, ramificação de versões e mesclagem mais simples e mais amigáveis, suporte a links simbólicos, listas de propriedades anexadas aos dados versionados, importação melhorada de dados de terceiros e fácil atualização a partir do estoque do CVS.

"O OpenCM é concebido como um substituto seguro para o CVS de alta integridade. Uma lista das principais características pode ser encontrada na página de recursos. Embora não seja tão "rico em recursos" como o CVS, ele suporta algumas coisas úteis que o CVS não possui. Brevemente, o OpenCM oferece suporte de primeira classe para renomeações e configuração, autenticação criptografada e controle de acesso, e árvores de versões de primeira classe."

"O PRCS, Project Revision Control System, é a interface para uma série de ferramentas que (como o CVS) oferece uma maneira de lidar com uma série de arquivos e diretórios individualmente, preservando versões coerentes de toda a série. ... Seu objetivo é similar ao do SCCS, RCS e CVS, mas (de acordo com os seus autores, pelo menos) ele é muito mais simples do que todos aqueles sistemas."

O ArX é um sistema de controle de versão distribuída que oferece recursos de árvore de versões e integração, verificação criptográfica de integração de dados, e a habilidate de publicar arquivos facilmente em qualquer servidor HTTP.

SourceJammer — http://sourcejammer.org/

"O SourceJammer é um sistema controlador de código-fonte e versão escrito em Java. Ele consiste de um componente do lado servidor que mantém os históricos de arquivos e versões, e trata de ckeck-in, check-out, etc. e outros comandos; e de um componente do lado cliente que faz pedidos ao servidor e gerencia os arquivos do sistema de arquivos do lado cliente."

"Um sistema 'moderno' que usa changesets sobre revisões de arquivos e operação distribuída em vez de controle centralizado. Tendo uma conta de e-mail você pode usar o FastCST. Para distribuições maiores você só precisa de um servidor FTP e/ou um servidor HTTP ou utilizar o comando embutido 'serve' para servir teu material diretamente. Todos os changesets são diferentes universalmente e possuem toneladas de meta-dados, desta maneira, você pode rejeitar qualquer coisa que você não queira antes de testar. A integração (merging) é feita comparando-se um changeset integrado com o atual conteúdo do diretório, em vez de tentar integrá-lo com um outro changeset."

Superversion — http://www.superversion.org/

"O Superversion é um sistema de controle de versão distribuída multi-usuário baseado em listas de mudanças (changesets). Ele pretende ser de força industrial, uma alternativa de código aberto para as soluções comerciais, sendo igualmente fácil de usar (ou ainda mais fácil) e igualmente poderoso. De fato, usabilidade intuitiva e eficiente tem sido uma das principais prioridades no desenvolvimento do Superversion desde o início."