Por que algumas bibliotecas de código aberto não fornecem binários?

15

Por que algumas bibliotecas de código aberto não fornecem binários? Percebi que alguns projetos diferem para terceiros que mantêm compilações atuais do software, especialmente para compilações do Windows.

Eu pergunto porque parece uma barreira para a adoção de uma biblioteca. É mais trabalho para o desenvolvedor, pois ele deve configurar seu ambiente para construí-lo. Um desenvolvedor também precisa se preocupar com o fato de ter introduzido erros ao criar a biblioteca incorretamente.


EDIT : Algumas atualizações para abordar comentários e respostas. Eu removi os exemplos, pois eles não são essenciais para a discussão. Também reformulei minha pergunta como "algumas bibliotecas de código aberto fornecem" em vez de "as bibliotecas de código aberto tendem a fornecer" ... não percebiam que as pessoas se ofenderiam com isso.

M. Dudley
fonte
7
"cuidar"? Dois exemplos são uma tendência? Você tem mais dados para apoiar sua reivindicação?
S.Lott
3
Os gerenciadores de pacotes do Linux geralmente são usados ​​para implantar binários, então não entendo essa referência.
David Thornley
7
Porque eles são hippies preguiçosos e educados na faculdade (o pior tipo de hippie).
Job
7
Sim, malditos hippies que escrevem software de graça que metade do mundo usa, que se dane!
Tamás Szelei
3
@CodeinChaos: Eu não construí a partir da fonte há anos. Fedora, Mac OS e OpenSuSE devem ser exceções estranhas a essa "tendência". Qual sistema operacional você está usando com tanto suporte? Eu gostaria de evitá-lo, se possível.
S.Lott 17/05

Respostas:

11

Como criar binários do Windows é um trabalho completamente diferente, que exige uma base de conhecimento e um conjunto de ferramentas completamente diferentes. As pessoas parecem ter dificuldade em entender isso sobre os desenvolvedores do Linux, então deixe-me mudar.

  • Você usou o Windows para o que parece ser uma eternidade.
  • Você só tem o Windows instalado em casa.
  • Você usou o Linux aqui e ali no trabalho, mas apenas como usuário, não administrando ou desenvolvendo para o Linux.
  • Você sabe que o gcc é o compilador mais usado para Linux, mas nunca o instalou em seu próprio computador.
  • Você trabalha principalmente no software por conta própria no Windows, mas não se importa de fazer correções de bugs no Linux se alguém fizer o trabalho para torná-lo compatível e distribuir binários.
  • Você não deseja pagar por outro sistema operacional e cadeia de ferramentas quando outra pessoa que já possui estiver perfeitamente disposta a fazer as compilações.
Karl Bielefeldt
fonte
2
Em resumo, alguns programadores não têm conhecimento, recursos ou motivação para criar binários para outras plataformas.
M. Dudley
11

O Cairo é uma biblioteca, não um aplicativo. O Postgres parece ter binários do Windows . Projetos menores geralmente não fornecem builds porque não possuem infraestrutura / recursos.

phaylon
fonte
4
+1 especialmente "não tem os recursos". Difícil fornecer uma compilação do Windows testado se você não tiver uma licença para Windows, não tem um compilador do Windows (ou tempo para experimentar com compiladores cruzadas), etc.
Steve314
1
@ Steve314: Todo mundo tem um compilador do Windows - o gcc de código aberto ou o Visual Studio Express gratuito.
Gbjbaanb 17/05
1
Uma biblioteca também pode ter binários, ou seja, dlls. Frequentemente, não tenho o compilador (instalado) nem as dependências para construir a biblioteca original. Assim como obter binários, mesmo para bibliotecas.
CodesInChaos 17/05
4
@CodeInChaos: o Linux não usa com .dllmuita frequência, portanto esses binários seriam em grande parte inúteis para alguns de nós. Fonte pura seria melhor.
S.Lott 17/05
9
@gbjbaanb: Nem todo mundo tem uma instalação do Windows, muito menos um compilador.
David Thornley
9

É parte da filosofia de código aberto de "se você quer algo feito, pegue uma pá". Naturalmente, reduz a carga de trabalho dos desenvolvedores se os usuários simplesmente compilarem o programa. Não precisa se preocupar com todas essas arquiteturas, sistemas operacionais, etc ...

Mas, se você está criando um produto de nível de consumidor (Firefox, Paint.NET, Audacity, Keepass, etc.) e se preocupa em adquirir usuários, sempre, sempre, sempre! inclua binários. Provavelmente, apenas 2% das pessoas que tropeçam no seu site e estão interessadas no seu produto vão:

  • Faça o download do cliente SCM apropriado
  • Confira uma cópia inteira da árvore de origem
  • Baixe o IDE ou as ferramentas de compilação necessárias (facilmente várias centenas de MB para alguns projetos)
  • Baixe e instale todas as dependências necessárias (e defina variáveis ​​ambientais)
  • Execute uma compilação nova (facilmente um processo de 10 minutos em alguns projetos)
  • Lide com quaisquer erros ou problemas ou surja (que em pequenos projetos provavelmente não estão documentados - "ah, sim, o mais recente está na reescrita de ramificação, não no tronco!")
  • Desinstale tudo ou deixe tudo no seu computador e recompile para atualizações.

(Obviamente, no linux, as coisas são muito mais saudáveis, mas a maioria dos consumidores ainda usa o Windows.)

É muito mais fácil para os novatos dizerem "ooh, versão para Windows! Baixe. Execute".

No entanto, muitos projetos de código aberto não estão no nível do consumidor; eles têm como alvo programadores, que têm uma tolerância muito maior para esse tipo de provação e, portanto, os binários são de bricolage. Na minha experiência, os programadores podem ser tão preguiçosos quanto os usuários, portanto, seja avisado. :)

Phil Cohen
fonte
Esses são exatamente os tipos de problemas que me fizeram fazer a pergunta em primeiro lugar.
M. Dudley
3
Quem distribuiria um projeto que requer a criação de um IDE? E as pessoas não distribuem em SCMs normalmente. É mais parecido com wget, tar xfz, ./configure, make, su -c 'make install' ...
alternativa
Pontos justos, matemáticos. E os hosts SCM mais modernos (como o GitHub) permitirão o download de uma cópia compactada da versão mais recente.
Phil Cohen
@mathepic: desenvolvedores do Windows, é quem.
Stuart P. Bentley
Os projetos do @Stuart VS são apenas arquivos msbuild. Não é necessário IDE.
alternativa
6

Os criadores de aplicativos gravados em um ambiente Write Once Compile Anywhere (C, C ++, etc) se beneficiam com o empurrão da etapa de compilação para os distribuidores (apt, rpm, yum, etc) que criam e empacotam binários para arquiteturas populares. Isso atinge um aplicativo portátil máximo com menos esforço por parte dos criadores e permite que eles gastem mais tempo concentrando-se em sua competência principal (desenvolver o aplicativo, não compilá-lo e hospedá-lo para várias arquiteturas). Alguns criadores de aplicativos WOCA estão dispostos a pagar o custo extra em casos especiais como o Windows, porque - bem - ninguém mais, os usuários esperam, e não querem desistir do mercado.

Por outro lado, os aplicativos gravados em um ambiente Write Once Run Anywhere (Java) ou para uma arquitetura de destino específica (aplicativos OS X, por exemplo) são capazes de fornecer um único binário e geralmente o fazem, uma vez que precisam pagar apenas a compilação custar uma vez.

Por fim, seus usuários geralmente se sentem confortáveis ​​construindo a partir da fonte ou usando o gerenciador de pacotes do SO, portanto, este modelo também oferece uma melhor usabilidade. Os usuários sabem onde obter os binários (seu gerenciador de pacotes), têm uma experiência consistente no ciclo de vida de instalação e gerenciamento de pacotes e sabem onde adquirir a fonte, caso precisem.

Rein Henrichs
fonte
2
Um problema com a gravação uma vez executada em qualquer lugar é que a máquina virtual é um programa por si só, do ponto de vista do sistema operacional. Por exemplo, a maioria dos firewalls do Windows permite conceder / negar acesso às redes aplicativo por aplicativo. Mas a maioria deles não pode diferenciar um aplicativo Java de outro - eles concedem / negam acesso à JVM, mas se você tiver um aplicativo Java que atue como servidor da Internet (Azureus, talvez), o firewall não bloqueará nenhum invasor desconhecido. O aplicativo Java atua como um servidor. Se houver uma solução específica para Java, sou um exemplo de usuário de Java que não conhece.
21311 Steve11
1
@ Steve Não estou discordando de você, mas não vejo como os prós / contras do WOCA ou WORA são relevantes para essa questão.
Rein Henrichs
tangencial, é verdade, mas em uma questão que já é um pouco de guerra religiosa entre Linux e Windows etc, talvez um dos crimes menores. BTW - marquei sua resposta com +1 como útil.
21311 Steve11
Yay guerra religiosa! Vou pegar o alcatrão, você pega as penas?
Rein Henrichs
5

Por que eu gostaria de aumentar a largura de banda, fornecendo uma compilação (que obviamente pode ser muito grande) em vez de criar a fonte que eu estou fornecendo? Sem mencionar que a construção de um projeto em sua própria máquina sempre produzirá melhores resultados, pois é compilada especificamente para sua plataforma.

Demian Brecht
fonte
4
+1 - mas duvido que "sempre" (depende da plataforma que você está usando), e esses benefícios podem ter algum custo para o usuário - precisar de um compilador, precisar saber como usá-lo, precisar criar esse projeto específico, precisando gastar tempo investigando e relatando os erros estranhos que aparecem somente em sua plataforma específica, etc. #
Steve314 17/11/11
1
@ steve314: +1, todos os pontos verdadeiros :) #
Demian Brecht
7
Alguns arquivos binários geralmente não são tão grandes. E o tempo gasto para o usuário geralmente é realmente grande. Encontrar todas as dependências e descobrir como criar esse projeto específico leva muito tempo. Mesmo que seu usuário seja um programador. Se o usuário não é um programador, ele pode praticamente esquecer o seu produto. E acho que o argumento do desempenho é superestimado. Normalmente você não precisa desse último percentual de desempenho e, se precisar, ainda pode descobrir como construir a partir do código-fonte.
CodesInChaos 17/05
1
@ codeinchaos: Isso é inteiramente relativo ao projeto (tamanho). Uma compilação pode abranger um único binário ou várias centenas de MBs (se não mais) em binários e ativos não compilados (jogos de reflexão). Claro, às vezes pregar dependências pode ser um pouco trabalhoso, mas isso depende do autor do pacote fornecer uma lista ou um mecanismo em tempo de compilação para baixar / criar dependências (a coleção de portas do FreeBSD é ótima para isso) . Projetos direcionados a não programadores quase sempre terão uma lista binária / instaladora mantida em algum lugar.
Demian Brecht #
O fato é que muitos projetos de código aberto não são "produtos" no sentido usual. Como o código aberto é sobre permitir contribuições de várias formas, é recomendável que outras pessoas forneçam binários que sabem como fazê-lo e têm tempo para mantê-los.
Phaylon
2

Eu posso pensar em duas razões.

Primeiro, você tem vários sistemas operacionais em execução em vários tipos de hardware; o número de destinos binários que você precisaria construir fica incontrolável. Existem três versões do Windows ainda comumente usadas (XP, Vista, 7), executadas em hardware de 32 ou 64 bits; são 6 alvos binários bem ali. A situação é pior no lado do Linux, com uma variedade muito maior de distribuições em execução que Deus sabe qual hardware (x86, PPC, MIPS, SPARC, PA-RISC, etc.). Você vai construir para todas as combinações possíveis? Você tem o equipamento e / ou software para fazer isso? Se alguém por aí ainda está rodando (Deus nos ajude) NT em uma PII, você irá construir um binário para eles?

Segundo, a origem da remessa significa que os usuários podem otimizar a construção para seu ambiente específico; eles podem ativar as otimizações necessárias ou ajustar a própria fonte, se necessário.

John Bode
fonte
então acho que a resposta é usar algo como os servidores de compilação do Sourceforge. Faça o check-in, deixe-os construir muitos binários. Como en.opensuse.org/Build_Service
gbjbaanb
1
Como esses programas geralmente não usam recursos especiais do Vista / Win7 e os programas de 32 bits são executados em sistemas operacionais de 64 bits, você quase sempre pode se safar com um único binário WinXP de 32 bits para todos os usuários do Windows.
CodesInChaos 17/05
@CodeInChaos - +1 - alguns projetos fornecem binários de 32 e 64 bits, mas fornecem mais variações do que isso é raro. Um ponto válido, no entanto.
21311 Steve314
@gbjbaanb - uma resposta, certamente, mas provavelmente não a resposta.
21311 Steve11
2

Normalmente, o valor de um projeto de código aberto, seja um aplicativo, sistema, módulo ou biblioteca, é que ele pode ser estudado e / ou modificado conforme necessário. Distribuir a fonte é intrínseco ao modelo de publicação.

A distribuição de um binário corre o risco de ter sido modificado de alguma maneira para fins nefastos. A compilação do projeto a partir da origem tenta mitigar esse risco.

Rob Raisch
fonte
Para aplicativos> 90% dos usuários nem sequer olham para a fonte. E o risco de manipulação é algo que a maioria dos baixadores de binários está disposto a correr. Eles não podem (e mesmo se pudessem ficar com preguiça) de verificar se um código-fonte não contém código malicioso.
CodesInChaos 17/05
2
É verdade, mas o OP perguntou por que os projetos de código aberto normalmente não são distribuídos como binários, e não "como usuário, por que preciso compilar tudo isso?" ;-)
Rob Raisch
Mas seus argumentos são sobre por que é melhor para o usuário que ele obtenha a fonte e não os binários.
CodesInChaos 17/05
1
Engraçado, não vejo a palavra "usuário" na minha resposta ou na pergunta original. Talvez eu esteja lendo minha própria resposta incorretamente?
Rob Raisch
1
Interessante que você pareça inclinado a interpretar mal meus comentários, pois não tentei fornecer "uma razão para não fornecer binários". Eu simplesmente forneci uma explicação sobre por que os projetos de código aberto são normalmente distribuídos como código-fonte. Obrigado por jogar, mas este é o meu último comentário sobre isso.
Rob Raisch
1

Isso pode ter vários motivos. Muitos projetos de código aberto (se não a maioria) iniciam no Linux. Portanto, o projeto inicial é feito para esse sistema e a embalagem é feita pelos membros da equipe.

Criar um instalador do Windows é um trabalho extra que requer conhecimento que os desenvolvedores do Linux podem não ter. Portanto, se alguém de fora da equipe principal assume esse trabalho, ele é frequentemente mencionado especialmente.

O mesmo pode acontecer com outros sistemas, como o OS X ou mesmo distribuições específicas do Linux. Tudo depende de quem tem conhecimento e tempo para fazer o trabalho extra.

thorsten müller
fonte
Um instalador do Windows raramente é necessário. Um arquivo zip com os binários também é bom. Mas é claro que você está certo que muitos desenvolvedores baseados em Linux não se importam muito com uma versão do Windows para o programa deles.
CodesInChaos 17/05
1
Um arquivo zip pode ser uma grande desvantagem no mundo do Windows. 'Eu baixei este arquivo. Agora, quando clico, o Windows diz que seu "formato de arquivo desconhecido" 'é um problema bastante comum nos fóruns de ajuda.
22611 Thorsten Müller
Publiquei todas as minhas coisas como arquivos .zip. Eu acho que a única reclamação que recebi nesse contexto foi por um cara que conseguiu copiar o arquivo exe para sua área de trabalho em vez de criar um link. Mas, em qualquer caso, a dificuldade de construir a partir da fonte é muito maior do que a dificuldade de descompactar algo.
CodesInChaos 17/05
1
Depende em parte da sua base de usuários. Se você publicar uma biblioteca usada apenas por programadores, não terá problemas com arquivos zip. O zip é fácil o suficiente para que todo público com conhecimento básico o faça. Embora já tenha visto a questão zip frequentemente suficiente ...
Thorsten Müller
1
Lembre-se de que, no XP +, os arquivos zip são gerenciados nativamente pelo sistema operacional e o clique duplo suficiente abrirá o arquivo em uma pasta extraída.
Phil Cohen