Which of the following is a Strategy to achieve Software diversity ?

Which of the following is a Strategy to achieve Software diversity ?

A. Different programming languages
B. Different design methods and tools
C. Explicit specification of different algorithms
D. All of the mentioned

Explanation: Diversity means to provide the same functionality in different ways so that critical components of a dependable system will not fail in the same way.