No se puede convertir de List <DerivedClass> a List <BaseClass>

Estoy tratando de pasar una lista deDerivedClass a una función que toma una lista deBaseClass, pero me sale el error:

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

Ahora podría lanzar miList<DerivedClass>&nbsp;a unList<BaseClass>, pero no me siento cómodo haciendo eso a menos que entienda por qué el compilador no lo permite.

Las explicaciones que he encontrado simplemente han dicho que viola la seguridad de los tipos de alguna manera, pero no lo veo. ¿Puede alguien ayudarme?

¿Cuál es el riesgo del compilador que permite la conversión deList<DerivedClass>&nbsp;aList<BaseClass>?

Aquí está mi 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
{
}