Linux Program Development: a guide with exercises