Можно и не разделять код из репозитория по веткам. Концептуально звучит, что это модули зависимые от ядра. В мастере будут соседствовать все 4 модуля (включая ядро). Идея в том, что ядро проекта обычно надо держать в наиболее актуальном состоянии и только путем хранения по соседству этого можно добиться без проблем.
Решение через submodules потребует создания 3-х дополнительных репозиториев, а наличие отдельных веток может мешать, так как есть возможность забывать делать merge или cherry-pick изменений из мастера с ядром.
Также, master -- это то, что разработчик смотрит как наиболее свежий рабочий код (возможно не стабильный, но все же). Если у Вас там будет только ядро, это может вызвать непонимание, где взять модули. В таком случае рекомендую четко описать в документации Вашу схему работы с репозиторием.