Именно что НЕТ. Цитата: "Как я понимаю, если мы делаем взаимодействие с устройством, то и логика api должна исходить из логики устройства".
А я говорю - нет. Логика api должна исходить из логики ВЕРХНЕГО УРОВНЯ.
Если ваш драйвер ЭНГМД пишет на диск информацию блоками фиксированного размера по 10К,
а верхний уровень хочет писать файлы произвольного размера от 0 до 1М, то api должно строится из второй, а не из первой логики.
Если ваш графический интерфейс ПОЛЬЗОВАТЕЛЯ выводит на экран текст и растровую графику (как у меня),
то ему нахер не нужны ни "точки", ни "прямые", ни "скроллинг".
Ему нужны set_canvas_size(), put_text_xy(), put_image_xy(), clr()
И реализация этих функций на OpenGL, frame buffer или паре управляющих регистров будет отличаться НАСТОЛЬКО,
что никаких общих "промежуточных абстракций" не будет и близко!
Соответственно, я не рекомендую вообще произносить слово "минимально достаточный", в этом контексте :)
Прикладной уровень пишется В ПРИКЛАДНОЙ ТЕРМИНОЛОГИИ. Весь. И api драйверов - тоже.
А вот модули драйверов пишутся как получится так чтобы "транслировать api" в железо.
Один раз. Потому что во второй раз все будет настолько по-другому, что вам один черт
будет проще написать с нуля, чем пытаться адаптировать :)