refactor: Using separate runtime depending OS
Currently this is implemented using Enums which makes
the runtime system as closed and not easily pluggable.
We will revisit later once this is much more polished to
make the implementation flexible to add runtimes by anybody
by traits