为什么某些开源库不提供二进制文件?我注意到一些项目属于第三方,后者维护软件的当前版本,尤其是Windows版本。
我问,因为这似乎是采用图书馆的障碍。对于开发人员来说,这是更多的工作,因为他必须设置环境来构建它。开发人员还必须担心他通过错误地构建库而引入了错误。
编辑:一些更新,以解决评论和答案。我删除了这些示例,因为它们不是讨论的中心。也将我的问题改写为“某些开放源代码库提供”,而不是“开放源代码库倾向于提供” ...没有意识到人们会对此表示冒犯。
为什么某些开源库不提供二进制文件?我注意到一些项目属于第三方,后者维护软件的当前版本,尤其是Windows版本。
我问,因为这似乎是采用图书馆的障碍。对于开发人员来说,这是更多的工作,因为他必须设置环境来构建它。开发人员还必须担心他通过错误地构建库而引入了错误。
编辑:一些更新,以解决评论和答案。我删除了这些示例,因为它们不是讨论的中心。也将我的问题改写为“某些开放源代码库提供”,而不是“开放源代码库倾向于提供” ...没有意识到人们会对此表示冒犯。
Answers:
因为制作Windows二进制文件是完全不同的工作,所以需要完全不同的知识库和工具集。人们似乎很难掌握有关Linux开发人员的知识,所以让我扭转一下。
开罗是一个图书馆,而不是一个应用程序。Postgres似乎具有Windows二进制文件。较小的项目通常不提供构建,因为它们没有基础结构/资源。
.dll
经常使用,因此这些二进制文件对我们中的一些人几乎没有用。纯来源会更好。
这是“如果想要完成某事,请一把铲子”的开源哲学的一部分。自然,如果用户自己编译程序,则可以减轻开发人员的工作量。无需担心所有这些架构,操作系统等...
但是,如果您要生产消费级产品(Firefox,Paint.NET,Audacity,Keepass等),并且在意获取用户,则应该始终,始终,永远! 包括二进制文件。在您的网站上迷路并对产品感兴趣的人中,只有2%会去:
(显然,在Linux上情况要好得多,但大多数消费者仍在使用Windows。)
对于新用户来说,说“哦,Windows版本!下载。运行”要容易得多。
但是,许多开源项目不是消费者级别的。他们针对的是程序员,他们对这种折磨的容忍度更高,因此二进制文件就是DIY。以我的经验,尽管如此,程序员还是可以像用户一样懒惰。:)
随处编写一次编写的应用程序的创建者环境(C,C ++等)中可以从将编译步骤下推到为流行的体系结构创建和打包二进制文件的发行商(apt,rpm,yum等)中受益。这样,创建者可以用更少的精力来实现最大程度的可移植应用程序,并使他们可以将更多的时间花在专注于他们的核心能力上(开发应用程序,而不是针对多种架构编译和托管它)。一些WOCA应用程序的创建者愿意在Windows之类的特殊情况下支付额外的费用,因为–很好–用户期望的没有其他人,并且他们不想放弃市场。
另一方面,在“一次写入任何地方运行”环境(Java)或特定目标体系结构(例如OS X应用程序)中编写的应用程序能够提供单个二进制文件,并且经常这样做,因为它们只需要支付编译费用即可。一次。
最后,他们的用户通常从源代码构建或使用其OS软件包管理器都感到很舒服,因此该模型还提供了更好的可用性。用户知道从何处获取二进制文件(其程序包管理器),具有一致的安装和程序包管理生命周期经验,并且知道在需要时从何处获取源代码。
为什么我要减少带宽来为您提供构建(显然可能非常大),而不是构建无论如何都为您提供的源?更不用说在您自己的机器上构建项目始终会产生更好的结果,因为它是专门为您的平台编译的。
我可以想到两个原因。
首先,您有在多种类型的硬件上运行的多个操作系统。您将不得不构建的二进制目标的数量变得难以管理。在32位或64位硬件上运行的三种Windows版本(XP,Vista,7)仍在使用中。那是6个二进制目标。在Linux方面,情况更加糟糕,在上帝上运行的发行版种类繁多,它们知道什么硬件(x86,PPC,MIPS,SPARC,PA-RISC等)。您要为每种可能的组合进行构建吗?您甚至拥有所需的设备和/或软件吗?如果有人在PII上仍在运行(上帝帮助我们)NT,您是否要为他们构建二进制文件?
其次,运输来源意味着用户可以针对特定环境优化构建;他们可以启用所需的任何优化,也可以根据需要调整源本身。
通常,无论是应用程序,系统,模块还是库,开源项目的价值在于可以根据需要对其进行研究和/或修改。分发源是发布模型所固有的。
分发二进制文件可能会存在出于恶意目的以某种方式对其进行修改的风险。从源头编译项目试图减轻这种风险。
这可能有几个原因。许多(如果不是大多数)开源项目都在Linux上启动。因此,该系统的初始项目已完成,而包装则由团队成员完成。
创建Windows安装程序是一项额外的工作,需要Linux开发人员可能没有的知识。因此,如果核心团队外部的某人承担这项工作,通常会特别提及他。
对于其他系统,例如OS X甚至特定的Linux发行版,也可能是如此。这完全取决于谁拥有知识和时间来完成额外的工作。