1). Это самая безобразная часть - что все предыдущие наработки перестают даже компилироваться при малых изменениях версий ядра


2). Но есть здесь и ещё сложность:
- а что делать со старыми версиями (кодами, примерами)?
- просто выбросить - проще всего, но в разных областях: встроенные, роутеры всякие, сетевое оборудование - до сегодня эффективно используются версии ядра 3.ХХ ... а 4.ХХ - так уже просто экзотика.
Обкладывать дефайнами куски кода (условной трансляцией) - не вариант: примеры просто нечитабельное + мне работы на порядок больше отслеживать версии...
Пока решение будет такое: примеры переделываю только под последние ядра 5.4-5.15, а в каждый каталог тематический включается каталог old_version, в котором подкаталоги: 2.6.38 ... 3.13 ... 4.11 ...
3). И сложности с отладкой: малейшая ошибка в переделке уже работающего - и O-ooops ... И перезагрузка. Это требует уйму времени.
Решение: отлаживать всё первоначально только в виртуальных машинах, потратить время на подготовку целой линейки таких машин ... И только на вылизывании чистовых деталей делать это на реальном железе.