作者简介
Onur Alp Soner(欧能),Countly联合创始人和CEO。2012年创办Countly之前,欧能在华为有大约4年的工作经验。他是华为(土耳其)首批员工之一,参与建立华为NGIN (Next Generation Intelligent Networks) 未来智能网络平台的工作。
回首过去,尽管微软声称研发开源软件模型存在一定的风险,但那已是十多年前的事情,现在已经有了很大的变化。如今的微软,一家以专有平台而闻名的公司已创建了其自有的开源仓库,以便其他开发人员参与,还宣布与曾经的基于 Linux 的竞争对手红帽公司结盟,并要求与政府部门建立公开性和互操作性,即便微软历来在其封闭的 Microsoft Office 平台上具有垄断地位。同时,如 IBM 供应商之类的其他企业供应商也致力于将开源作为其企业战略中不可或缺的一部分。
随着侧重于企业需求的优质开源软件出现,历来与开源相关联的恐惧、不确定和怀疑已经消失。我们也在关注诸如 jQuery 和响应式 HTML5 库之类的 UI 框架的可用性和用户体验。它们在轻松使用移动、Web 和桌面应用方面开辟了一条道路,这对当今未充分、愉快体验应用就快速弃用的用户来说至关重要。
开源不仅仅可以降低成本
现如今,当企业谈及开源时,“低成本”不再是其首要目标。相反,他们正在提高“业务敏捷性”,在瞬息万变的市场中质量才是愈发重要的。“业务敏捷性”包括许多特质,如灵活性、透明度和减少对单一供应商的依赖。纵观企业状况,开源软件的使用非常普遍,譬如超过 9000 万用户使用 Linux 操作系统,1.2 亿用户下载 LibreOffice 办公套件以及 1000 万用户下载 MongoDB(一款可以运行 Facebook、eBay 和谷歌之类公司业务的 NoSQL 数据库)。
著名案例研究显示,Facebook 已经开发开源软件并应用在搭建社交网络的基础设施上,并将之添加到该公司的自有软件中,产生收费性服务。
阻碍开源发展的难题已解决
另一个误解是关于文档。纵观历史,都是以纯文本或 HTML 格式编写开源文档,且主要是静态文档,因为只有核心开发人员才能够编写。开发人员开始明白一个道理,没有好的文档,那么用户就不会使用他们的项目,或者不喜欢使用。满意的用户会向他人推荐您做的这个项目,但前提是他们已了解项目的工作原理以及可以从软件文档中学到东西。值得庆幸的是,随着出色的文档生成器和关于如何写好文档的教程出现,开发人员现在有能力编写清晰明了的应用程序指南,包括屏幕截图、切合实际的代码示例、充足的链接和参考,更重要的是接受用户的意见。
如何使用开源资源并成为开源社区的一部分
Countly开源了自己的 SDK 和整个后端,包括服务器端组件和控制面板。为了进行案例研究,我将回顾一下本团队在采用 Linux,MongoDB 和 Nodejs 作为解决方案的一部分之前进行的评估流程。对于任何技术项目,我们都会从以下三个不同的角度整体进行评估:技术、流程和项目参与者。
1.技术
当第一次设计 Countly 时,我们只有一个梦想:要让它成为最常用、最受欢迎的移动分析平台。让我们产生这种想法的原因在于缺少实时、开源、易用的移动分析服务。Mixpanel 没有成功、Google Analytics 对于移动项目来说并非真的方便易用,而 Flurry 又不是实时的。我们知道必须为自己的项目建立一个强大的社区,因而开始寻找最佳技术来满足自身需求。我们试过 PHP,Java,Javascript,甚至 C 和 C++ 等等这样的编译语言。还阅读了很多数据库资料,其中包括 MySQL,PostgreSQL,MongoDB 和 Cassandra。我们确信不管建立什么,都需要最底部使用 Linux。
最终,我们选择了 NoSQL 数据库 (MongoDB)。选择它的主要原因是其拥有巨大的社区,具备高性能、实时、易于使用和维护等特征。我们都未接触过NoSQL,但这并不会成为对方拒绝交易的条件。我们在 Stackoverflow 和 Quora 上了解之后,在两周内做出了决定。虽然对于 NoSQL 数据库,特别是 MongoDB 有很多负面评论,但成熟的平台和开放的公司发展方向使我们坚信可以继续前进。
接下来选择的是应用程序开发层。毫无异议地确定了Javascript,因为应用程序堆栈以及与 MongoDB 连接的连接器都以该语言运行。Javascript 也是一种选择性设计,因为我们希望尽可能地简化整个平台。
由于具备一些安全相关的框架和库,越来越多的开发人员们编写开源应用程序,且认为是安全的。虽然无法保证盯着开源软件的“许多双眼睛”有资格查找安全漏洞,但它通常被视为是黑客们难以闯入的单一系统。事实上,最近发生的一些事件表明,这是一个复杂的、相互连接的不安全自定义编程系统,无论在哪使用开源组件,都最易受到黑客的攻击。
2.流程
我们使用 Jira 进行内部沟通,使用 Github 进行外部错误报告。如果您之前用过开源软件,那么一定很熟悉 GitHub。这个网站为开发人员提供存储库以存储和共享他们的开源项目,也是一种途径,使世界各地的人们可以协作完成单个项目。我们会注意Fork,标记和查看我们资源库的用户,并尽力在 24 小时之内回复 Github 上的问题。与 Github 上的一些企业软件相反,我们的存储库欢迎“拉取请求”,对于如何编写 Countly 代码也有明确的指导,包括编写文档、开发软件或添加新的翻译语言。
虽然存在关于如何开发开源软件的大量教程,但是各个开发人员的开发方法却不尽相同。可以说我们选择 Javascript 之后,有 60 多个不同的开发人员来开发我们的代码库,其中有一半人员已添加了母语支持。了解到 Javascript 是编写 Countly 代码的基本途径之后,我们会继续吸引才华横溢的 Javascript 开发人员在这种灵活、开放的环境下工作。
3.项目参与者
如果您只是看代码,那么会很乏味。代码没有意义、没有幽默感、也不会跟您互动,问您这一天过得怎样。它不会倾听,但是您可以调整代码的可读性并编写高质量的文档来为自己和代码原作者创造快乐。这就是我们钟爱开源社区的原因,这里的软件变得更有趣,使我们能够寓工作于娱乐。考虑到大多数开源提交者对于版本控制和修补程序都有基本的了解,因此引导和培养他们管理健康的生态系统并非难事。
另外,我们一直在努力解决大家的难题。一开始渴望解决问题,但事实证明其他人有时也会遇到这些问题,没有可用的开源移动分析平台。我们项目解决的难题变得越来越多,我们看到人们都在使用并从中受益。
那么,重要的是我们为谁,具体是哪部分人群解决了难题?如果您的答案是“每个人”,那么就存在这样的问题:您是否打算接受每个人的要求并将其添加到开发任务中,如果接受,会用到哪些资源?有时即使添加一个小功能对于开发人员来说也可能是巨大的障碍,一个简单的外观功能可能会导致重新设计整个后端或用户界面。我们的解决办法非常简单:如果要添加到代码库,我们首先要显示其原型。如果需要花一个多星期来设计与讨论其原型,那么即将添加的内容可能比所需内容复杂得多。现在我们需要往后退一步,重点探讨这是否是我们真正需要的,只有其覆盖用户群至少达到 50% 时,我们才会采用。
结论
这里有很多很好的阅读材料,包括介绍参与开源项目、启动开源项目(包括如何选择许可证),如何将 Github 用于开源项目或者开源商业模式和策略等基本知识的阅读材料。技术、方法、治理、许可……有关开源的一切在过去 20 年间都已发生极大的变化,如 Linux,领先的开源项目已起飞。开展业务时,如果商业模式能掌握技术、流程和项目参与者,开源可能是最佳选择。而这一切,都由您来决定!
Countly 为移动应用程序提供高级分析和市场营销服务。我们大量使用开源软件并利用50 多个开源库、SDK 和框架。Countly也是开源移动分析和营销平台,目前服务范围覆盖6亿多设备以及3,000多个移动应用程序,客户包括Samsung、Ubisoft,Evernote 和 SK Telecom等。