One thing related to this is the sepeartion of the SDK part.
Curently the SDK is integral part of the whole source tree. One minor change can cause massive rebuilds even if not needed. The import libraries are even part of the modules that export the functions which is stupid, because the interfaces are expected to be stable.
Separating the SDK completely from the sources is not possible atm, but I suggest separating it from the main folder. It could be done similar to how rosapps and rostets are managed. As a sepeate checkout. But instead of putting it into the hardcoded modules subfolder, I would suggest a configurable path. So that multiple reactos checkouts could use one SDK checkout. Each of the main checkouts contains a config file with the sdk path. A default path could be set by RosBE or in the config-template. I would suggest to do that with rosapps and rostests, too. So you only need one checkout of rostests for multiple base checkouts. You can probably do that with hardlinks but not everyone can/wants to do that. The libraries would only be rebuild if you update the SDK.
Sources\ \reactos-trunk... \reactos-amd64... \reactos-arwinss... \reactos-sdk\ \include\ \lib\ <- static libs (crt, nt, ...) here \import\ <- spec files here \rosapps\ \rostests\
It would probably be a good idea to sync our headers / libs with mingw-w64 as much as possible, so maybe some day we could actually outsource the whole SDK.
Other seperations like core / win32 / wine etc can be done in a similar way. It would require to have multiple checkouts to compile, but I think that's a reasonable efford. Or all parts could be put into trunk/source/... then you can checkout the whole folder if you don't want to hassle with multiple checkouts or trunk/source/sdk/ and trunk/source/reactos seperately if you like.
I would also suggest that "clean" command gets fixed. Currently it always deletes all stuff from the specified source folder. Even if I am executing it from a different checkout folder. That sucks. It should only clean everything in the current folder. That way modules / the sdk would not automatically be cleaned. Because that's in most cases not what you want. A "clean all" could be used to clean all dependencies as well.
Regards, Timo