Não é possível converter de List <DerivedClass> para List <BaseClass>

Estou tentando passar uma lista deDerivedClass para uma função que leva uma lista deBaseClass, mas recebo o erro:

cannot convert from 
'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>' 
to 
'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'

Agora eu poderia lançar meuList<DerivedClass> para umList<BaseClass>, mas não me sinto confortável fazendo isso a menos que eu entenda porque o compilador não permite isso.

As explicações que eu encontrei simplesmente disseram que isso viola a segurança do tipo de alguma forma, mas eu não estou vendo isso. Alguém pode me ajudar?

Qual é o risco do compilador permitir a conversão deList<DerivedClass> paraList<BaseClass>?

Aqui está o meu SSCCE:

class Program
{
    public static void Main()
    {
        BaseClass bc = new DerivedClass(); // works fine
        List<BaseClass> bcl = new List<DerivedClass>(); // this line has an error

        doSomething(new List<DerivedClass>()); // this line has an error
    }

    public void doSomething(List<BaseClass> bc)
    {
        // do something with bc
    }
}

class BaseClass
{
}

class DerivedClass : BaseClass
{
}

questionAnswers(6)

yourAnswerToTheQuestion