I am writing a hobby operating system from scratch. Right now, my main
development environment is on Windows, but I also use FreeBSD and Mac
OS X quite a lot, so I'd like to be able to work on those systems too.
I am not using the GNU toolkit, like most people do, but I use the
Windows WDK. For those not familiar with this, it is the Microsoft
environment for writing drivers. Actually Windows itself (all of it)
is compiled with this tool. Basically the compiler and tools come from
the same code base as the Microsoft Visual Studio compilers, but
without all GUI junk and with a *sane* build system instead of the
It works very well, I am very happy with this. I have chosen the WDK
instead of GNU tools because I already use it for writing windows
drivers and it works really really well.
I want to change it though because:
1) It knows only IA-32(e) and IA-64. Right now I only target IA-32e
(x64) but I'd like my system to be portable. (Actually I also target a
Windows, software only target. My system is a microkernel and runs
most stuff in user space. Hardware is 100% abstracted in a shared
library that links with the kernel. The abstraction is so good I can
have a software HAL.DLL, besides the IA-32 bare metal HAL.DLL and link
it *with the same kernel binary* that runs on bare hardware and run
the OS as software Win32 processes.)
2) There's no way I could make my system self hosting with Microsoft
tools. Even if I implement a minimal Win32 layer (this should be easy,
the tools are CLI only and very minimal) the licence forbids their use
on other systems then windows.
3) I'd like my system to be BSD licenced. I should not depends on some
4) There seem to be some legal issues regarding the use of Microsoft
tools to produce binaries that run on other operating systems.
Obviously I want to change the WDK with something of a certain degree
of quality. I already decided against GNU tools. When I have heard
LLVM + Clang became self hosted I became instantly thrilled.
Unfortunately, from my understanding I still depend on Windows on some
GNU tools, like the assembler.
I have compiled LLVM + Clang on Windows with Visual Studio just fine.
It doesn't do much yet though, so I can't build a self hosted compiler
with this, as it is documented in the docs. I think for full support I
need to wait for llvm-mc?
What do you think I should do now? Is there any way I could help the
project, and in the meantime help myself?