¿Por qué los tipos TGeneric <Base> y TGeneric <Descendant> son incompatibles?

Comencé a usar genéricos en Delphi 2010, pero tengo un problema al compilar este fragmento de código:

TThreadBase = class( TThread )
...
end;

TThreadBaseList<T: TThreadBase> = class( TObjectList<T> )
...
end;

TDataProviderThread = class( TThreadBase )
...
end;

TDataCore = class( TInterfacedObject, IDataCore )
private
  FProviders: TThreadBaseList<TDataProviderThread>;
...
end;

Luego tengo un procedimiento anidado:

procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;

Y finalmente quiero llamar a este procedimiento anidado en el código de la clase TDataCore:

MakeAllThreadsActive(FProviders);

Pero el compilador no quiere compilarlo y dice (los corchetes '<>' se reemplazan por '()'):

[Error DCC] LSCore.pas (494): Tipos incompatibles E2010: 'TThreadBaseList (TThreadBase)' y 'TThreadBaseList (TDataProviderThread)'

No lo entiendo aunque TDataProviderThread es descendiente de TThreadBase.

Tuve que arreglarlo por encasillamiento duro:

MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));

¿Alguien sabe por qué el compilador dice este error?

Respuestas a la pregunta(2)

Su respuesta a la pregunta