
在本教程中,我们将研究软件多样性。首先,我们将了解导致软件多样性的动机。最后,我们将研究什么是软件多样性以及如何工作。
通常,如果开发人员需要实现解决特定问题的软件,他们会召集团队,分析需求,选择编程工具,并创建一个解决问题的软件程序。
前面描述的方案是在市场上发布新软件的最常见过程。但是,主要是在复杂软件中,发布具有一些未识别错误和潜在安全问题的软件的空间很大。
通过这种方式,使用单个软件实现来解决问题会引起一些担忧:
所以,问题是:我们如何才能减轻特定软件实现的潜在问题?答案可能是对同一软件进行不同的实现,解决相同的挑战,满足相同的要求,并提供相同的正确结果。简单来说,我们称之为软件多样性解决方案。
如上一节所述,软件多样性由解决相同问题的不同软件实现组成。软件多样性实际上是受生物多样性启发的。例如,许多翅膀形状允许鸟类飞行。然而,有些在特定气候条件下使用时有一些弱点,而另一些则没有。
与代码多样性最相关的是保证给定相同的输入,对于每个不同的实现,程序返回相同的输出。因此,在实践中,所有实现都对输入和输出使用相同的数据模型,并提供相同的操作集。下图描述了所描述的方案:

有几种技术可以实现软件多样性:
此外,还存在自然的软件多样性。它包括使用可互换的资源来创建不同的软件实现,例如,使用不同的数据库管理系统,甚至在不同的操作系统中运行软件程序。
我们可以强调软件可变性的两个主要好处:安全性和容错能力的改进。在安全性方面,它避免了潜在漏洞和后门的完全传播,隔离了受安全问题影响的软件用户组。在容错方案中,软件可变性避免了使整个可靠系统(例如,使用复制来缓解拜占庭故障的系统)崩溃的错误。
在本教程中,我们研究了软件多样性。我们可以说,多样性是避免已发布软件程序出现灾难性情况的有效替代方案,避免了错误和安全问题的完全传播。