I made this a separate thread only because I think we will need to have a series of discussions around the process.
The FreeDOS reference C compiler is supposed to be Watcom C, but most of what was written in FreeDOS is still built with Borland toolsets (Borland/Turbo C++ 3, maybe 4.5 for Windows). Some tools were written in Pacific C, a few in Watcom, and some in various other languages, as is the norm for DOS. NightKernel won't be as flexible because those compilers for the most part only target 16-bit real and protected mode output. Borland C++ 4.5 targets Windows and OS/2 32-bit but with it being so old, it's probably not worth the effort to strip it down for the kernel.
Watcom has the sources for its compiler publicly available and I believe with the license, a derivate work can be made of the compiler. I'm not sure how much bootstrapping and configuration it would take to add NightKernel as a target. The one benefit of OpenWatcom is that on top of having the DOS API (and multiple targets and environments to build in) it comes with an assembler that is very MASM compatible (much to the dismay of all the NASM code written so far), however, you have a complete end to end development tool for both NightKernel and FreeDOS (it may take some massaging of the C code and makefiles to rebuild totally in OpenWatcom, but that's another topic).
GCC has an advantage and a disadvantage. Its main advantage is that it can build itself, which means using GCC, we can build a GNU development toolset specific for NightKernel. The cool thing about GCC is we can set the output format of elf, win32, and a few others that escape me at the moment. That is a good thing because pretty soon the code base is going to need to move from flat binary to relocatable code. The portable executable format is the standard for EFI and is analogous to ELF (in Linux) and Mach-O (MacOS). The build environment tools would be similar to what is available in
GCC's disadvantage is that it can't compile real mode code, even DJ Delorie (DJGPP) had difficulty building a 16-bit real mode version. This means that anything that we needed to do on the 16-bit DOS/FreeDOS side would require a separate compiler.