随着计算机、移动电话、物联网设备和传感器的数量不断增长,应用程序的数量也在不断增长。各行各业、不同规模的公司都在迅速成为软件供应商。即使是传统的硬件公司或制造公司也会转向软件,来开发具有竞争力的差异化产品。例如,普通的高端汽车现在的动力来自1亿多行代码。世界上最有价值的公司都有一个共同点:它们的资产大多是无形的,而且无形资产的占比正在逐年上升。

不只是代码量在增加,各种编程语言框架和后续版本变化的速度也在不断加快。根据 Gartner 公司最近的一份报告,软件维护占其年度 IT 预算的 80%。软件工程部门的领导者急需解决代码库日益复杂的问题,以及由于公司内部数字化资产不可见,难于创新的问题。

开源正在吞噬软件世界

克服上述挑战的一个方法是将维护代码库的负担分担出去,并联合公司内外部的人一起进行创新。开源软件通常被视为一种竞争杠杆,公司要么采用第三方软件,要么将自己开发的软件捐赠给独立基金会。开源模式的成功伴随着整个世界经济结构的重大变化。

在最近的一个博客系列中,开源领袖Joseph Jacks分享了许多关于商业开源软件、项目、商业模式以及价值观的宝贵见解。正如 Joseph 的商业开源软件公司指数中所展示的,以开源项目为主要业务的公司数量和估值十分惊人。除了维护开源项目、发布新版本之外,以开放为核心的公司还需要制定产品化战略来实现盈利。这种商业战略既不是一朝一夕制定的,也不是一成不变的。这是一个缓慢和互相协作的过程,随着核心开源项目的成熟度和应用程度而发展。从基本的企业支持及服务或轻型企业插件,到具有多样代码库的托管平台,有许多不同的以开放为核心的模型。开放核心和许可模式的选择,极大地影响了商业开源软件公司与其各自社区之间的协作水平,以及公司内部文化之间的协作水平。

内部开源是现实

作为开源软件的主要消费者和生产商,许多财富 500 强公司已经成为最成功的开源软件发源地—— Linux 基金会的赞助成员。通过参与外部生态系统并与特定的开发者社区合作,这些 500 强公司将接触到一套不同的基于协作的软件工程实践和文化。使用相同的方法论在公司内部开发专有产品是一个流行的概念,称为内部开源。

这个概念并不新鲜,最初是由 Tim O’Reilly 在 2000 年提出的,并被红帽、贝宝和彭博等创新公司推广,这些公司多年来一直在进行内部开源。关于内部开源这个主题有很多内容可以探讨,包括采用内部开源成功的用户案例和优秀实践。但在这篇文章中,我们主要讨论内部开源的三大支柱:文化、开发流程和自动化工具。

管理一个大规模的开源项目并维护一个健康的社区面临着许多挑战。维护人员应该努力创建一个受欢迎的环境,在这个环境中,每个人都可以进行开发、讨论、决策,而且贡献者都是对新人有帮助的、积极的、友好的。同样的文化和价值观也适用于公司内部开源的项目。

内部开源流程的设计,首先要考虑到贡献者的经验。贡献过程应该简单、清晰,并且有清楚的文档记录,尽量减少卖QQ号码平台维护者和贡献者之间的摩擦。从参与者第一次访问仓库到合并 PR ,只需要少量的交互和来回操作。内部开源仓库,应该为贡献者提供有层次的 Readme 文档、结构化的规划图、GitHub 标签、里程碑和所有权规则等,只有项目中这些要素对于贡献者完全透明,才能打破孤立,避免挫败感。

自动化工具是内部开源的最后一根支柱,也同样重要。在特定的 GitHub 仓库中,模板可以自动添加到 issue 中。大多数成功的开源项目都广泛使用持续集成服务进行自动化测试以及质量保证。比如像Derek这样的自动化工具可以做一些简单任务,比如分配或自动标记新创建的 issue。尽管最近自动化工具方面有了一些进展,但要将自动化提高到一个新的水平,要做的还有很多。

内部开源的未来

对于内部开源来说,未来是光明的。随着“代码即数据”等概念的出现,以及大规模代码检索和代码分析工具的开发,可以帮助开发人员实现内部开源的计划。例如,开发人员能够通过检索和分析代码仓库的历史记录,轻松地找出整个组织中的相似、重复代码。内部开源将进一步帮助软件工程团队之间确定合作机会,而且能够为代码审查机器学习模型和应用的测试提供数据。内部开源的代码仓库也能为有利于管理层分析项目、了解业务,管理层也能够通过仓库看出内部开源实践成果并评估其成效。换言之,公司现在离将代码仓库视为最有价值的资产,更近了一步。


更多相关文章

  1. 我去,你写的 switch 语句也太老土了吧
  2. 代码审查常见问题,建议收藏
  3. 一文带你入门Java Stream流,太强了
  4. 是时候丢掉 onActivityResult 了 !
  5. 很多人不知道的Python 炫技操作:合并字典的七种方法
  6. 趣学Spring:一文搞懂Aware、异步编程、计划任务
  7. “百行代码”实现简单的Python分布式爬虫
  8. 你不知道的 Docker CTO 的浪漫狂放
  9. Docker社区核心成员Doug Davis分享为社区贡献代码的技巧

随机推荐

  1. java解析json字符串的两种方法详解(Andro
  2. Android 输入限制
  3. 非一般的原因:Unable instantiate applica
  4. 实现Android简单动画旋转案例
  5. Android用户界面 UI组件--自动提示输入框
  6. OpenCV4Android开发之旅(一)----OpenCV2.
  7. android设定手机的显示模式,横竖屏,是否全
  8. [转载]系统内置的一些工具类
  9. 自定义RadioButton 文字在下,图片在上
  10. android中shape的使用(android:angle小解)