# 3. Desenvolvimento distribuído do Ubuntu — Introdução

Este guia foca o empacotamento usando o método de Desenvolvimento distribuído do Ubuntu (UDD).

O Desenvolvimento Distribuído Ubuntu (sigla em inglês UDD) é uma nova técnica para o desenvolvimento dos pacotes do Ubuntu que usa ferramentas, processos e fluxos de trabalho similares ao desenvolvimento de programas baseados no sistema de controle de versão distribuído (sigla em inglês DVCS) genérico. O DVCS usado pelo UDD é o Bazaar.

## 3.1. Limitações do empacotamento tradicional

Tradicionalmente, os pacotes do Ubuntu são mantidos em arquivos tar. Um pacote fonte tradicional é composto pelo tar fonte do upstream, um tar “debian” (ou arquivo diff compactado nos pacotes mais antigos) contendo o empacotamento e um arquivo de metadados .dsc. Para ver um pacote tradicional, execute:

    $ apt-get source kdetoys

Isto irá baixar o fonte do upstream “kdetoys_4.6.5.orig.tar.bz2”, o empacotamento “kdetoys_4.6.5-0ubuntu1.debian.tar.gz” e os metadados “kdetoys_4.6.5-0ubuntu1~ppa1.dsc”. Pressupondo que você possua o dpkg-dev instalado, ele irá extrair esses pacotes e lhe dar o pacote fonte.

O empacotamento tradicional consistiria em editar esses arquivos e então enviá-los de volta. Entretanto, isto daria pouca oportunidade de colaborar com outros desenvolvedores, alterações teriam que ser passadas através de arquivos diff sem uma maneira centralizada de rastreá-los, e dois desenvolvedores não poderiam fazer alterações ao mesmo tempo. Então a maioria dos times passaram a colocar os seus empacotamentos em um sistema de controle de revisão. Isto torna mais fácil para diversos desenvolvedores trabalharem em um pacote juntos. Entretanto, não há conexão direta entre o sistema de controle de revisão e os pacotes do arquivo, então os dois devem ser mantidos em sincronia manualmente. Como cada time trabalha em seu próprio sistema de controle de revisão, um desenvolvedor em potencial deve antes descobrir onde está e como obter o empacotamento antes que possa trabalhar no pacote.

## 3.2. Desenvolvimento distribuído do Ubuntu

With Ubuntu Distributed Development all packages in the Ubuntu (and Debian) archive are automatically imported into Bazaar branches on our code hosting site Launchpad. Changes can be made directly to these branches in incremental steps and by anyone with commit access. Changes can also be made in forked branches and merged back in with Merge Proposals when they are large enough to need review or if they are by someone without direct commit access.

Os ramos UDD estão todos em uma localização padrão, então fazer um checkout é fácil:

    $ bzr branch ubuntu:kdetoys

O histórico de mesclagens inclui dois ramos separados, um para a fonte upstream e outro que adiciona o diretório de empacotamento “debian/”:

    $ cd kdetoys
    $ bzr qlog

(Este comando utiliza qbzr para uma interface gráfica, execute `log` em vez de `qlog` para saída de console.)

This UDD branch of kdetoys shows the full packaging for each version uploaded to Ubuntu with grey circles and the upstream source versions with green circles. Versions are tagged with either the version in Ubuntu such as `4:4.2.29-0ubuntu1` or for the upstream branch with the upstream version `upstream-4.2.96`.

Many Ubuntu packages are based on the packages in Debian, UDD also imports the Debian package into our branches. In the kdetoys branch above the Debian versions from unstable are from the merge with blue circles while those from Debian experimental are from the merge with yellow circles. Debian releases are tagged with their version number, e.g., `4:4.2.2-1`.

So from a UDD branch you can see the complete history of changes to the package and compare any two versions. For example, to see the changes between version 4.2.2 in Debian and the 4.2.2 in Ubuntu use:

    $ bzr qdiff -r tag:4:4.2.2-1..tag:4:4.2.2-1ubuntu1

(Esse comando usa qbzr para uma GUI, execute `diff` ao invés de `qdiff` para saída no terminal.)

A partir disto, podemos observar claramente o que foi alterado no Ubuntu em comparação com o Debian, muito útil.

## 3.3. Bazaar

Os ramos UDD utilizam o Bazaar, um sistema de controle de revisão distribuída que visa ser fácil de usar àqueles familiarizados com sistemas famosos como o Subversion, oferencendo, ao mesmo tempo, os recursos do Git.

To do packaging with UDD you will need to know the basics of how to use Bazaar to manage files. For an introduction to Bazaar see the Bazaar Five Minute Tutorial and the Bazaar Users Guide.

## 3.4. Limitações do DDU

O desenvolvimento distribuído do Ubuntu é um novo método para trabalhar com pacotes Ubuntu. Ele atualmente tem algumas limitações notáveis:

- Doing a full branch with history can take a lot of time and network resources. You may find it quicker to do a lightweight checkout `bzr checkout --lightweight ubuntu:kdetoys` but this will need a network access for any further bzr operations.

- Trabalhar com patches é difícil. Patches podem ser vistos como um sistema de controle de revisão ramificado, então nós acabamos com um RCS em cima de um RCS.

- Não há como compilar diretamente a partir dos ramos. Você precisa criar um pacote fonte e enviá-lo.

- Alguns pacotes não foram importados apropriadamente para os ramos do UDD. Versões recentes do Bazaar irão notificá-lo automaticamente quando este for o caso. Você também pode verificar o status of the package importer manualmente antes de trabalhar em um ramo.

All of the above are being worked on and UDD is expected to become the main way to work on Ubuntu packages soon. However currently most teams within Ubuntu do not yet work with UDD branches for their development. However because UDD branches are the same as the packages in the archive any team should be able to accept merges against them.