Prior to actual question, let me summarize what I'm trying to do. I plan to implement a small, JIT-enabled, register-based VM runtime. Instead of making a proper compiler (which is hard IMO) for a super-fancy home-brew language, I decided to implement a binary translator from a appropriate bytecode (much like Dalvik VM approach). Considering CIL vs. Java bytecode, CIL is best for my needs.
As a note, I wanted to list some important things to avoid possible confusions:
- Base Core Library (BCL) or any Microsoft specific assemblies won't be decompiled and translated. Instead, BCL references will be subject to substitution with my VM specific codes at translation phase (much like COSMOS Plugs approach).
- All CIL opcodes won't be translated. So, directly using CIL is not an option.
- "Any" .NET executable is not targetted for translation. .NET will be a tool, not target.
- Dalvik VM is good example what I'm trying to do. In Dalvik case, programs are written in Java, but Java byte codes translated into Dalvik opcodes. In my case, programs will be written in .NET, but CIL will be translated into "fancy" VM opcodes.
- Custom VM itself will be closed source and it will be in a free software initially. But, in time, it might be used in open source and/or commercial projects.
So, is there any license restriction to avoid me doing this? If so, how can I avoid the restrictions? Making only non-profit applications or making it open source?
EDIT: I won't use CLI, CLR or any other thing which is distributed from Microsoft. I won't redistribute or integrate SSCLI into my applications either. The question is about translating CIL code into custom byte codes which will be done with my own tools. So, it's actually decompilation of my own custom .NET executables into a different byte codes to serve my needs in production phase. So, essentially I'll use .NET compilers as a front-end for my decompiler, but I won't redistribute .NET compilers either.
EDIT2: CLI AND CIL ARE DIFFERENT THINGS!