原文:How to Avoid Open Source Traps 

作者:CBR工作人员,编译:御坂弟弟

开源许可证的限制性有多大?二进制文件是否可以不需要订阅?有哪些插件可以使用?那些小小的文字中是否隐藏着陷阱?

显而易见的是,开源软件是当下开发和基础设施的默认选择。数据库专家 Percona 公司的首席执行官兼联合创始人 Peter Zaitsev 写道:"你会看到无论在编程语言、操作系统、现代数据库技术或整个云原生领域,开源解决方案都是领先的选择之一。

由于开源有这样的主导地位,我们经常会看到一些公司将他们的软件营销为 "开源",尽管它并没有提供真正开源软件所提供的所有(或任何)好处。

在这篇文章中,我们看看一些常见的陷阱,并提供如何避免这些陷阱的建议。

什么是开源软件

很多人并没有意识到 "开源 "这个词是没有商标的,所以理论上任何公司都可以用这个词来描述任何一种软件。唯一的后遗症是有可能受到媒体和用户的反对,但其一般不会采取法律行动。

如果你关注开源(和自由软件)社区,就会知道有三个不同的组织提供了定义。

虽然每个组织都使用不同的术语 —— 自由与开源,在精神上略有不同,但对于我们的目的来说,它们是足够相似的。

一些企业领导希望在他们的公司中采用开源软件,并且会关注开源软件是否真的能达到他们的目的。一般来说,他们的目的是(出乎意料)降低成本、提高效率等。首先,他们应该问自己(或计划合作的供应商)以下问题:

  • 许可证 —— 软件的许可证是否适合软件的预期用途?具体来说,当你计划在不同的,或专有的许可证下重新发布合并的作品时,CopyLeft 许可证可能不适合。
  • 如果您停止商业关系,会发生什么? 如果您与支持或开发您的软件的供应商建立了商业关系,如果您不得不终止这种关系,会发生什么?您想问这个问题是为了避免在价格谈判中被 "挟持",同时也是因为您的供应商可能会因为业务变化或收购而停止支持您所选择的软件。
  • 有哪些替代品存在?如果软件是真正的开源软件,你至少可以选择在内部继续开发和支持。不过在现实中,这对许多组织来说不切实际,所以有其他的替代方案更好,例如有多个供应商的丰富生态系统。
  • 你能做出贡献吗? 如果你需要改进软件以更好地满足你的需求,例如硬件支持或特定的软件集成,你希望了解如何实现它。有些软件提供了很大的扩展可能性或贡献者计划,有些则没有。

开源陷阱

现在让我们看看 "开源 "可以用来描述不完全符合上述开源软件原则的软件的不同方式。

“开源兼容”软件(“Open Source Compatible” Software)

现在很多软件都说自己是 "开源兼容",但并没有宣称自己是开源的。例如,Amazon RDS Aurora 声称与 MySQL 或 PostgreSQL 兼容,但当然,它不是开源的。

当你听到与开源有关的 "兼容 "时,通常意味着从开源解决方案迁移到这种专有技术是很容易的,反之则很难。

当你看到供应商在云端部署的开源软件时,即使 "核心引擎 "与开源版本完全相同,没有任何变化,但周围的管理界面通常是专有的。这意味着,你的团队可能会在运营中开始强烈依赖它。

避免陷阱。 但同时也要知道,有很多优秀的开源兼容软件,它们可以提供比单独的开源软件更好的性能或可用性。

只要你明白这是专有软件,而且你对此无所谓,就没有问题。然而,如果你想利用这种 "兼容性",并确保你可以用完全开源的软件替代,你需要在应用程序中进行测试。

例如,如果你希望你的应用程序能够运行在 PostgreSQL 上,或者 Azure Database for PostgreSQL 上,除了测试 Amazon RDS Aurora 和 PostgreSQL 的 兼容性之外,你还需要测试功能、性能和管理能力。

开放核心(Open Core)

开放核心软件是指当产品有一个开源版本,通常称为 "社区版",同时也有一个具有附加功能的专有产品版本,通常称为 "企业版"。社区版或多或少弱于企业版,以确保企业版能够成功销售。

开放核心软件往往以开源软件的名义进行销售。例如,MySQL 自称是 "世界上最受欢迎的开源数据库",而不是 "世界上最受欢迎的开放核心数据库!"

企业版软件往往包括一些扩展和改进,根据你的情况,这些扩展和改进可能值得拥有。然而,"企业版 "软件类似于 "开源兼容 "软件。" 即,如果你的目标是避免软件锁定,你需要测试你是否真的实现了这一点。

避免陷阱:最简单的方法是避免企业版,如果可以的话,坚持使用社区版。

你应该探索第三方解决方案的生态系统,否则这些解决方案提供的功能只存在于企业版中。如果你面对的是流行的软件,替代品很可能存在。

以 MySQL 为例,Percona Server for MySQL 包括许多企业版功能的替代品,并且是 100% 免费和开源的。不过 Percona 并不是唯一一家提供替代品的公司。如果你正在寻找一个企业审计插件的替代品,你可以看看开源的 McAfee Audit Plugin for MySQL。即使你不能从开源软件中获得你所需要的所有功能,解耦和使用替代供应商往往可以降低你的成本,减少锁定。

源码可用(Source Available)

"源码可用" 是一类许可证,它允许你访问源代码,但与真正的开源软件相比有一些限制。近年来,许多开源软件厂商都选择了源码可用许可证,以保护他们的业务不受大型公有云的干扰。

MongoDB 可能是最著名的,他们将自己的许可证从 AGPL 改为服务器端公共许可证(SSPL)。这并不是公认的开源许可证。 此后,Elastic、Confluent(Kafka) 和 Redis 实验室也纷纷跟进,将其部分软件的许可证从开源改为源码可用。

值得注意的是,源码可用类许可证的范围非常广泛。它们中的一些相比开源许可证可能只少一点自由,也有一些可能只提供了审查源代码的权利。

更多情况下,"源码可用" 许可证的设计是为了限制竞争。这可能对开源厂商有利,但它增加了你被锁定的机会。

例如,如果你正在寻找 MySQL 或 PostgreSQL 的 DBaaS 部署,你有来自大大小小的供应商的很多选择。不过,如果你看看 MongoDB,MongoDB Atlas(MongoDB 提供 的DBaaS)几乎没有替代品。即使存在替代品,也需要云供应商与 MongoDB 公司有授权关系。这与微软 SQL Server 或 Oracle 在各种云上提供的方式并无二致。

除了云的限制外,"源码可用" 许可证可能会限制你选择你喜欢的供应商来帮助你操作或定制这些软件。

避免陷阱:正确设定期望值。”源码可用” 许可证是一种专有许可证,因此你需要仔细审查它,以避免陷入麻烦。

开源,最终(Open Source, Eventually)

"开源,最终" 是一类源代码可用许可证,它的属性是代码在一段时间后成为开放源代码。MariaDB 公司在其部分产品中使用的 BSL(Business Source License)最为著名。

供应商在 BSL 许可证下发布软件时,声称这是一个比开放核心更好的选择,因为随着时间的推移,它的功能会进入开放源码版本。但实际上,只有过时的功能才会开源。而且这通常是没有维护的,并且包含已知的安全漏洞,因此,并不适用于严肃的使用。

另一方面,使用开放核心模式,你通常会得到一套较小的功能,但这些功能往往是安全和维护良好的,因为其目的是吸引用户购买企业版。

避免陷阱。  与其他专有软件许可证一样,确保你完全理解你将要使用的东西。

只有源码 "开源"(Source Only “Open Source”)

因为 "开源 "在技术上适用于程序的源码,而不是二进制文件、支持文档,甚至是完整的构建脚本和环境配置,所以你在这里也会掉进一个陷阱。

在构建上的差异化在开源社区中是相当可以接受的 —— 事实上,受人尊敬的开源生态系统泰斗之一 —— RedHat,将认证构建的可用性和及时更新作为其订阅产品的核心,尽管源代码对每个人都是可用的。

避免陷阱:即使软件是开源的,也不要认为它对非客户来说很容易安装和维护。对于流行的软件,可能会有第三方构建和替代品。例如,CentOS 大多可以看作是 RedHat Linux 的替代构建,其二进制文件无需订阅即可使用。

结束语

我希望这篇文章能对你有所帮助,帮助你更好地理解使用开源软件可能带来的陷阱,以及理解软件是否真正的开源,或者只是在营销材料中使用 "开放 "或 "源代码 "。

虽然有一些陷阱需要避免,但接受开源作为企业默认的基础架构选择,将帮助你节省资金,并提供更平衡的供应商关系,减少或消除软件供应商锁定。