近日,GitLab称计划在平台上自动删除免费用户账号中一年没有活跃的项目,以此减少托管成本,此计划将于2022年9月生效。消息一出,圈内一片哗然。

图源 TheRegister
开源的本质是通过个体协同,从而创造价值。这种协同能够打破地域限制、连接到全球的开发者,推动共同技术进步。其初心是为开发者提供一个能够发挥自己技术特长的舞台,在参与共创共享的过程中收获自身价值、提高技术水平。
为什么GitLab要做出九月下旬开始自动删除没有活动状态,且是免费用户所持有项目的计划呢?在该项计划中所提到的,长期无活动项目的托管成本预计占GitLab总托管成本的1/4。开发者对于GitLab做出该项计划的意图各有猜测。目前,最为贴切的就是GitLab为了减少托管成本,自动删除这些项目每年可以为其节省高达100万美元的托管支出。并将资金用于SaaS业务,帮助其SaaS业务可持续,保持GitLab财务状况可持续。截至发稿前,GitLab官方的Twitter账号已经发文,并对该事件进行了回应。"我们在内部讨论了如何处理非活动存储库。我们决定将未使用的存储库移动到对象存储。一旦实现,它们仍然可以访问,但在长时间不活动后需要更长的时间才能访问。"

图源推特
对于GitLab的这项计划,很多开发者表示不满,并提出质疑。其中,大部分开发者表示,该项计划,破怀了他们对于GitLab的信任,并对删除项目可以节省托管成本表示质疑。有开发者提出,一旦该计划开始实行,那么仍然在生产中使用的项目,就会因为长期不更新,而被停用,导致生产故障。

图源 (reddit)
“这是一个糟糕透顶的主意,把潜在的用户推向了Github,原因在于个人项目可能会被删除。我钟爱的项目里90%已经休眠了一年多,我认为它们已经'完成了',但是这不意味着如果以后我希望重新访问或者改进它时,我已经失去它了。"
"我也不认为几年是合理的。很多人都在使用Github和Gitlab来存储他们所有的项目。想象一下,如果是Backblaze宣布它将删除你所有超过1年的备份文件。我也不明白他们如何通过删除这些项目每年节省100万的。他们是在iPhone上存储数据还是其他什么?存储很便宜,源代码并不会占用太多空间。“
前红帽总裁兼CEO Paul Cormier表示,开源、协作的工作方式正在推动时代的前行。人类社会里交流的方式主要是语言,除了汉语和英语,可能大部分人无法使用其它任何语言进行交流。数学的公式和符号需要语言的解释,哲学的思想需要语言的陈述和案例,但开源软件只需要代码即可。大多数程序员可以不理解语言,但代码一定能理解。一群相互不认识的陌生人,甚至都不知道他来自于哪个国家,却可以为了一个共同的目标,默默贡献很多年。
GitHub封停俄罗斯开发者账号事件引起了很多开发者的关注。作为一个开源平台,本身不应该有任何倾向性,但是其给出的封停账号原因是,账号的使用者受雇于被美国制裁的一些公司。这不禁让人怀疑开源的中立性。无前置征兆的封停账号,给很多开源项目带来了影响,其中就包括Quick和Nimble这两个热门项目。国内开源现状也没有很乐观。贾扬清评价国内开源现状,他表示,我们国内目前具备了优秀的开发者群体,并且也有意愿有想法来进行知识共享,但是却缺少一个良好运营的组织保障。代码是没有国界的,不能因为一些商业因素或其他因素,就分而治之,这对我们的开源建设是没有正向作用的。我们需要的是培养开发者具备开源的精神,并非是在已有的技术体系里面搞一个我们的开源,而是要投入到开源社区和项目当中去,展示出我们国家开发者的技术深度以及领导力。
当开发者们开始讨论"开源的中立性"时,就是在质疑"开源"自身的中立性。不论是Github封停俄罗斯开发者账号,还是我们国内的不完整“开源”,都让开发者对“开源”的信任产生了动摇。
开放源码的世界实在太美好了,在信息快速发展的当代,没有人能够抗拒开源软件带来的诱惑。
开源项目是公开的,大家都可以采用,但是不能完全依赖,选择的时候需有替代方案和框架。这样可以在其项目出现问题的时候,或者突然宣布闭源的时候,进行替换,否则没有替代方案,直接进行项目的重写,那么代价就会非常大。作为开发者,在使用"开源"的同时,应当尽可能吃透想要使用的开源代码,通过学习开放的源代码,学习代码的结构、思路,然后用自己的理解,重新进行代码的,这样在提高代码可维护性的同时,也能够提升自己的编码能力及代码水平。结语"开源"成就了这个程序员时代,很大比例的开发者都从"开源"中收益匪浅,有代码能力的提升,也有个人声望的提升。但是"开源"不仅是开发者的"开源",同时也有商业公司具备商业目的的"开源"。我们不需要讨论"开源"究竟是"成功",还是"失败",开发者定义的成功与企业定义的成功是不一样的。最终的结果,还是交由"市场"来决定,而"开源"能否存活,就是其成功与否的最好凭证。
参考链接:
https://www.theregister.com/2022/08/05/gitlab_reverses_deletion_policy/
https://www.theregister.com/2021/01/27/gitlab_removes_starter_tier/?td=keepreading
https://www.theregister.com/2022/08/04/gitlab_data_retention_policy/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?