草庐IT

对不起,我放弃开源!

伊桑 2023-03-28 原文
​作者 | Peter Wayner 

译者 | 伊桑

策划 | 言征

毫无疑问,开源哲学在编写代码和生产软件方面的优点。现代计算核心的许多软件包,从Linux操作系统到MySQL,都是使用开放共享和协作开发的模式创建的。四十年来,在开放哲学的滋养下,伟大的代码解决了任何关于开源思想是否有效的问题。

尽管开源有其巨大之处,但它也并非没有缺点。现在开源已经成为主流,让我们考虑一下它的一些缺点,与其说是哲学,不如说是日常现实。以下是开发人员在为开源项目做出贡献时可能会再三考虑的七个原因。

1、开源不适用于云

今天的许多开源许可证都产生于在云之前,当时用户通过下载并在桌面上运行软件来访问软件。自那以后,云公司已经找到了在保持其代码更改所有权的同时,释放开源风气的方法。一家大型云公司的一位开源经理颇为腼腆地告诉笔者,他们分发软件,因此不需要共享源代码。

正如Drupal(PHP语言编写的开源内容管理框架)公司CEO,在一次接受采访时所说,“云技术的快速应用实际上可能会阻碍开源活动”、“它将开源开发者的大量收入转向了云供应商”。

这里有几十个云供应商创建开源项目的特殊版本以在云中转售的例子。亚马逊Web服务和Elasticsearch的创建者之间的分歧就相当明显。当双方无法达成协议时,最后闹掰,彼此单干了,现在有两个有效版本的Elasticsearch代码库。

一些开源拥护者正在通过制定更严格的许可证或修正案(如公共条款)来抵制云合作选项。我们可能会看到未来的改进,但这些改进无助于原始开源许可证下的遗留系统。

“公共条款”许可条件v1.0如下:

本软件由许可方根据以下定义的许可证提供给您,但须满足以下条件。在不限制许可证中的其他条件的情况下,授予许可证下的权利不包括,许可证也不授予您销售软件的权利。就上述内容而言,“出售”是指行使许可证授予您的任何或所有权利,以收取费用或其他代价(包括但不限于托管或咨询 / 支持软件相关服务的费用)向第三方提供其价值完全或实质上来自软件功能的产品或服务。许可证要求的任何许可证通知或归属也必须包括本通用条款许可条件通知。  

2、开源存在多样性问题

社区这个词在开源圈子里被广泛使用,但这并不意味着开源文化就是某种香格里拉。首先,开源开发者可能是一个激进的群体:粗鲁、分心、固执己见,甚至是彻头彻尾的卑鄙。众所周知,开源存在着多样性问题,一些知名人士,诸如自由软件运动的精神领袖斯托尔曼就被指控种族主义和性别歧视。

其次,当个人以相对匿名的方式参与开源项目,仅通过电子邮件或公告栏进行交流时,结构性不平等可能不太明显。但有时这种匿名会产生脱节的感觉,这会使协作过程不如想象中的那样令人愉快,也不那么包容。

3、社区建设和维护需要时间

许多企业公司将其产品的开源版本作为“社区版”发布。这是一个很棒的营销工具,也是收集想法的好方法,有时也是改进产品的代码。然而,围绕该项目建立一个真正的社区需要时间和资源。如果用户和潜在贡献者向在线社区公告栏发布问题,他们希望得到答案。是的,许多贡献都是本着开源的精神自由做出的,但培育社区仍然需要时间。当它运行良好时,结果可能是一个正在构建伟大代码的新兴团队,但在这一过程中通常有大量工作要做。这种权衡的一个结果是,较大的企业项目往往会主导该领域。他们可以通过小型公司无法管理的有偿角色为社区模式提供资金。

4、开源Mentors出奇的少

类似地,许多开发人员很乐意与任何人分享他们的代码,但这并不意味着他们想帮助其他人真正学习。让某人访问Git存储库需要几分钟的时间,但支持他们作为开发人员和共同贡献者的成长是一项重要的承诺。有些项目甚至在其出资人协议中包含了一项条款,即出资人不应期望获得入职或支持,甚至不应期望得到回答。

从本质上讲,为一个开源项目做出贡献就像是一个“大灌篮”:这里有大量的代码行和一个问题需要您解决。你会发现很少有评论来解释发生了什么。谢谢,祝你好运!

5、理想派也需要薪水

大多数开源开发者都是理想主义者,他们不受名声和财富的驱使,但他们仍然需要在屋顶下吃饭和睡觉。现实世界有许多物理限制,与开源的自由共享精神不兼容。对于数字世界来说,“匮乏”可能是一个陌生的字眼,但对于现实生命形式来说,这是一个非常真实的物质问题。

对于小型堆栈和激情项目而言,开源非常有效,因为在这些项目中,没有人期望得到报酬,但对于全职程序员支持的大型代码库来说,它可能不太适合。如果有太多用户选择免费版本,整个项目可能会崩溃。

6、没有什么是真正免费的

在开源环境中待久了,你可能会遇到缩写词TANSTAAFL(There Ain't No Such Thing As a Free Lunch.),即“天下没有免费午餐”。理查德·史泰尔曼喜欢说,他想创建一个“像演讲一样自由,但不像啤酒那样免费”的软件

在用户下载并使用开源软件后,他们将开始发现其局限性。有时,代码只需要一些小的改进。有时,它根本没有提供正确的功能。没有人想抱怨杯子只有半满,尤其是当价格为零时。但是,在最后期限内填满剩余的半杯,可能会给开发商带来巨大的负担。即使当自由代码让你99%的时间达到目标时,最后的1%也可能是一个非常艰难的过程。

7、有些项目不应该是开源的

有位数据库开发人员告诉笔者,他从未真正考虑过开源项目。他的客户是一些拥有大量数据集的大公司。他们有预算,愿意付钱给他做这项工作。如果客户想阅读源代码,他非常愿意让他们阅读。但他不想经历拆分项目正式、开放版本的麻烦。

开放源代码版本适用于广泛的开发人员使用的代码,他们可以帮助共同开发代码。但在某些情况下,金钱交换,是组织软件研发工作的一种更简单、最终更可持续的方式。

原文链接:www.infoworld.com/article/3679870/7-downsides-of-open-source-culture.html​

有关对不起,我放弃开源!的更多相关文章

  1. ruby - 为什么这个 eval 在 Ruby 中不起作用 - 2

    你能解释一下吗?我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):'a=2'第二个来源给了我这个表达式来评估:'a+3'这个有效:a=2eval'a+3'这也有效:eval'a=2;a+3'但我真正需要的是这个,但它不起作用:eval'a=2'eval'a+3'我想了解其中的区别,以及如何使最后一个选项起作用。感谢您的帮助。 最佳答案 您可以创建一个Binding,并将相同的绑定(bind)与每个eval相关联调用:1.9.3p194:008>b=binding=>#1.9.3p194:009>eva

  2. ruby-on-rails - Spring 不起作用。 [未初始化常量 Spring::SID::DL] - 2

    我无法运行Spring。这是错误日志。myid-no-MacBook-Pro:myid$spring/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/lib/spring/sid.rb:17:in`fiddle_func':uninitializedconstantSpring::SID::DL(NameError)from/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/li

  3. ruby-on-rails - Simple_form 必填字段不起作用 - Ruby on Rails - 2

    我在RoR应用程序中有一个提交表单,是使用simple_form构建的。当字段为空白时,应用程序仍会继续下一步,而不会提示错误或警告。默认情况下,这些字段应该是required:true;但即使手动编写也行不通。该应用有3个步骤:NewPost(新View)->Preview(创建View)->Post。我的Controller和View的摘录会更清楚:defnew@post=Post.newenddefcreate@post=Post.new(params.require(:post).permit(:title,:category_id))ifparams[:previewButt

  4. ruby-on-rails - Heroku Action 缓存似乎不起作用 - 2

    我一直在Heroku上尝试不同的缓存策略,并添加了他们的memcached附加组件,目的是为我的应用程序添加Action缓存。但是,当我在我当前的应用程序上查看Rails.cache.stats时(安装了memcached并使用dalligem),在执行应该缓存的操作后,我得到current和total_items为0。在Controller的顶部,我想缓存我有的Action:caches_action:show此外,我修改了我的环境配置(对于在Heroku上运行的配置)config.cache_store=:dalli_store我是否可以查看其他一些统计数据,看看它是否有效或我做错

  5. ruby-on-rails - Rake 预览在 Octopress 中不起作用 - 2

    我在我的机器上安装了ruby​​版本1.9.3,并且正在为我的个人网站开发一个octopress项目。我为我的gems使用了rvm,并遵循了octopress.org记录的所有步骤。但是我在我的rake服务器中发现了一些错误。这是我的命令日志。Tin-Aung-Linn:octopresstal$ruby--versionruby1.9.3p448(2013-06-27revision41675)[x86_64-darwin12.4.0]Tin-Aung-Linn:octopresstal$rakegenerate##GeneratingSitewithJekyllidenticals

  6. ruby - 比较运算符不起作用(在 erb View 中) - 2

    我是RubyonRails的新手,我正在尝试编写一个morethan表达式:5%>大于号不断抛出异常捕获错误。我不确定如何解决这个问题?编辑:这不是rails,也不是View,它是一个Ruby构造 最佳答案 使用5%>错误来自photo_limit而不是从Integer延伸类(猜测它真的是一个字符串),因此没有混合比较方法/s有关更多信息,请参阅:http://www.skorks.com/2009/09/ruby-equality-and-object-comparison/特别是你必须混入Comparable并定义方法。虽然在这

  7. ruby - setter 方法 return self 不起作用,这是一个错误? - 2

    这个问题在这里已经有了答案:Isitpossibletohaveclass.property=xreturnsomethingotherthanx?(3个答案)关闭8年前。我想迭代一个字符串数组,并将它们中的每一个分配给类User的一个新实例,我希望我会得到一个User对象数组:classUserdefname=(name)@name=nameselfendendoriginal_array=["aaa","bbb","bbb"]result=original_array.collect{|str|User.new.name=str}但结果是一个字符串数组!putsresult.ins

  8. ruby-on-rails - 发生异常时发送电子邮件不起作用,使用 exception_notification - 2

    我正在从rails2.3迁移到rails3.1,我试图在生成异常时发送电子邮件。我正在使用exception_notificationgem。我的其余电子邮件都在工作。但是异常邮件不会被解雇。以下是我的staging.rb文件中的设置。config.action_mailer.perform_deliveries=trueconfig.action_mailer.raise_delivery_errors=true下面是application.rb中的代码C::Application.config.middleware.useExceptionNotification::Rack,:e

  9. python - 开源 Twitter 克隆(在 Ruby/Python 中) - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion是否有任何用Ruby或Python编写的生产就绪的开源Twitter克隆?我对功能丰富的实现更感兴趣,而不仅仅是简单的Twitter消息(例如:API、FBconnect、通知等)谢谢!

  10. Gradle 自动化构建开源工具 - 2

    文章目录写在前面1、下载与安装(windows)1.1、idea中配置gradle2、基础知识(Gradle6.9为例)2.1、Gradle脚本语法2.1.1、dependsOn2.1.2、创建动态任务2.1.3、增加任务行为2.1.4、参数2.1.5、Ant任务2.1.6、方法2.1.7、默认任务2.1.6、依赖任务的不同输出3、java项目中使用3.1、在已有项目中构建gradle3.2、在新建项目时构建gradle(idea)3.3、gradle项目目录结构3.4、build.gradle3.4.1、plugins3.4.2、repositories3.4.3、dependencies3

随机推荐