Dinheiro
Este capítulo examina como trazer fundos para o ambiente do
software livre. Destina-se não só aos programadores quer são pagos
para trabalhar em projectos de software livre, mas também os seus
gestores, que necessitam de compreender as dinâmicas sociais do
ambiente de desenvolvimento. Nas secções seguintes, o destinatário
("você") presume-se ser ou um programador pago ou alguém que gere
tais programadores. O conselho será frequentemente o mesmo para
ambos; quando não, a audiência destinatária será tornada clara pelo
contexto.
O custeio por parte de empresas de desenvolvimento de software
livre não é um fenómeno novo. Muito do desenvolvimento foi sempre
informalmente subsidiado. Quando um administrador de sistemas escreve
uma ferramenta de análise de rede para o ajudar nas suas tarefas e que
depois a coloca em linha e obtém correcções de erros e contribuições
com novas características de outros administradores de sistemas, o
que sucedeu foi ter-se formado um consórcio não formal. Os fundos do
consórcio provêm dos salários dos administradores de sistemas e do
seu espaço de escritório e largura de banda doados, mesmo que
ignorado, pelas organizações onde trabalham. Estas organizações
tiram benefícios do investimento, claro, embora possam não estar
institucionalmente conscientes de tal facto.
A diferença actualmente é que muitos destes esforços estão a ser
formalizados. As empresas ficaram conscientes das vantagens do software
open source, e começaram-se a envolver elas próprias mais directamente
no seu desenvolvimento. Os programadores também começaram a ter
expectativas que os projectos importantes atraíssem doações senão mesmo
apoios de longo prazo. Enquanto a presença do dinheiro não alterou a
dinâmica fundamental do desenvolvimento do software livre, mudou
grandemente a escala de como as coisas sucedem, tanto em termos de
número de programadores como de número de horas por programador. Também
teve efeitos em como os projectos são organizados e como é que as
várias entidades envolvidas interagem. Os assuntos não são de mera
atribuição de despesas ou como é que o retorno do investimento é medido.
Trata-se também de gestão e processo: como é que estruturas hierárquicas
de comando das empresas e de comunidades de voluntários
semi-descentralizadas de projectos de software livre trabalham
produtivamente umas com as outras? Será que conseguem acordar sobre o
que significa "produtividade"?
O suporte financeiro, em geral, é bem vindo pelas comunidades
de open source. Pode reduzir a vulnerabilidade do projecto às Forças
do Caos, que deitam abaixo muitos projectos mesmo antes de eles
começarem, e assim pode tornar as pessoas mais dispostas a dar uma
oportunidade ao software — As pessoas sentem estar a investir
o seu tempo em algo que ainda andará por cá nos próximos seis meses.
Quando, digamos, a IBM suporta um projecto de open source, as pessoas
presumem que o projecto não será deixado falhar e ficam com mais
disposição para envidarem esforços para tornar tal um profecia
auto-induzida.
Contudo, o suporte financeiro trás uma percepção de controlo.
Se não for cuidadosamente tratado, o dinheiro pode dividir um projecto
em programadores do cerne e programadores externos. Se os voluntários
não pagos ficam a sentir que as decisões de concepção ou as introduções
de características estão simplesmente disponíveis para quem paga mais,
saiam do projecto para se integrarem num que se assemelhe mais a uma
meritocracia e menos como trabalho subordinado para proveito de outrem.
Podem nunca reclamar abertamente nas listas de distribuição de correio.
Em vez disso, haverá simplesmente menos e menos ruído de fontes externas,
à medida que os voluntários gradualmente deixarem de tentar ser levados
a sério. O ruído da actividade de pequena escala irá continuar, na forma
de relatórios de erros e correcções pequenas ocasionais. Mas não haverá
contribuições significativas de código ou participação externa em
discussões sobre concepção. As pessoas sentem o que se espera delas,
e vivem (ou não) de acordo com essas expectativas.
Embora o dinheiro necessite ser usado com cuidado, isso não significa
que não possa comprar influência. Claro que pode. O truque é que não pode
comprar influência de modo directo. Numa transacção comercial directa,
troca dinheiro por aquilo que deseja. Se necessita de ver introduzir uma
característica, assina um contrato, paga-o e isso é feito. Num projecto
open source, tal não é assim tão simples. Pode assinar um contrato com
alguns programadores, mas eles estarão a enganar-se a si próprios —
e a si — se lhe garantirem que o trabalho que pagou será aceite
pela comunidade de desenvolvimento simplesmente porque pagou por ele. O
trabalho só poderá ser aceite se tiver mérito próprio e se se enquadrar
na visão da comunidade para o software. Poderá ter algo a dizer nessa
visão, mas não vai ser a única voz.
Assim o dinheiro não pode comprar influência mas pode comprar coisas
que conduzam à influência. A coisa mais óbvia são
programadores. Se os bons programadores forem empregues e se se mantiverem
durante tempo suficiente, então eles podem influenciar o projecto da mesma
forma que qualquer outro membro. Eles irão ter um voto, ou se forem
vários um bloco de votação. Se forem respeitados no projecto, irão
influenciar para além dos seus próprios votos. Não é necessário aos
programadores mascararem os seus motivos. Independentemente de qualquer
outra coisa, todos os que desejem que uma mudança seja feita ao software
desejam-na por alguma razão. As razões da sua empresa não são menos
legítimas do que as razões de qualquer outra pessoa. Só que o peso
dado aos objectivos da sua empresa serão determinados pelo estatuto
dos seus representantes no projecto e não pelo tamanho, orçamento ou plano
de negócios da empresa.
Tipos de Envolvimento
Há muitas razões diferentes pelas quais os projectos open
source são financiados. Os itens nesta lista não são mutuamente
exclusivos; frequentemente o financiamento do projecto irá resultar
de várias ou mesmo todas estas motivações:
Partilhar o peso
Organizações separadas com necessidades de software relacionadas
por vezes duplicam esforços, ou escrevendo código similar
de modo redundante dentro de portas ou adquirindo produtos
similares ou a fornecedores de código proprietário. Quando
percebem o que está a suceder as organizações podem consorciar-se
juntando recursos ou criando (ou juntando-se a) um projecto
open source adequado às suas necessidades. As vantagens são
óbvias: os custos de desenvolvimento são repartidos, mas as
vantagens são totais são para todos. Embora este cenário possa
parecem intuitivo para organizações sem fins lucrativos, pode
fazer sentido estratégico mesmo para concorrentes comerciais.
Exemplos: ,
Ampliando serviços
Quando uma companhia vende serviços dos quais dependem, ou
são tornados mais atraentes por, determinados programas de open
source, é do interesse natural da companhia assegurar que esses
programas sejam mantidos activamente.
Exemplo: CollabNet O apoio da Collabnet
ao (aviso à navegação:
trata-se do meu emprego, mas também é um exemplo perfeito deste
modelo).
Suporte de vendas de hardware
O valor dos computadores e dos componentes de computadores
está directamente relacionado com a quantidade de software neles
disponível. Fornecedores de hardware — não só fornecedores
de máquinas completas, mas também fabricantes de dispositivos
periféricos e microchips — perceberam que ter software livre
de elevado calibre para correr no seu hardware é importante para
os seus clientes.
Minar um concorrente
Por vezes as companhias suportam um projecto open source de
modo a minar o produto de um concorrente, o qual pode ou não ser
ele próprio open source. Comer uma parte da quota de mercado de
um concorrente não é normalmente a única razão para se envolver num
projecto open source, mas pode ser um factor.
Exemplo: (Não, não
é esta a única razão pela qual existe o OpenOffice, mas o software
é parcialmente uma resposta ao Microsoft Office).
Marketing
Ter a sua empresa associada a uma aplicação popular de
open source pode ser simplesmente uma boa gestão de marca.
Duplo licenciamento
O duplo licenciamento é a prática
de um software ser oferecido sob uma licença proprietária
tradicional a clientes que a desejem revender como parte
de uma aplicação proprietária própria, e simultaneamente
sob uma licença livre para os que a desejem usar sob licença
open source (ver
em
).
Se a comunidade de desenvolvimento open source é activa
o software obtém as vantagens de uma área alargada de
depuração e desenvolvimento e contudo a empresa continua
a obter um fluxo de royalty para suportar alguns dos
programadores a tempo inteiro.
Dois exemplos bem conhecidos são MySQL, produtores da
do software de gestão de base de dados do mesmo nome e
Sleepycat, a qual
oferece distribuições e suporte para a gestão de base de
dados Berkeley Database. Não se trata de coincidência que
sejam ambas empresas de sistemas de gestão de bases de dados.
O software de gestão de base de dados tende a ser integrado
em aplicações em vez de ser vendido directamente aos
utilizadores, sendo pois um caso bem adequado ao modelo
do duplo licenciamento.
Doações
Um projecto que seja usado de modo alargado pode por vezes
obter contribuições significativas, quer de indivíduos quer
de organizações, tendo só um botão para doações em linha, ou
vendendo merchandise com a marca tal como chávenas de café,
camisolas, tapetes para rato, etc. Uma palavra de cuidado:
se o seu projecto aceitar doações, faça o planeamento da
utilização do dinheiro antes de ele entrar
e apresente o orçamento no sítio web do projecto. As discussões
sobre como atribuir dinheiro tendem a ser mais fáceis quando
tidas antes de haver dinheiro para gastar; de qualquer modo,
se houver desentendimentos significativos, é melhor saber
enquanto tais desentendimentos sejam académicos.
Um modelo de negócios do financiador não é o único factor de
como ele se relaciona com a comunidade open source. A relação
histórica entre os dois também tem importância: a empresa começou
o projecto ou juntou-se já com esforço de desenvolvimento existente.
Em ambos os casos o financiador terá que ganhar credibilidade, mas,
sem ser surpreendente há algo mais a fazer no último caso para a
ganhar. A organização necessita ter objectivos claros em relação
ao projecto. Se a empresa estiver a tentar manter a liderança, ou
simplesmente a tentar ser uma voz na comunidade, para guiar mas não
necessariamente para governar a direcção do projecto? Ou deseja
só tem um par de submetedores por aí, de modo a serem capazes de
corrigir erros de clientes e obter alterações na distribuição
pública sem complicações?
Lembre-se destas questões à medida que for lendo as directrizes
que se seguem. Estas destinam-se a ser aplicadas em qualquer envolvimento
num projecto de software livre, mas cada projecto é um ambiente humano
e assim não haverá dois exactamente iguais. Até certo ponto,
terá sempre que tocar de ouvido, mas seguindo estes princípios
aumentará a probabilidade de as coisas decorrerem como deseja.
Empregue a Longo Prazo
Se gere programadores num projecto de open source, mantenha-os
tempo suficiente de modo a que adquiram as capacidades técnicas e
políticas — pelo menos dois anos no mínimo. Claro que nenhum
projecto, open source ou não, tira partido de frequente troca de
programadores. A necessidade de um recém chegado aprender os detalhes
de cada vez será um travão em qualquer ambiente. Mas a penalidade é
ainda maior nos projectos open source, porque programadores que saiam
levam com eles não só o seu conhecimento do código mas também o seu
estatuto na comunidade e as relações humanas que aí tenham feito.
A credibilidade que um programador tenha acumulado não é transferida.
Para escolher o exemplo mais óbvio, um programador não pode herdar o
acesso de submissão de alguém que tenha saído (ver
adiante neste capítulo), assim se
o novo programador não tiver já acesso de submissão, terá que
submeter as diferenças até o ter. Mas o acesso de submissão é só a
manifestação mais mensurável dessa perca de influência. Um programador
de longo prazo também conhece todos os argumentos antigos que foram
apresentados e reapresentados nas listas de discussão. Um programador
novo, não tendo memória dessas conversações pode tentar levantar
esses tópicos novamente, levando a uma perca de credibilidade da sua
organização; os outros podem imaginar que "eles não se lembram de nada?"
Um novo programador não terá sentido político das personalidades do
projecto, e não será capaz de influenciar a direcção do desenvolvimento
de modo tão rápido e suave do que um que já por aí ande à muito
tempo.
Treine novos programadores através de um programa de envolvimento
supervisionado. O novo programador deve ter contacto directo público com
a comunidade de desenvolvimento desde o primeiro dia, começando por
correcções de erros e tarefas de limpeza, de modo a poder aprender os
fundamentos do código e adquirir uma reputação na comunidade, mas não
em algo grande e não sendo envolvido nas discussões de concepção. Durante
algum tempo um ou mais programadores experientes devem estar disponíveis
para interrogatório e devem ler cada entrada que o programador novato faça
para as listas de desenvolvimento, mesmo que se tratem de ramificações
as quais os programadores experientes normalmente não prestem atenção.
Isto irá ajudar a que o grupo de aperceba de pedras potenciais antes que
o programador novato se enterre. Orientação privada e encorajamento nos
bastidores podem também ajudar muito, em especial se o novato não estiver
acostumado a uma revisão do seu código feita em paralelo de modo massivo
por pares.
Quando a CollabNet emprega um novo programador para trabalhar
no Subversion, sentamos-nos com ele e escolhemos uns quantos erros
em aberto para que essa pessoa possa ter um cheirinho. Discutiremos
os aspectos técnicos gerais das soluções e depois escolheremos pelo
menos um programador experiente para (publicamente) rever as diferenças
que o novo programador irá (também publicamente) colocar. Normalmente
não iremos sequer olhar para a diferença antes da lista principal de
desenvolvimento o ver, embora o possamos fazer se houver alguma
razão para isso. O importante é que o novo programador passe pelo
processo de revisão pública, aprendendo as fundações do código e
em simultâneo se habitue a receber críticas de completos estranhos.
Mas tentamos coordenar os tempos de modo a que as nossas próprias
críticas apareçam imediatamente após a colocação da diferença. Assim a
primeira crítica que a lista vê é a nossa, o que pode ajudar a estabelecer
o tom para as críticas dos restantes. Também contribui para a ideia
de que esta nova pessoa é para ser levada a sério: se os outros virem
que estamos a gastar tempo para fazermos uma crítica detalhada,
com explicações profundas e referências ao arquivo quando apropriado,
irão perceber que está a ser efectuada formação, e que tal será
indicativo de investimento a longo prazo. Isso pode levar a que fiquem
mais favoráveis em relação ao programador, pelo menos até ao ponto
de gastarem um pouco mais de tempo em responder às questões e
criticar diferenças.
Aparecer como Vários e Não como Um
Os seus programadores devem tentar aparecer nos foruns
públicos com participantes individuais e não como uma presença
corporativa monolítica. Isto não se deve a haver alguma conotação
negativa em relação às presenças corporativas (bem, talvez seja,
mas não é disso que trata este livro). Em vez disso deve-se
a que os indivíduos são o único tipo de entidade para o qual os
projectos open source estão preparados estruturalmente. Um
contribuinte individual, tem discussões, submete diferenças,
adquire credibilidade, vota, etc... Uma empresa não o pode
fazer.
Além disso, comportando-se de uma forma descentralizada
evita estimular a centralização da oposição. Deixe que os
seus programadores discutam entre si nas listas de distribuição
de correio. Encoraje a crítica do código uns dos outros de forma
frequente, tal como criticariam qualquer outra pessoa. Desencoraje
a votação em bloco, porque se o fizerem, os restantes participantes
podem começar a sentir isso, só em princípios gerais deve haver uma
esforço organizado de modo a manterem-se alinhados.
Há uma diferença entre ser de facto descentralizado e
simplesmente parecer descentralizado. Em algumas circunstâncias
fazer com que os seus programadores se comportem em concerto pode
ser muito útil, e devem preparar-se para se coordenar nos bastidores
quando necessário. Por exemplo, quando se faz uma proposta, ter várias
pessoas a afirmar-se como estando de acordo relativamente cedo pode
ajudar dando a impressão de um consenso crescente. Os restantes podem
achar que a proposta ganhou ímpeto e que se objectarem, podem estar
a parar esse mesmo ímpeto. Assim, as pessoas só irão objectar se
houver uma boa razão para o fazerem. Não há nada de errado na
orquestração de um acordo como este, desde que as objecções sejam,
ainda, levadas a sério. As manifestações públicas de acordos
privados não são menos sinceras por terem sido coordenadas
anteriormente, e não são danosas desde que não sejam usadas para
mascarar argumentos opostos. A sua finalidade é meramente de
inibir aquele tipo que pessoa que goste de objectar só para se
manter em forma; ver
em para informação
adicional sobre esse tipo de pessoa.
Seja Aberto Sobre as Suas Motivações
Seja tão aberto quanto possível quanto aos objectos da sua
empresa sem contudo comprometer segredos comerciais. Se desejar
que o projecto adquira certa característica, diga, que os seus
clientes a têm solicitado, diga-o directamente nas listas de
distribuição de correio. Se os clientes desejarem manter-se
anónimos, como é por vezes o caso, pelo menos pergunte-lhes se
os pode usar como exemplos não identificados. Quanto mais a
comunidade pública de desenvolvimento souber sobre as
razões de querer o que quer, mas confortável
ficaram com aquilo que lhe seja proposto.
Isto contradiz o instinto —tão fácil de adquirir e tão
difícil de afastar — de que conhecimento é poder, e o de que
quanto mais os outros saibam sobre os vossos objectos, mais controlo
têm sobre vós. Mas esse instinto estaria aqui errado. Ao advogar
publicamente uma característica (uma correcção, ou o que quer que
seja), já terá lançado as suas cartas na mesa.
Agora a única questão é se é bem sucedido na orientação da comunidade
para partilhar o seu objectivo. Se não passar do enunciado do que
quer, mas não conseguir oferecer exemplos concretos do porquê, a
sua argumentação é fraca e as pessoas poderão começar a suspeitar que
tem uma agenda secreta. Mas se lhes der alguns cenários do mundo real
que demonstrem a razão pela qual a característica proposta é
importante isso pode ter um efeito dramático no debate.
Para ver como é que isto ocorre, tenha em mente a alternativa.
É demasiado frequente, os debates sobre novas características e
orientações são longos e cansativos. Os argumentos avançados pelas
pessoas podem resumir-se "eu pessoalmente quero isto" ou o ainda
mais popular "na minha experiência como conceptor de software, X é
extremamente importante para os utilizadores / algo inútil que não
irá agradar a ninguém." Provavelmente a ausência de utilização
de dados reais não reduz nem regula estes debates, mas permite em
vez disso a deriva cada vez maior sobre o suporte em qualquer
experiência de utilizador. Sem alguma vigilância o resultado último
é tão provável como não ser determinado pelo mais articulado, ou
o mais persistente ou o mais sénior.
Como uma organização com disponibilidade de dados dos clientes,
tem a oportunidade de oferecer exactamente essa força de
contra-vigilância. Pode ser uma conduta para informação que de outro
modo não tinha meios para alcançar a comunidade de desenvolvimento.
O facto de essa informação auxiliar os seus desejos não é nada
de que o deva embaraçar. A generalidade dos programadores não
têm individualmente uma experiência tão abrangente de como o
software que escrevem é usado. Cada programador usa o software
do seu próprio e idiossincrático método. Em relação aos padrões de uso
de terceiros, esses programadores dependem da sua intuição e capacidade
de adivinhação, e bem lá no fundo compreendem isso mesmo. Ao
providenciar dados reais sobre um número significativo de utilizadores
está a dar à comunidade pública de desenvolvimento algo equivalente
a oxigénio. Desde que os apresente de modo correcto, eles serão
muito bem recebidos e pode propulsionar as coisas na orientação
que deseje.
A chave, claro, é apresentar as coisas de modo correcto. Nunca
funcionara insistir que tem um grande número de utilizadorfes e
porque necessitam (ou pensam necessitar) de uma dada capacidade e por
isso a sua solução tem que ser implementada. Em seu lugar deve
focar as suas mensagens iniciais sobre o problema e não numa
solução determinada. Descreva com grande detalhe as experiências
que os seus clientes estão a encontrar, ofereça tanta análise
quanta a que tenha disponível, e tantas soluções razoáveis quantas
as que consiga pensar. Quando as pessoas começarem a especular
sobre a eficácia das várias soluções pode continuar a esboçar sobre
os seus dados de modo a ajudar ou refutar o que digam. Pode ter uma
solução determinada em mente desde o início mas não lhe dê uma
atenção especial de início. Isto não é enganar, é um comportamento
normal de um "operador de bolsa honesto". Realmente você só quer
resolver o problema; a solução é um mero meio para um fim. Se a
solução que preferir for realmente superior, os outros programadores
irão reconhecer isso por sí próprios eventualmente —e depois
irão por-se a seu lado de sua livre vontade o que é muito melhor
que dar-lhes umas chicotadas para que a implementem. (Há ainda
a possibilidade de eles pensarem numa solução melhor.)
Isto não quer dizer que é proíbido aparecer a favor de uma
solução específica. Mas tem que ter a paciência para ver a análise
que efectuou internamente repetida nas lista de desenvolvimento
públicas. Não faça entradas do género "Sim, já passamos por isso
aqui, mas não funciona devido às razões A, B, e C. Depois de se
ver bem o assunto a única forma do resolver é esta..." O problema
não é tanto parecer arrogante mas sim o de dar a impressão que
já investiu uma quantidade (mas, as pessoas
presumem que grande) de recursos analíticos ao problema, por detrás
de portas. Isto pode fazer parecer que forma efectuados esforços
fontes e que talvez se tenham tomado decisões, às quais o público
não teve acesso e isto é uma receita para ressentimento.
Naturalmente, você sabe quanto esforço
foi devotado ao problema internamente, e esse conhecimento é, de
certo modo, uma desvantagem. Coloca os seus programadores num
espaço mental diferente das restantes pessoas nas lista de distribuição
de correio, reduzindo a sua capacidade de ver as coisas do ponto de
vista daqueles que ainda não se debruçaram tanto sobre o problema.
Quanto mais cedo puder colocar os restantes a pensarem sobre as coisas
no mesmo pé que você, menor será o efeito de distanciamento. Esta lógica
aplica-se não só a situações técnicas individuais, mas sim ao mandato
mais alargado de tornar os seus objectivos tão claros quanto possível.
O desconhecido é sempre mais destabilizador do que aquilo que sabe. Se
as pessoas compreenderem porque é que deseja o que deseja, ficam mais
abertos a falar-lhe mesmo que não concordem consigo. Se não souberem
o que é que faz bater o seu coração, presumem o pior, pelo menos, algum
tempo..
Não irá ser capaz de publicitar tudo, claro e as pessoas não
esperam isso. Todas as organizações têm segredos; talvez as organizações
comerciais tenham mais, as entidades sem fins lucrativos também os têm.
Se tiver de advogar um certo trajecto mas não puder revelar nada sobre
o porquê, então simplesmente apresente os seus melhores argumentos que
puder sob esse constrangimento e aceite o facto de poder não ter a
mesma influência que queria na discussão. É um dos compromissos que
tem que fazer de modo a ter uma comunidade de desenvolvimento que
não esteja na sua lista de pagamento de ordenados.
O Dinheiro Não lhe Pode Comprar Amor
Se for um programador pago no projecto então estabeleça as
regras daquilo que o dinheiro pode ou não comprar. Isto não significa
que tenha que escrever duas vezes por dia para as listas de
distribuição de correio reiterando a sua natureza nobre e incorruptível.
Isto só quer dizer que deve estar atento a oportunidades onde possa
reduzir tensões que possam ser geradas pelo
dinheiro. Não necessita de começar presumir que as tensões
já existam por aí; necessita, isso sim, de demonstrar que tem
consciência de elas poderem potencialmente ecludir.
Um exemplo perfeito surgiu no projecto Subversion. O projecto
Subversion foi iniciado em 2000 pela CollabNet, que tem sido o
principal financiador do projecto desde o seu início, pagando
os salários de vários programadores (nota: sou um deles). Pouco
tempo após o início do projecto, contratamos outro programador,
Mike Pilato, to join the
several developers (disclaimer: I'm one of them). Soon after the
effort. By then, coding had already started. Although Subversion was
still very much in the early stages, it already had a development
community with a set of basic ground rules.
Mike's arrival raised an interesting question. Subversion
already had a policy about how a new developer gets commit access.
First, he submits some patches to the development mailing list. After
enough patches have gone by for the other committers to see that the
new contributor knows what he's doing, someone proposes that he just
commit directly (that proposal is private, as described in ). Assuming the committers agree, one of
them mails the new developer and offers him direct commit access to
the project's repository.
CollabNet had hired Mike specifically to work on Subversion.
Among those who already knew him, there was no doubt about his coding
skills or his readiness to work on the project. Furthermore, the
volunteer developers had a very good relationship with the CollabNet
employees, and most likely would not have objected if we'd just given
Mike commit access the day he was hired. But we knew we'd be setting
a precedent. If we granted Mike commit access by fiat, we'd be saying
that CollabNet had the right to ignore project guidelines, simply
because it was the primary funder. While the damage from this would
not necessarily be immediately apparent, it would gradually result in
the non-salaried developers feeling disenfranchised. Other people
have to earn their commit access—CollabNet just buys
it.
So Mike agreed to start out his employment at CollabNet like any
other volunteer developer, without commit access. He sent patches to
the public mailing list, where they could be, and were, reviewed by
everyone. We also said on the list that we were doing things this way
deliberately, so there could be no missing the point. After a couple
of weeks of solid activity by Mike, someone (I can't remember if it
was a CollabNet developer or not) proposed him for commit access, and
he was accepted, as we knew he would be.
Este tipo de consistência dá-lhe uma credibilidade que o
dinheiro nunca conseguirá comprar. E credibilidade é uma
moeda valiosa a ter em discussões técnicas: é uma imunização
contra ver serem questionadas as motivações em discussões
técnicas mais tarde. No calor da argumentação, por vezes, as pessoas
vêm maneiras não técnicas de ganhar a batalha. O financiador
principal do projecto devido aos seu profundo envolvimento e
preocupação óbvia quanto à orientação que o projecto toma, apresenta
um flanco maior que a maior parte. Sendo escrupuloso na observação
de todas as directrizes do projecto desde o início, o financiador
apresentará um flanco do mesmo tamanho que os restantes participantes.
(Ver ainda o blogue de Danese Cooper em
para uma história similar sobre acesso ao commit. Cooper era a "Open
Source Diva" — da Sun Microsystems julgo que era essa a sua
designação oficial — e nessa entrada no blogue, descreve como a
comunidade de desenvolvimento levou a Sun a aplicar aos seus
programadores os mesmos padrões de acesso a commit que os dos
programadores não-Sun.)
A necessiade dos financiadores jogarem pelas mesmas regras que
todo o mundo significa que será mais difícil aplicar o modelo de
governo do Ditador Benevolente (ver
em ) na presença
de financiamento, particulamente se o ditador trabalhar para o
financiador principal. Visto a ditadura ter poucas gregas, é mais
difícil ao financiador provar que está a cumprir as normas da
comunidade, mesmo quando está. Certamente não é impossível. Só
exige um líder de projecto que seja capaz de ver as coisas do ponto
de vista dos programadores externos, assim como o do financiador
e agir em conformidade. Mesmo assim é provavelmente boa ideia ter uma
proposta para um governo não ditaturial à espera no bolso de trás,
pronto a ser puxado no momento em que haja indicativos de insatizfação
generalizada na comunidade.
Contracting
O trabalho contratado necessita de ser cuidadosamente
tratado em projectos de software livre. Idealmente deseja que o
trabalho executado pelo contratado seja aceite pela comunidade e
englobado na distribuição pública. Teoricamente, não importa quem
seja o contratado, desde que o seu trabalho seja bom e esteja em
conformidade com as directrizes do projecto. A teoria e a prática
podem por vezes corresponder: um completo estranho que aparece com
um bom patch irá geralmente ser capaz de entrar
no software. O problema é que é muito difícil produzir um bom patch
para uma melhoria não trevial ou uma nova capacidade sendo um
completo estranho; em primeiro lugar é necessário discutir-la com
o resto do projecto. A duração da discussão não pode ser prevista
com precisão. Se o contratado trabalhar à hora, poderá acabar
por lhe pagar mais do que o esperado; se lhe pagar uma soma
pré-determinada ele poderá ficar prejudicado.
Há duas maneiras de contornar isto. A maneira preferida é
efectuar uma estimativa sobre a duração do processo de discussão,
baseada em experiência passada, dar alguma folga para erro de
estimativa e finalmente basear o contrato no resultado. Ajuda
dividir o problema em tantas componentes independentes mais pequenas
quanto possível, de modo a aumentar a previsibilidade de cada porção.
A outra maneira é contratar com base na entrega de um patch,
e tratar da aceitação do path pelo projecto público como um
assunto separado. Assim torna-se mais fácil escrever o contrato,
mas ficará com o peso de manter um patch privado enquanto depender
do software ou pelo menos até que consiga que o patch ou
funcionalidade equivalente seja encorporada no corpo principal.
Claro que mesmo da forma preferida o contrato propriamente dito
não pode exigir que o patch tenha que ser aceite no código,
porque isso seria vender algo que não está à venda. (O que
sucederia se o projecto inesperadamente decidisse não
suportar a capacidade?)
Contudo o contrato pode exigir esforço bona
fide de modo a que a alteração seja aceite
pela comunidade, e que seja committed no repositório se a
comunidade concordar com isso. Por exemplo, se o projecto tiver
normas escritas para alterações do código, o contrato pode
referir-se a essas normas e especificar que o trabalho deve
ser feito em conformidade com as mesmas. Na prática, normalmente
isto funciona de acordo com o que as pessoas esperam.
The best tactic for successful contracting is to hire one of the
project's developers—preferably a committer—as the
contractor. This may seem like a form of purchasing influence, and,
well, it is. But it's not as corrupt as it might seem. A developer's
influence in the project is due mainly to the quality of his code and
to his interactions with other developers. The fact that he has a
contract to get certain things done doesn't raise his status in any
way, and doesn't lower it either, though it may make people scrutinize
him more carefully. Most developers would not risk their long-term
position in the project by backing an inappropriate or widely disliked
new feature. In fact, part of what you get, or should get, when you
hire such a contractor is advice about what sorts of changes are
likely to be accepted by the community. You also get a slight shift
in the project's priorities. Because prioritization is just a matter
of who has time to work on what, when you pay for someone's time, you
cause their work to move up in the priority queue a bit. This is a
well-understood fact of life among experienced open source developers,
and at least some of them will devote attention to the contractor's
work simply because it looks like it's going to get
done, so they want to help it get done right. Perhaps they
won't write any of the code, but they'll still discuss the design and
review the code, both of which can be very useful. For all these
reasons, the contractor is best drawn from the ranks of those already
involved with the project.
This immediately raises two questions: Should contracts ever be
private? And when they're not, should you worry about creating
tensions in the community by the fact that you've contracted with some
developers and not others?
It's best to be open about contracts, when you can. Otherwise,
the contractor's behavior may seem strange to others in the
community—perhaps he's suddenly giving inexplicably high
priority to features he's never shown interest in in the past. When
people ask him why he wants them now, how can he answer convincingly
if he can't talk about the fact that he's been contracted to write
them?
At the same time, neither you nor the contractor should act as
though others should treat your arrangement as a big deal. Too often
I've seen contractors waltz onto a development list with the attitude
that their posts should be taken more seriously simply because they're
being paid. That kind of attitude signals to the rest of the project
that the contractor regards the fact of the contract—as opposed
to the code resulting from the contract—to
be the important thing. But from the other developers' point of view,
only the code matters. At all times, the focus of attention should be
kept on technical issues, not on the details of who is paying whom.
For example, one of the developers in the Subversion community handles
contracting in a particularly graceful way. While discussing his code
changes in IRC, he'll mention as an aside (often in a private remark,
an IRC privmsg, to one of the other committers)
that he's being paid for his work on this particular bug or feature.
But he also consistently gives the impression that he'd want to be
working on that change anyway, and that he's happy the money is making
it possible for him to do that. He may or may not reveal his
customer's identity, but in any case he doesn't dwell on the contract.
His remarks about it are just an ornament to an otherwise technical
discussion about how to get something done.
That example shows another reason why it's good to be open about
contracts. There may be multiple organizations sponsoring contracts
on a given open source project, and if each knows what the others are
trying to do, they may be able to pool their resources. In the above
case, the project's largest funder (CollabNet) is not involved in any
way with these piecework contracts, but knowing that someone else is
sponsoring certain bug fixes allows CollabNet to redirect its
resources to other bugs, resulting in greater efficiency for the
project as a whole.
Will other developers resent that some are paid for working on
the project? In general, no, particularly when those who are paid are
established, well-respected members of the community anyway. No one
expects contract work to be distributed equally among all the
committers. People understand the importance of long-term
relationships: the uncertainties involved in contracting are such that
once you find someone you can work reliably with, you would be
reluctant to switch to a different person just for the sake of
evenhandedness. Think of it this way: the first time you hire, there
will be no complaints, because clearly you had to pick
someone—it's not your fault you can't hire
everyone. Later, when you hire the same person a second time, that's
just common sense: you already know him, the last time was
successful, so why take unnecessary risks? Thus, it's perfectly
natural to have one or two go-to people in the community, instead of
spreading the work around evenly.
Funding Non-Programming Activities
Programming is only part of the work that goes on in an open
source project. From the point of view of the project's volunteers,
it's the most visible and glamorous part. This unfortunately means
that other activities, such as documentation, formal testing, etc., can
sometimes be neglected, at least compared to the amount of attention
they often receive in proprietary software. Corporate organizations
are sometimes able to make up for this, by devoting some of their
internal software development infrastructure to open source
projects.
The key to doing this successfully is to translate between the
company's internal processes and those of the public development
community. Such translation is not effortless: often the two are not
a close match, and the differences can only be bridged via human
intervention. For example, the company may use a different bug
tracker than the public project. Even if they use the same tracking
software, the data stored in it will be very different, because the
bug-tracking needs of a company are very different from those of a
free software community. A piece of information that starts in one
tracker may need to be reflected in the other, with confidential
portions removed or, in the other direction, added.
The sections that follow are about how to build and maintain
such bridges. The end result should be that the open source project
runs more smoothly, the community recognizes the company's investment
of resources, and yet does not feel that the company is
inappropriately steering things toward its own goals.
Quality Assurance (i.e., Professional Testing)
In proprietary software development, it is normal to have teams
of people dedicated solely to quality assurance: bug hunting,
performance and scalability testing, interface and documentation
checking, etc. As a rule, these activities are not pursued as
vigorously by the volunteer community on a free software project.
This is partly because it's hard to get volunteer labor for
unglamorous work like testing, partly because people tend to assume
that having a large user community gives the project good testing
coverage, and, in the case of performance and scalability testing,
partly because volunteers often don't have access to the necessary
hardware resources anyway.
The assumption that having many users is equivalent to having
many testers is not entirely baseless. Certainly there's little point
assigning testers for basic functionality in common environments: bugs
there will quickly be found by users in the natural course of things.
But because users are just trying to get work done, they do not
consciously set out to explore uncharted edge cases in the program's
functionality, and are likely to leave certain classes of bugs
unfound. Furthermore, when they discover a bug with an easy
workaround, they often silently implement the workaround without
bothering to report the bug. Most insidiously, the usage patterns of
your customers (the people who drive your
interest in the software) may differ in statistically significant ways
from the usage patterns of the Average User In The Street.
A professional testing team can uncover these sorts of bugs, and
can do so as easily with free software as with proprietary software.
The challenge is to convey the testing team's results back to the
public in a useful form. In-house testing departments usually have
their own way of reporting test results, involving company-specific
jargon, or specialized knowledge about particular customers and their
data sets. Such reports would be inappropriate for the public bug
tracker, both because of their form and because of confidentiality
concerns. Even if your company's internal bug tracking software
were the same as that used by the public project, management might
need to make company-specific comments and metadata changes to the
issues (for example, to raise an issue's internal priority, or
schedule its resolution for a particular customer). Usually such
notes are confidential—sometimes they're not even shown to the
customer. But even when they're not confidential, they're of no
concern to the public project, and therefore the public should not be
distracted with them.
Yet the core bug report itself is important
to the public. In fact, a bug report from your testing department is
in some ways more valuable than one received from users at large,
since the testing department probes for things that other users won't.
Given that you're unlikely to get that particular bug report from any
other source, you definitely want to preserve it and make it
available to the public project.
To do this, either the QA department can file issues directly in
the public issue tracker, if they're comfortable with that, or an
intermediary (usually one of the developers) can "translate" the
testing department's internal reports into new issues in the public
tracker. Translation simply means describing the bug in a way that
makes no reference to customer-specific information (the reproduction
recipe may use customer data, assuming the customer approves it, of
course).
It is somewhat preferable to have the QA department filing
issues in the public tracker directly. That gives the public a more
direct appreciation of your company's involvement with the project:
useful bug reports add to your organization's credibility just as any
technical contribution would. It also gives developers a direct line
of communication to the testing team. For example, if the internal QA
team is monitoring the public issue tracker, a developer can commit a
fix for a scalability bug (which the developer may not have the
resources to test herself), and then add a note to the issue asking
the QA team to see if the fix had the desired effect. Expect a bit of
resistance from some of the developers; programmers have a tendency to
regard QA as, at best, a necessary evil. The QA team can easily
overcome this by finding significant bugs and filing comprehensible
reports; on the other hand, if their reports are not at least as good
as those coming from the regular user community, then there's no point
having them interact directly with the development team.
Either way, once a public issue exists, the original internal
issue should simply reference the public issue for technical content.
Management and paid developers may continue to annotate the internal
issue with company-specific comments as necessary, but use the public
issue for information that should be available to everyone.
You should go into this process expecting extra overhead.
Maintaining two issues for one bug is, naturally, more work than
maintaining one issue. The benefit is that many more coders will see
the report and be able to contribute to a solution.
Legal Advice and Protection
Corporations, for-profit or nonprofit, are almost the only
entities that ever pay attention to complex legal issues in free
software. Individual developers often understand the nuances of
various open source licenses, but they generally do not have the time
or resources to follow copyright, trademark, and patent law in detail.
If your company has a legal department, it can help a project by
vetting the copyright status of the code, and helping developers
understand possible patent and trademark issues. The exact forms this
help could take are discussed in . The
main thing is to make sure that communications between the legal
department and the development community, if they happen at all,
happen with a mutual appreciation of the very different universes the
parties are coming from. On occasion, these two groups talk past each
other, each side assuming domain-specific knowledge that the other
does not have. A good strategy is to have a liaison (usually a
developer, or else a lawyer with technical expertise) stand in the
middle and translate for as long as needed.
Documentation and Usability
Documentation and usability are both famous weak spots in open
source projects, although I think, at least in the case of
documentation, that the difference between free and proprietary
software is frequently exaggerated. Nevertheless, it is empirically
true that much open source software lacks first-class documentation
and usability research.
If your organization wants to help fill these gaps for a
project, probably the best thing it can do is hire people who
are not regular developers on the project, but
who will be able to interact productively with the developers.
Not hiring regular developers is good for two reasons: one, that way
you don't take development time away from the project; two, those
closest to the software are usually the wrong people to write
documentation or investigate usability anyway, because they have
trouble seeing the software from an outsider's point of view.
However, it will still be necessary for whoever works on these
problems to communicate with the developers. Find people who are
technical enough to talk to the coding team, but not so expert in the
software that they can't empathize with regular users anymore.
A medium-level user is probably the right person to write good
documentation. In fact, after the first edition of this book was
published, I received the following email from an open source
developer named Dirk Reiners:
One comment on Money::Documentation and Usability: when we had some
money to spend and decided that a beginner's tutorial was the most
critical piece that we needed we hired a medium-level user to write it.
He had gone through the induction to the system recently enough to
remember the problems, but he had gotten past them so he knew how to
describe them. That allowed him to write something that needed only
minor fixes by the core developers for the things that he hadn't gotten
right, but still covering the 'obvious' stuff devs would have missed.
His case was even better, as it had been his job to introduce a bunch of
other people (students) to the system, so he combined the experience of
many people, which is something that was just a lucky occurrence and is
probably hard to get in most cases.
Providing Hosting/Bandwidth
For a project that's not using one of the free canned hosting
sites (see
in
), providing a
server and network connection—and most importantly, system
administration help—can be of significant assistance. Even if
this is all your organization does for the project, it can be a
moderately effective way to obtain good public relations karma, though
it will not bring any influence over the direction of the
project.
You can probably expect a banner ad or an acknowledgment on the
project's home page, thanking your company for providing hosting. If
you set up the hosting so that the project's web address is under your
company's domain name, then you will get some additional association
just through the URL. This will cause most users to think of the
software as having something to do with your
company, even if you don't contribute to development at all. The
problem is, the developers are aware of this associative tendency too,
and may not be very comfortable with having the project in your domain
unless you're contributing more resources than just bandwidth. After
all, there are a lot of places to host these days. The community may
eventually feel that the implied misallocation of credit is not worth
the convenience brought by hosting, and take the project elsewhere.
So if you want to provide hosting, do so—but either plan to get
even more involved soon, or be circumspect about how much involvement
you claim.
Marketing
Although most open source developers would probably hate to
admit it, marketing works. A good marketing campaign
can create buzz around an open source product,
even to the point where hardheaded coders find themselves having
vaguely positive thoughts about the software for reasons they can't
quite put their finger on. It is not my place here to dissect the
arms-race dynamics of marketing in general. Any corporation involved
in free software will eventually find itself considering how to market
themselves, the software, or their relationship to the
software. The advice below is about how to avoid common pitfalls in
such an effort; see also
in
.
Remember That You Are Being Watched
For the sake of keeping the volunteer developer community on
your side, it is very important not to say
anything that isn't demonstrably true. Audit all claims carefully
before making them, and give the public the means to check your claims
on their own. Independent fact checking is a major part of open
source, and it applies to more than just the code.
Naturally no one would advise companies to make unverifiable
claims anyway. But with open source activities, there is an unusually
high quantity of people with the expertise to verify
claims—people who are also likely to have high-bandwidth
Internet access and the right social contacts to publicize their
findings in a damaging way, should they choose to. When Global
Megacorp Chemical Industries pollutes a stream, that's verifiable, but
only by trained scientists, who can then be refuted by Global
Megacorp's scientists, leaving the public scratching their heads and
wondering what to think. On the other hand, your behavior in the open
source world is not only visible and recorded; it is also easy for many
people to check it independently, come to their own conclusions, and
spread those conclusions by word of mouth. These communications
networks are already in place; they are the essence of how open source
operates, and they can be used to transmit any sort of information.
Refutation is usually difficult, if not impossible, especially when
what people are saying is true.
For example, it's okay to refer to your organization as having
"founded project X" if you really did. But don't refer to yourself as
the "makers of X" if most of the code was written by outsiders.
Conversely, don't claim to have a deeply involved volunteer developer
community if anyone can look at your repository and see that there are
few or no code changes coming from outside your organization.
Not too long ago, I saw an announcement by a very well-known
computer company, stating that they were releasing an important
software package under an open source license. When the initial
announcement came out, I took a look at their now-public version
control repository and saw that it contained only three revisions. In
other words, they had done an initial import of the source code, but
hardly anything had happened since then. That in itself was not
worrying—they'd just made the announcement, after all. There
was no reason to expect a lot of development activity right
away.
Some time later, they made another announcement. Here is what
it said, with the name and release number replaced by pseudonyms:
We are pleased to announce that following
rigorous testing by the Singer Community, Singer 5 for Linux
and Windows are now ready for production use.
Curious to know what the community had uncovered in "rigorous
testing," I went back to the repository to look at its recent change
history. The project was still on revision 3. Apparently, they
hadn't found a single bug worth fixing before the
release! Thinking that the results of the community testing must have
been recorded elsewhere, I next examined the bug tracker. There were
exactly six open issues, four of which had been open for several months
already.
This beggars belief, of course. When testers pound on a large
and complex piece of software for any length of time, they will find
bugs. Even if the fixes for those bugs don't make it into the
upcoming release, one would still expect some version control activity
as a result of the testing process, or at least some new issues. Yet
to all appearances, nothing had happened between the announcement of
the open source license and the first open source release.
The point is not that the company was lying about the community
testing. I have no idea if they were or not. But they were oblivious
to how much it looked like they were lying.
Since neither the version control repository nor the issue tracker
gave any indication that the alleged rigorous testing had occurred,
the company should either not have made the claim in the first place,
or provided a clear link to some tangible result of that testing ("We
found 278 bugs; click here for details"). The latter would have
allowed anyone to get a handle on the level of community activity very
quickly. As it was, it only took me a few minutes to determine that
whatever this community testing was, it had not left traces in any of
the usual places. That's not a lot of effort, and I'm sure I'm not
the only one who took the trouble.
Transparency and verifiability are also an important part of
accurate crediting, of course. See
in
for more on this.
Don't Bash Competing Open Source Products
Refrain from giving negative opinions about competing open
source software. It's perfectly okay to give negative
facts—that is, easily confirmable
assertions of the sort often seen in good comparison charts. But
negative characterizations of a less rigorous nature are best avoided,
for two reasons. First, they are liable to start flame wars that
detract from productive discussion. Second, and more importantly,
some of the volunteer developers in your project
may turn out to work on the competing project as well. This is more
likely than it at first might seem: the projects are already in the
same domain (that's why they're in competition), and developers with
expertise in that domain may make contributions wherever their
expertise is applicable. Even when there is no direct developer
overlap, it is likely that developers on your project are at least
acquainted with developers on related projects. Their ability to
maintain constructive personal ties could be hampered by
overly negative marketing messages.
Bashing competing closed-source products seems to be more widely
accepted in the open source world, especially when those products are
made by Microsoft. Personally, I deplore this tendency (though again,
there's nothing wrong with straightforward factual comparisons), not
merely because it's rude, but also because it's dangerous for a
project to start believing its own hype and thereby ignore the ways in
which the competition may actually be superior. In general, watch out
for the effect that marketing statements can have on your own
development community. People may be so excited at being backed by
marketing dollars that they lose objectivity about their software's
true strengths and weaknesses. It is normal, and even expected, for a
company's developers to exhibit a certain detachment toward marketing
statements, even in public forums. Clearly, they should not come out
and contradict the marketing message directly (unless it's actually
wrong, though one hopes that sort of thing would have been caught
earlier). But they may poke fun at it from time to time, as a way of
bringing the rest of the development community back down to
earth.