1. A computer-implemented method to schedule one or more operating system threads through a hypervisor that manages heterogeneous processing cores, the method comprising: presenting an operating system with a set of virtual cores, the set of virtual cores configured by a hypervisor, wherein the virtual cores isolate the operating system from knowing one or more capability differences between physical processing cores accessible to a computing device; receiving a thread scheduling request from the operating system to run instructions of a thread on an identified virtual core from the set of virtual cores presented by the hypervisor; prior to executing the thread, determining one or more processing needs of the received scheduling request; accessing a scheduling policy that specifies one or more goals for operating the computing device, wherein at least one of the goals relates to power usage; selecting a physical processing core on which to execute the thread associated with the received scheduling request, wherein the selection is made based on the accessed scheduling policy and available system facilities; and scheduling the thread to execute on the selected physical processing core.