I've put all docstrings in the abstract class for now. Ideally, there should be a basic summary in the abstract class and OS-specific implementation details in the subclasses.
I'd like to think of some way of calling only implemented functions for the subclasses in main() e.g. putting a list of supported functions in each subclass.
I take issue with, to a lesser extent, debug code being next to "normal" code similarly to how different platforms used to share one function. In a future PR, I'd like to try to address this too.
Trying to focus on one main thing per PR. I'll probably open up another PR to clean up the Windows power stuff later. For now, I've just split it like you've asked.
main()
e.g. putting a list of supported functions in each subclass.