为什么某些开源库不提供二进制文件?


15

为什么某些开源库不提供二进制文件?我注意到一些项目属于第三方,后者维护软件的当前版本,尤其是Windows版本。

我问,因为这似乎是采用图书馆的障碍。对于开发人员来说,这是更多的工作,因为他必须设置环境来构建它。开发人员还必须担心他通过错误地构建库而引入了错误。


编辑:一些更新,以解决评论和答案。我删除了这些示例,因为它们不是讨论的中心。也将我的问题改写为“某些开放源代码库提供”,而不是“开放源代码库倾向于提供” ...没有意识到人们会对此表示冒犯。


7
“趋向”?两个例子是趋势吗?您是否有更多数据来支持您的主张?
S.Lott

3
Linux软件包管理器通常用于部署二进制文件,因此我不理解该参考。
David Thornley,

7
因为他们是懒惰抽烟,受大学教育的嬉皮士(最坏的嬉皮士)。
Job

7
是的,该死的嬉皮士免费编写世界一半的人使用的软件,把它们搞砸了!
陶Szelei

3
@CodeinChaos:我已经多年没有从源代码构建了。Fedora,Mac OS和OpenSuSE必须是“趋势”的怪异例外。您使用的是什么操作系统,所以支持不佳?如果可能的话,我想避免这种情况。
S.Lott

Answers:


11

因为制作Windows二进制文件是完全不同的工作,所以需要完全不同的知识库和工具集。人们似乎很难掌握有关Linux开发人员的知识,所以让我扭转一下。

  • 您已经将Windows永远用于Windows。
  • 您仅在家中安装了Windows。
  • 您在这里和那里使用过Linux,但是仅作为用户使用,而不是为Linux进行管理或开发。
  • 您知道gcc是Linux上最常用的编译器,但从未在自己的计算机上安装过。
  • 您主要是在Windows上自己开发该软件,但是如果其他人为使它兼容并分发二进制文件而在意,则不介意为Linux进行错误修复。
  • 当已经有其他人完全愿意进行构建时,您不想为另一个OS和工具链付费。

2
总之,某些程序员没有知识,资源或动力来为其他平台创建二进制文件。
M. Dudley

11

开罗是一个图书馆,而不是一个应用程序。Postgres似乎具有Windows二进制文件。较小的项目通常不提供构建,因为它们没有基础结构/资源。


4
+1尤其是“没有资源”。很难提供一个测试了Windows构建,如果你没有为Windows的许可证,没有一个Windows编译器(或时间来实验交叉编译器)等
Steve314

1
@ Steve314:每个人都有一个Windows编译器-开源gcc或免费的Visual Studio Express。
gbjbaanb

1
库也可以具有二进制文件,即dll。通常,我没有安装的编译器,也没有构建原始库的依赖项。就像获取二进制文件一样,甚至对于库也是如此。
CodesInChaos

4
@CodeInChaos:Linux不.dll经常使用,因此这些二进制文件对我们中的一些人几乎没有用。纯来源会更好。
S.Lott

9
@gbjbaanb:并非每个人都有Windows安装,更不用说编译器了。
David Thornley

9

这是“如果想要完成某事,请一把铲子”的开源哲学的一部分。自然,如果用户自己编译程序,则可以减轻开发人员的工作量。无需担心所有这些架构,操作系统等...

但是,如果您要生产消费级产品(Firefox,Paint.NET,Audacity,Keepass等),并且在意获取用户,则应该始终,始终,永远! 包括二进制文件。在您的网站上迷路并对产品感兴趣的人中,只有2%会去:

  • 下载适当的SCM客户端
  • 签出源代码树的完整副本
  • 下载所需的IDE或编译器工具(对于某些项目,很容易就需要数百MB)
  • 下载并安装所需的所有依赖项(并设置环境变量)
  • 运行全新的编译(在某些项目上很容易地需要10分钟的时间)
  • 处理任何错误或问题或出现(在小型项目中可能没有记录-“哦,是的,最新的实际上是分支重写,而不是主干!”)
  • 卸载所有内容,或将所有内容保留在计算机上,然后重新编译以进行更新。

(显然,在Linux上情况要好得多,但大多数消费者仍在使用Windows。)

对于新用户来说,说“哦,Windows版本!下载。运行”要容易得多。

但是,许多开源项目不是消费者级别的。他们针对的是程序员,他们对这种折磨的容忍度更高,因此二进制文件就是DIY。以我的经验,尽管如此,程序员还是可以像用户一样懒惰。:)


正是这些类型的问题才使我首先提出问题。
M. Dudley

3
谁来分发需要IDE构建的项目?人们通常不在SCM中进行分发。它更像wget,tar xfz,。/ configure,make,su -c'make install'...
替代

公平的点,数学的。而且,更现代的SCM主机(例如GitHub)将使您可以下载最新版本的压缩副本。
菲尔·科恩

@mathepic:Windows开发人员,就是这样。
Stuart P. Bentley,

@Stuart VS项目只是msbuild文件。不需要IDE。
替代

6

随处编写一次编写的应用程序的创建者环境(C,C ++等)中可以从将编译步骤下推到为流行的体系结构创建和打包二进制文件的发行商(apt,rpm,yum等)中受益。这样,创建者可以用更少的精力来实现最大程度的可移植应用程序,并使他们可以将更多的时间花在专注于他们的核心能力上(开发应用程序,而不是针对多种架构编译和托管它)。一些WOCA应用程序的创建者愿意在Windows之类的特殊情况下支付额外的费用,因为–很好–用户期望的没有其他人,并且他们不想放弃市场。

另一方面,在“一次写入任何地方运行”环境(Java)或特定目标体系结构(例如OS X应用程序)中编写的应用程序能够提供单个二进制文件,并且经常这样做,因为它们只需要支付编译费用即可。一次。

最后,他们的用户通常从源代码构建或使用其OS软件包管理器都感到很舒服,因此该模型还提供了更好的可用性。用户知道从何处获取二进制文件(其程序包管理器),具有一致的安装和程序包管理生命周期经验,并且知道在需要时从何处获取源代码。


2
从O / S角度来看,随处写入一次运行的一个问题是虚拟机本身就是一个程序。例如,大多数Windows防火墙允许您逐个应用授予/拒绝对网络的访问。但是大多数人无法将一个Java应用程序告诉另一个Java应用程序-它们授予/拒绝对JVM的访问,但是如果您有一个充当Internet服务器的Java应用程序(也许是Azureus),那么防火墙将不会阻止任何未知的恶意Java应用程序充当服务器。如果有特定于Java的解决方案,那么我就是一个不了解Java的示例。
Steve314 2011年

1
@Steve我本身并不反对您,但我真的不明白WOCA或WORA的利弊与这个问题有什么关系。
Rein Henrichs

切线的,真实的,但是这个问题已经有点像Linux与Windows之类的宗教战争,这也许是较小的犯罪之一。顺便说一句-我对您的答案+1有用。
2011年

耶宗教战争!我拿焦油,你拿羽毛?
Rein Henrichs

5

为什么我要减少带宽来为您提供构建(显然可能非常大),而不是构建无论如何都为您提供的源?更不用说在您自己的机器上构建项目始终会产生更好的结果,因为它是专门为您的平台编译的。


4
+1-但我怀疑“总是”(取决于您使用的平台),而这些好处可能会给用户带来一定的成本-需要编译器,需要知道如何使用它,需要知道如何构建特定的项目,需要花时间调查和报告,只有在您的特定平台,等转了奇怪的虫子
Steve314

1
@ steve314:+1,所有真实点数:)
Demian Brecht

7
几个二进制文件通常并不大。用户的时间成本通常非常大。查找所有依赖项并弄清楚如何构建该特定项目需要花费大量时间。即使您的用户恰好是程序员。如果用户不是程序员,那么他几乎会忘记您的产品。而且我认为效果论点被高估了。通常,您不需要性能的最后一部分,如果需要,您仍然可以弄清楚如何从源代码进行构建。
CodesInChaos 2011年

1
@codeinchaos:这完全与项目(大小)有关。构建可能包含单个二进制文件,也可能包含二进制文件和非编译资产(例如游戏)中的数百MB(如果不是更多)。当然,有时确定依赖关系可能会有些麻烦,但这取决于软件包的作者提供列表或下载/构建依赖关系的构建时机制(FreeBSD的ports集合非常适合此操作) 。针对非程序员的项目几乎总是在某个位置维护二进制文件/安装程序列表。
Demian Brecht,

事实是,许多开源项目不是通常意义上的“产品”。由于开源是关于允许各种形式的贡献,因此让其他人提供知道如何执行并有时间维护它们的二进制文件似乎是个好主意。

2

我可以想到两个原因。

首先,您有在多种类型的硬件上运行的多个操作系统。您将不得不构建的二进制目标的数量变得难以管理。在32位或64位硬件上运行的三种Windows版本(XP,Vista,7)仍在使用中。那是6个二进制目标。在Linux方面,情况更加糟糕,在上帝上运行的发行版种类繁多,它们知道什么硬件(x86,PPC,MIPS,SPARC,PA-RISC等)。您要为每种可能的组合进行构建吗?您甚至拥有所需的设备和/或软件吗?如果有人在PII上仍在运行(上帝帮助我们)NT,您是否要为他们构建二进制文件?

其次,运输来源意味着用户可以针对特定环境优化构建;他们可以启用所需的任何优化,也可以根据需要调整源本身。


所以我猜答案是使用类似Sourceforge的构建服务器。签入,让他们为您构建很多二进制文件。例如en.opensuse.org/Build_Service
gbjbaanb

1
由于这些程序通常不使用任何特殊的Vista / Win7功能,并且32位程序在64位OS上运行,因此对于所有Windows用户,几乎总是可以使用单个32位WinXP二进制文件。
CodesInChaos 2011年

@CodeInChaos-+1-一些项目同时提供32位和64位二进制文​​件,但是很少提供更多版本。不过,这是一个有效的观点。
Steve314 2011年

@gbjbaanb - 一个答案,当然,但可能不会答案。
Steve314 2011年

2

通常,无论是应用程序,系统,模块还是库,开源项目的价值在于可以根据需要对其进行研究和/或修改。分发源是发布模型所固有的。

分发二进制文件可能会存在出于恶意目的以某种方式对其进行修改的风险。从源头编译项目试图减轻这种风险。


对于超过90%的用户而言,他们甚至都不会看源代码。大多数二进制下载程序都愿意承担操纵风险。他们无法(即使他们可能太懒了)也无法验证源代码是否不包含恶意代码。
CodesInChaos 2011年

2
没错,但是OP询问为什么开源项目通常不以二进制文件的形式发布,而不是“作为用户,为什么我必须编译所有这些东西?”?;-)
Rob Raisch 2011年

但是您争论的是,为什么对用户来说,获取源而不是二进制对用户来说更好。
CodesInChaos

1
有趣的是,我的答案或原始问题中都没有看到“用户”一词。也许我读错了自己的答案?
罗布·赖斯

1
有趣的是,由于我没有尝试提供“不提供二进制文件的理由”,因此您似乎对错误地解释我的评论感到无能为力。我只是简单地解释了为什么开源项目通常以源代码的形式分发。感谢您的参与,但这是我对此的最后评论。
罗布·赖斯

1

这可能有几个原因。许多(如果不是大多数)开源项目都在Linux上启动。因此,该系统的初始项目已完成,而包装则由团队成员完成。

创建Windows安装程序是一项额外的工作,需要Linux开发人员可能没有的知识。因此,如果核心团队外部的某人承担这项工作,通常会特别提及他。

对于其他系统,例如OS X甚至特定的Linux发行版,也可能是如此。这完全取决于谁拥有知识和时间来完成额外的工作。


Windows安装程序很少需要。带有二进制文件的zip文件也可以。但是,当然,您是对的,许多基于Linux的开发人员不会在乎Windows版本的程序。
CodesInChaos 2011年

1
zip文件在Windows世界中可能是一个很大的障碍。'我已经下载了这个文件。现在,当我单击它时,Windows会告诉我它的“未知文件格式”是帮助论坛中一个非常普遍的问题。
thorstenmüller2011年

我已经将所有内容发布为.zip文件。我认为在这种情况下,我唯一遇到的抱怨是某个设法将exe文件复制到桌面而不是创建链接的家伙。但是无论如何,从源代码构建的难度比解压缩某些东西的难度要高得多。
CodesInChaos 2011年

1
部分取决于您的用户群。如果发布仅供程序员使用的库,则zip文件不会有问题。压缩非常容易,因此每个具有基础知识的受众都可以完成。虽然我经常看到邮编问题...
thorstenmüller2011年

1
请记住,在XP +中,zip文件由操作系统本地处理,双击将在解压缩的文件夹中打开该文件。
菲尔·科恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.