在大规模的金融科技企业中,开源软件可以使用到哪个层级?是在无关紧要的工作中为技术控添加一些亮点,还是可以深入核心为金融科技企业的建设添砖加瓦? “开源软件”和“开源”我们常常会混淆这两个概念。
事实上,“开源软件”和“开源”这两个命题对于一家金融科技企业的成功都非常重要,前者是一类软件产品,我们要用它;后者是一种新的生产关系,我们要实践它。对于金融科技企业,开源软件的使用无法避免,开源实践也需要积极尝试。本文接下来的篇幅里就谈一谈金融科技企业该如何使用开源软件。 拥抱开源软件“开源软件正在吞噬世界”!在开源软件的世界中,有众多优秀的开源项目,能够被软件开发者轻松的复用和集成。一直以来,金融科技企业对于开源软件并不陌生,Linux操作系统、Tomcat服务器等都在金融科技企业中大量广泛使用,值得注意的是,传统的银行IT对于开源软件的使用往往是需要通过第三方商业厂商来引入,银行IT会专注于构建自身的应用服务,商业厂商则会关注于开源软件商业版本的维护、升级和支持等工作。
随着金融科技企业的业务范围进一步打开,业务需求的多样性和交付时效的要求不断提升,传统的“闭源软件服务-开源软件内核”的软件使用方式已经不能够满足金融科技企业的使用需求。金融科技企业需要进一步拥抱开源软件的使用。
使用路径的缩短意味着更多的开放度和更多的挑战,同时也带来了更多技术硬核能力提升的机遇。金融科技企业需要在借助众多功能如此丰富的开源软件来构建自身的核心业务系统的同时,需要很好地解决好开源软件带来的多版本、维护升级、漏洞攻击、法律边界等风险问题。正如一支带刺的玫瑰,在欣赏她的美好的同时也要小心防备被她扎伤。 开源管理办公室对于如何用“好”开源软件,谷歌、微软等科技企业通常是通过“开源管理办公室”来解决这个问题。开源管理办公室是一个中心化的组织机构,它的重要职责之一就是在开源软件代码与企业的商业产品代码相结合时,确保企业自身权益得到保障的同时履行相应的法律义务。开源管理办公室的人员构成通常需要包括技术负责人、产品负责人、法律专员和开源程序经理等角色。办公室会结合政策规范和技术能力帮助企业内部的所有产品更“好”地使用开源软件。通常来说,当一个企业产品需要集成使用开源软件时,开源管理办公室需要通过源码扫码、法律审查和架构审查等方面帮助产品进行使用前必要的检查。 源码扫描 开源软件使用检查通常是从源码扫描开始。对于每次代码集成,都可以启动对于开源软件使用的源码扫码。扫描完成后可以从中得到软件物料清单(BoM)、有效许可证,许可证文本和义务摘要、许可冲突需要由法律进行验证、文件清单、识别文件等信息。源码扫码是开启开源软件源码使用的第一步。在完成源码扫描在这个阶段主要是根据源码扫码的结果,来进行一些基础问题的识别,比如不兼容的许可证等。 法律审查 在法律审查阶段,此阶段的目标是产生合规性法律意见,并确定所涉及软件组件的传入和传出许可。在法律审查过程中,通常需要注意许可信息(通常可在COPYING或LICENSE文件中获得开源软件组件的许可信息)之外,您还需要捕获版权和所有权声明。此信息将在您的产品文档中提供适当的属性。 架构审查 在体系结构审查中,合规官和审核团队或开源审查委员会的工程代表对开源,专有和第三方代码之间的交互进行分析。这需要检查审核:开源组件(“按原样”使用或修改)、专有组件、源自第三方软件提供商的组件、组件依赖性、通讯协议、特定软件组件与之交互或依赖的其他开源软件包,尤其是如果它受其他开源许可证约束。 审查之后每次的开源代码的集成审查能够帮助企业形成一个很好的合规计划,但是这些还不足以帮助一个金融科技企业很好地驾驭开源软件。从一个更长的生命周期来看,每次的审查结果和经验、开源软件在使用过程中的版本漏洞、Issue的跟踪情况、新版本的发布情况、开源社区的动态都需要将信息流汇聚,在长期的研发过程中,提供给企业内部广大的开发者,提升开源软件使用的能力。 以慢制快开源合规性是软件开发过程的重要组成部分。金融科技企业也可以通过开源软件的使用获得巨大的技术提升和商业收益,一方面,开源软件的使用能够很好地培养企业自身的技术能力,通过深入的源码级别的使用和集成不断地掌握基础技术的核心能力;另一方面,开源软件的规范使用降低了软件开发的成本,并且可以提升OEM和下游供应商的所在的整个软件供应链的合规性,还能在技术社区收获足够的信任度。 或许开源使用合规性的话题在科技巨头企业已经形成一套完整的方法论和实践闭环,但对于大部分银行系金融科技企业来说这还只是刚刚开始。当前,一套完整的系统动力图:“开源软件使用→ 企业商业收益→ 参与开源建设→ 加强开源软件使用”已经呈现在我们的眼前。作为刚开始起步探索开源软件的金融科技企业来说,在找到正确的方向以后,就是需要从小处着手,通过一步步地、“慢慢”地实践开源软件的规范使用开始,推动这个系统动力图正向运转。
本文转载自金科优源汇,作者阿山 |