Linux System Calls vs writing device drivers