abstraction layer software