9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

Esty 的开源项目运营经验

  • 2015-08-03
  • 本文字数:2172 字

    阅读完需:约 7 分钟

在 Etsy(译者注:一家以交易手工制品和旧物品为主的 P2P 电商),我们是开源的忠实粉丝。在互联网上,无数的人解决了无数个问题,并使用开源许可证发布了他们的代码,没有这些人,就没有 Etsy。我们在 Linux 上运行 Apache 网页服务器,来保持 etsy.com 的运作,我们服务端的代码多数是用 PHP 写的,我们使用 MySQL 来保存数据。为了保持与时俱进,我们使用 Ganglia Graphite 生成的可视化数据来度量我们的系统状态,同时使用 Nagios 来监视系统的稳定性。当然这只是一些主要的例子,我们技术栈里面的每个边边角角,你都能发现开源代码的身影。

在 Etsy,“慷慨精神(Generosity of Spirit)”是每个人工作的一部分,它的意思是要给行业以回馈。对工程师来说,这意味着至少每年一次,或努力在某个会议上做一次演讲,或在本博客上写一篇文章,或给开源项目做点贡献。当我们解决了一个问题时,如果我们觉得解决方案或许对他人有用,我们很乐意把它回馈给开源社区。

维护与分化

这个问题一直困扰着我们公司的很多开源项目,因为源源不断的贡献同时来自于我们的工程师和开源社区。我们从不羞于开源我们技术栈的核心部分。我们一直在公开开发我们的部署系统统计数据收集器团队即时管理工具以及代码搜索工具。我们甚至开源了我们的原子部署系统的关键部分。开源确实很有好处,我们广泛地收到来自社区的新功能和bug 修复,我们的软件变得越来越成熟和稳定。

我们开源的项目越来越多,当我们想快速搞定某些新功能的时候,显然很有理由为项目创建一个内部的分支。这些建立内部分支的项目,很快就和它们的开源版本发生了分化。这意味着,维护好这些项目的工作量会翻倍。内部的任何修复或者新功能,都要在开源版本中重新做一遍,反之亦然。在一个商业公司中,内部版本的优先级往往高于开源版本。看看我们的 GitHub 主页,很难搞清楚哪些项目还在频繁维护中的,甚至我们自己的工程师也搞不清楚。

所以我们的结局就是,手上捂着一大堆“年久失修”的项目。开源社区的人花时间报告了一个 bug,却等不到任何答复,有时候甚至几年都等不到,这使潜在的开源用户心寒。没人能说得清楚,某个开源项目是一个持续维护的软件,还是仅仅是验证完某个想法后就被丢弃了。

向前走

我们想把开源社区建设得更好,因为我们从现有的开源软件中受益良多。为了使我们的开源项目的状态更清晰,我们对此来了一次“春季大扫除”。我们的开源项目将会被清晰地标注为:维护中、停止维护、已归档。

维护中

维护中是默认的状态,所以不会特别标注。维护中,说明我们要么内部就在使用开源版本,要么正在把内部版本的修改同步到开源版本中。我们已经对我们的部署工具完成了这项工作。我们正在处理所有维护中的项目:对pull request 进行合并或给出我们的看法,答复问题报告,以及添加新功能。

停止维护

我们也有一些项目已经几年没有公开更新过了。通常这是因为虽然我们想在内部也使用开源版本,但我们不能拖慢开发周期,我们难以找到两全的办法。但是,代码还是在那儿,依然可以视作是对某种创意的展示,诠释我们如何解决某个问题。或者,这原本是一个研究项目,但我们放弃了它,因为长久以来它都无法解决我们的问题,但是我们仍然希望展示我们曾经做过的尝试。那些项目就保持原样放在那儿,很有可能不会再有更新。我们会关闭问题报告,不再接受pull request,并且会在README 中清楚地说明此项目仅作展示之用。

已归档

我们开源的项目中也有一批是我们在特定时期用过的,但是目前已经不再使用。很可能我们对某个问题找到了更好的解决方案,或者是老方案从长期来看并不能真正解决问题。在此类情况下,我们会往主分支上提交一个commit 来删除所有的代码,仅留下README 用于描述项目及其状态。README 会指向源代码删除前的最后一个commit。这样代码不会真正消失,但项目的状态却明白无误。此类项目同样会关闭问题报告和pull request。

除了这些归档的项目外,我们也在某些时间fork 了别人项目,里面有些我们也不再维护,我们也在着手清理这些项目。

结束语

在过去几年中,我们在维护开源项目方面学到了很多。我们想分享的最大教训就是,一定要在内部直接使用软件的开源版本,这很重要,有可能其他开源开发者也想使用此软件,这可以给他们带来更好的体验。我们一直在努力学习,力求把每件事情做得更好。如果你在等我们对某个问题做出回应,或合入某个pull request,希望本文能帮助你深入理解当下在发生什么,为什么等个回复这么久,并且我们希望新的项目分类方式能帮你梳理清楚我们开源项目的状态。我们希望成为开源世界的典范,我们希望以一种众人受益的方式来给予回馈。给项目做一次春季大扫除总是一件好事,即便当下已是夏季。

你可以在Twitter 上关注 Jared Daniel

https://codeascraft.com/2015/07/09/open-source-spring-cleaning/

本文由作者 Daniel Schauenberg 发表在 codeascraft.com 上: Open Source Spring Cleaning 。经授权,在 InfoQ 中文站翻译共享。本文在 Creative Commons Attribution-NonCommercial-NoDerivs 3.0 United States License 许可证下发布。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-08-03 07:492304
用户头像

发布了 77 篇内容, 共 39.4 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

当DNS遭受攻击时,阁下当如何应对?

腾讯云混沌演练平台

混沌工程 DNS故障

软件测试/测试开发丨明确的编码规范,避免冗余和混乱

测试人

软件测试

迈向全球,从选择海外高防服务器开始,为您的业务提供坚实保障

一只扑棱蛾子

海外高防服务器

10款市场分析工具大盘点:哪款是你的首选?

彭宏豪95

效率工具 科技 在线白板 竞品分析 市场分析

面对瓶颈期,中国ToB SaaS如何实现全面突围?

ToB行业头条

WebGL+H5智慧海上风场可视化远程运维平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 智慧海上风电

植物补光灯,哪种效果好?

电子信息发烧客

AI 赋能脑科学,和鲸科技与灵脑科技达成战略合作

ModelWhale

人工智能 数据科学 脑科学 类脑计算 交叉学科

外贸企业新手指南:谷歌SEO多久能带来流量增长?

九凌网络

九凌网络分享外贸快车实现迅速出口的目标

九凌网络

云主机使用的硬盘类型及对应的存储类型详解

天翼云开发者社区

云计算 存储 硬盘

基于深度学习的情感语音识别模型优化策略

数据堂

langchain中的chat models介绍和使用

程序那些事

程序那些事 大模型 GPT

如何寻找优质的谷歌seo优化公司来提升你的外贸网站排名

九凌网络

定制开发APP软件和网站的优势在哪里?

Geek_16d138

软件

HarmonyOS NEXT调优工具Smart Perf Host高效使用指南

新消费日报

As Const:一个被低估的 TypeScript 特性

树上有只程序猿

typescript as const

Spring 缓存注解这样用,太香了!

越长大越悲伤

Java redis spring 缓存 springboot

前三!前三!!前三!!!

天翼云开发者社区

云计算 公有云 云服务

EMQX ECP 2.0 工业互联数据平台产品发布会

EMQ映云科技

数字化转型 工业4.0 智慧工厂

基于Amazon Bedrock的运维效率提升

Hanson

恭喜我同事的论文被IEEE HPCC收录!

天翼云开发者社区

数据库 云计算 高性能计算

Esty的开源项目运营经验_语言 & 开发_曹知渊_InfoQ精选文章