add os dependency and os detect