Prefácio Porquê escrever este livro? Em festas, as pessoas já não me dirigem olhares vazios quando lhes digo que escrevo software livre. "Ah, sim, software livre—como Linux?" dizem-me. Aceno concordantemente a cabeça. "Sim, exactamente! É isso que faço." Como é bom não me sentir mais à margem. Antigamente, a pergunta seguinte era bastante previsível: "Como é que fazes dinheiro dessa forma?" Para responder, teria de resumir as bases económicas do software livre: existem organizações cujo interesse está na disponibilidade de certo software, mas que não precisam de vender cópias. Tão somente, precisam de garantir a sua disponibilidade e manutenção, como ferramenta em vez de comodidade. Ultimamente, porém, a pergunta seguinte não tem sido sempre sobre dinheiro. As oportunidades de negócio para software livreOs termos "open source" e "livre" são essencialmente sinónimos neste contexto; são discutidos mais a fundo em em . já não são tão misteriosas e muitos não-programadores já compreendem—ou, pelo menos, não se surpreendem—que há pessoas empregadas neste contexto a tempo inteiro. Pelo contrário, a questão que tenho ouvido cada vez mais é "Oh, como é que isso funciona?" Eu não tinha uma resposta satisfatória pronta e, quanto mais tentava produzir uma, mais eu concluía quão complexo é este tópico. Gerir um projecto de software livre não é exactamente o mesmo que gerir um negócio (imagine ter de negociar constantemente a natureza do seu produto com um grupo de voluntários, muitos dos quais nunca viu!). Nem, por várias razões, é o mesmo que gerir uma organização sem fins lucrativos tradicional, ou um governo. Tem semelhanças com todas estas situações, mas tenho chegado progressivamente à conclusão de que o software livre é sui generis. Há muitas coisas com as quais pode ser comparado proveitosamente, mas nenhuma com a qual possa ser igualado. De facto, até mesmo assumir que projectos de software livre podem ser "geridos" é já forçar um pouco o conceito. Um projecto de software livre pode ser iniciado, e pode ser influenciado por partes interessadas, muitas vezes de forma intensa. Os seus bens, todavia, não podem ser tornados propriedade de nenhum proprietário individual e, enquanto houver pessoas algures—seja em que lugar for—interessadas em continuar o projecto, não pode ser encerrado unilateralmente. Todos têm poder infinito; todos têm poder nulo. Surge assim uma dinâmica interessante. Foi por isso que quis escrever este livro. Os projectos de software livre desenvolveram uma cultura distinta, um ethos onde a liberdade de tornar o software capaz de fazer o que quisermos é um aspecto fundamental e, no entanto, o resultado desta liberdade não é a desagregação de indivíduos seguindo cada um o seu próprio rumo com o código, mas antes uma entusiástica colaboração. De facto, competência na própria colaboração é uma das capacidades mais valorizadas no software livre. Gerir estes projectos é entrar numa forma hipertrófica de cooperação, onde a habilidade de cada um para não apenas trabalhar com outros mas também criar novas formas de colaboração conjunta pode resultar em benefícios tangíveis para o software. Este livro tenta descrever as técnicas pelas quais isto é conseguido. Não é certamente completo, mas é pelo menos um início. Software livre de qualidade é um objectivo valioso em si mesmo, e eu espero que os leitores que buscam aqui formas de o alcançar fiquem satisfeitos com o que encontram aqui. Mas, para além disso, espero também transmitir um pouco da satisfação em trabalhar com uma equipa motivada de programadores de software livre e em interagir com utilizadores na forma maravilhosamente directa encorajada pelo open source. Participar num projecto de software livre bem sucedido é divertido, e em última análise é isto que faz todo o sistema avançar. Quem deve ler este livro? Este livro é destinado a programadores de software e gestores que estão pensando iniciar um projecto de software livre, ou que já iniciaram e pensam no que fazer em seguida. Deverá também ser útil àqueles que querem apenas participar num projecto de software livre, sem experiência prévia. O leitor não precisa de ser programador, mas deve conhecer conceitos básicos de engenharia de software como código-fonte, compiladores e patches. Experiência prévia com software livre, como utilizador ou programador, não é necessária. Os que já trabalharam antes em projectos de software livre irão provavelmente achar um pouco óbvias algumas partes do livro, e poderão querer saltar essas secções. Dado que a experiência da audiência é potencialmente alargada, fiz um esforço para identificar claramente as secções, indicando que material pode ser saltado para aqueles já familiarizados com este. Fontes Muita da matéria-prima para este livro resultou de cinco anos de trabalho com o projecto Subversion (). Subversion é um sistema livre de controlo de versões, escrito de raíz com o propósito de substituir CVS como o sistema de controlo de versões de facto predilecto da comunidade open source. O projecto foi iniciado pelo meu empregador, CollabNet (), no início de 2000 e, felizmente, CollabNet compreendeu de imediato como geri-lo como um esforço distribuído verdadeiramente colaborativo. Tivemos desde muito cedo um grande envolvimento de programadores voluntários; hoje existem cerca de 50 programadores no projecto, dos quais apenas alguns são empregados pela CollabNet. Subversion é em muitos aspectos um exemplo clássico de um projecto de software livre e eu acabei por me basear nele mais do que esperava inicialmente. Isto acontece em parte por conveniência: sempre que precisei de um exemplo de algum fenómeno particular, podia normalmente lembrar-me de cabeça de algo ocorrido no Subversion. Foi, todavia, também por necessitar de verificação. Embora esteja envolvido noutros projectos de software livre a vários níveis e falado com amigos e conhecidos envolvidos em muitos outros, rapidamente apercebemo-nos de que as ideias precisam de ser confirmadas com factos. Eu não quis fazer afirmações sobre eventos noutros projectos baseado apenas no que podia ler nos arquivos públicos das listas de email. Se alguém tentasse fazer o mesmo com o Subversion, eu sabia que estaria correcto em metade das vezes e errado nas restantes. Assim, quando quis buscar inspiração ou exemplos de um projecto com o qual não tinha experiência directa, tentei primeiro falar com alguém envolvido em quem eu pudesse confiar para me explicar o que realmente estava sucedendo. Subversion é o meu emprego desde há 5 anos, mas tenho estado envolvido no software livre há 12. Outros projectos que influenciaram este livro incluem: O projecto do editor de texto GNU Emacs na Free Software Foundation, onde mantenho alguns pequenos pacotes. Concurrent Versions System (CVS), no qual trabalhei intensamente em 1994–1995 com Jim Blandy, estando apenas ocasionalmente envolvido desde então. A colecção de projectos open source conhecida como Apache Software Foundation, especialmente o Apache Portable Runtime (APR) e o Servidor HTTP Apache. OpenOffice.org, a Base de Dados Berkeley de Sleepycat e a Base de Dados MySQL; não tenho estado pessoalmente envolvido nestes projectos, mas tenho-os observado e, em alguns casos, falado com pessoas participantes neles. GNU Debugger (GDB) (semelhantemente). O Projecto Debian (semelhantemente). Esta não é uma lista completa, evidentemente. Tal como a maioria dos programadores open source, vou observando muitos projectos diferentes, só para ter noção do estado geral. Não vou nomeá-los todos aqui, mas serão mencionados no texto sempre que for apropriado. Agradecimentos Este livro demorou a escrever o quádruplo do tempo que eu tinha julgado inicialmente necessário e, durante grande parte desse tempo, senti como se um piano de cauda estivesse suspenso sobre mim onde quer que fosse. Sem a ajuda de muitas pessoas, não teria sido capaz de completá-lo mantendo-me são. Andy Oram, o meu editor na O'Reilly, foi o sonho de qualquer escritor. Para além de conhecer a fundo o assunto (sugeriu muitos dos tópicos), ele tem a virtude rara de saber o que queremos dizer e de nos ajudar a encontrar a forma correcta de o fazer. Tem sido uma honra trabalhar com ele. Agradeço também a Chuck Toporek por encaminhar esta proposta ao Andy. Brian Fitzpatrick reviu praticamente todo o material à medida que o fui escrevendo, o que não apenas tornou o livro melhor, mas também incitou-me a continuar escrever mesmo quando era a última coisa que desejava no momento. Ben Collins-Sussman e Mike Pilato foram também olhando o progresso e estavam sempre dispostos a discutir—às vezes em profundidade—qualquer que fosse o tópico que estava tentando cobrir nessa semana. Eles também notaram sempre que eu abrandava e gentilmente animaram-me a continuar quando necessário. Obrigado, rapazes. Biella Coleman estava escrevendo a sua dissertação ao mesmo tempo que eu escrevia este livro. Ele sabe o que é sentar e escrever todos os dias e foi um exemplo inspirador, bem como um alguém que soube ouvir. Ela também tem um ponto de vista fascinante de antropóloga, dando ideias e referências que pude utilizar no livro. Alex Golub—outro antropólogo com um pé no mundo do software livre, também concluíndo a sua dissertação ao mesmo tempo— foi um apoio excepcional desde cedo, o que ajudou imenso. Micah Anderson de algum modo nunca esteve demasiado absorvido com a sua escrita, o que foi inspirador de uma forma algo invejável, mas esteve sempre disponível com a sua amizade, conversas e (pelo menos numa ocasião) suporte técnico. Obrigado, Micah! Jon Trowbridge e Sander Striker deram encorajamento e ajuda concreta—a sua experiência alargada em software livre forneceu material que não teria obtido de outro modo. Obrigado a Greg Stein não apenas pela sua amizade e encorajamento oportuno, mas também por mostrar ao projecto Subversion como é importante a revisão regular de código na formação de uma comunidade de programadores. Obrigado também a Brian Behlendorf, que nos incutiu a importância de manter as discussões publicamente; espero que esse princípio esteja patente ao longo do livro. Obrigado a Benjamin "Mako" Hill e Seth Schoen, por várias conversas sobre software livre e a sua política; a Zack Urlocker e Louis Suarez-Potts por tirarem tempo das suas agendas bem ocupadas para serem entrevistados; a Shane na lista Slashcode por permitir citar a sua mensagem; e a Haggen So pela sua comparação imensamente útil de sites de alojamento pré-preparado. Obrigado a Alla Dekhtyar, Polina e Sonya pelo seu encorajamento paciente e incansável. Estou feliz por não ter mais de terminar (ou melhor, tentar terminar sem sucesso) os nossos serões cedo para ir para casa trabalhar no "Livro." Obrigado a Jack Repenning pela amizade, conversas e uma recusa teimosa em aceitar sequer uma análise fácil e errada quando a correcta e mais difícil existe. Espero que alguma da sua longa experiência no desenvolvimento de software e na respectiva indústria tenha permeado este livro. CollabNet foi excepcionalmente generosa ao permitir-me um horário flexível para escrever, sem queixas quando o tempo inicialmente previsto foi largamente ultrapassado. Não conheço todos os detalhes de como a gestão toma tais decisões, mas suspecto que Sandhya Klute, e depois Mahesh Murthy, tiveram algo a ver com isso—o meu obrigado aos dois. Toda a equipa de desenvolvimento do Subversion tem sido uma inspiração nos últimos cinco anos, e muito do que está neste livro aprendi ao trabalhar com eles. Não vou agradecer a todos nomeando-os aqui, porque são demasiado numerosos, mas imploro a qualquer leitor que encontre um committer do Subversion a pagar-lhe de imediato uma bebida da sua preferência—eu planeio fazer isso com certeza. Por vezes dou umas dicas a Rachel Scollon sobre o estado do livro; ela está sempre pronta a houvir, e de algum modo consegue tornar os problemas mais pequenos do que antes de falarmos. Isso ajuda-me muito obrigado. (Mais uma vez) obrigado a Noel Taylor, que deve ter pensado porque carga de água é que eu quererira escrever outro livro visto ter-me queixado tanto da última vez, mas cuja amizade e liderança da Golosá ajudou a manter a música e a boa camaradagem na minha vida mesmo nos momentos mais ocupados. Obrigado também a Matthew Dean e Dorothea Samtleben, amigos e à longo tempo companheiros musicais sofredores, que foram muito compreensívos com as minhas desculpas quando o meu treino não efectuado cresceu. Megan Jennings foi constantemente atenciosa e genuinamente interessada no tópico mesmo não lhe sendo familiar, um grande tónico para um escritor inseguro. Obrigado, companheira! Tive quatro revisores conhecedores e diligentes para este livro: Yoav Shapira, Andrew Stellman, Davanum Srinivas e Ben Hyde. Se tivesse sido capaz de incorporar todas as suas excelentes sugestões este livro teria sido um melhor livro. Tal como foi, os constrangimentos de tempo obrigaram-me a apanhar e escolher, mas as melhorias forma ainda assim significativas. Quaisquer erros que se tenham mantido são inteiramente meus. Os meus pais, Frances e Henry, foram os auxiliares maravilhos como sempre e visto este livro ser menos técnico que o anterior, espero que eles o achem mais legível. Finalmente, gostaria de agradecer aos devotos, Karen Underhill e Jim Blandy. A amizade e compreenção da Karen significaram tudo para mim, não só durante a escrita deste livro mas nos últimos sete anos. Simplesmente não teria acabado sem a sua ajuda. O mesmo em relação ao Jim, um verdadeiro amigo e um «hacker» de «hackeres», que me ensinou sobre software livre, tal como um passáro ensina um avião a voar. Aviso Os pensamentos e opiniões expressados neste livro são da minha autoria. Não representam necessariamente os pontos de vista de CollabNet ou do projecto Subversion.