created window system abstraction layer