1. A computer-implemented method to schedule one or more operating system threads through a hypervisor that manages heterogeneous processing cores, the method comprising: receiving a thread scheduling request from an operating system to run instructions of a thread on an identified virtual core presented by a hypervisor, wherein the virtual core isolates the operating system from one or more capability differences between physical processing cores accessible to a computing device; 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; 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 scheduling the thread to execute on the selected physical processing core.