software layer