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:

  1. 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).
  2. All CIL opcodes won't be translated. So, directly using CIL is not an option.
  3. "Any" .NET executable is not targetted for translation. .NET will be a tool, not target.
  4. 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.
  5. 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.


  • What does "All CLI opcodes won't be translated." mean?
    – Gabe
    Commented Dec 23, 2011 at 21:00
  • 1
    You can't do that: en.wikipedia.org/wiki/… Commented Dec 23, 2011 at 21:23
  • @Gabe: Translator will just give an error. You can assume endfinally as good example.
    – Osman Turan
    Commented Dec 23, 2011 at 21:42
  • @HansPassant I understand that license disallow usage of CLI in final products. But, I'm considering to use CLI as an intermediate tool. License does not clearly cover this. Am I wrong?
    – Osman Turan
    Commented Dec 23, 2011 at 21:49
  • 3
    Interpreting licenses to your liking is what keeps lawyers and court rooms busy. This is not the right place to ask for legal advice. Commented Dec 23, 2011 at 21:53

1 Answer 1


If i had understood your question correctly i think all you are saying is that you will create your own system (compiler or Virtual machine) which takes CIL byte codes and do something interesting. This do something can be of course translating into executable or another IL which is later interpreted.

Now the question really is - the CIL being a Microsoft intellectual property will they sue you?

The wiki link of Mono provides some interesting links on this; Accordingly,

When Microsoft first announced their .NET Framework in June 2000 it was described as "a new platform based on Internet standards", and in December of that year the underlying Common Language Infrastructure was published as an open standard, "ECMA-335" - opening up the potential for independent implementations.

Here is the home for this reference. The Microsoft's development center's page gives good details. According to this CIL instruction set is part (part III) of the specs in overall CLI standard. The site also mentions that there are following companies involved in developing this standard.

Many of the organizations that have participated in the TC39/TG2 and TC39/TG3 work have volunteered to mirror this site. The links for the mirror sites are:

Intel Corporation,
ISE (Eiffel),
IT University, Copenhagen
Kahu Research, New Zealand
Microsoft Corporation
Novell (Mono)

According to same wiki reference:

On July 6, 2009, Microsoft announced that it was placing their ECMA 334 and ECMA 335 specifications under their Community Promise pledging that they would not assert their patents against anyone implementing, distributing, or using alternative implementations of .NET

Now based on all above research, we can say that - given that the ECMA is an open standard, you can actually do legally what you propose to do.

NOTE: there are some component not included in this spec. Also, using .NET CLR itself is not part this discussion.

DISCLAIMER: But yes, great many details go in legality. So since i am not lawyer, my advise to you is for free but without any warranty! :)

  • I've read both your answer and it's links several times. Most interesting part was that ECMA 334 (especially Partition III: CIL Instruction Set) is under Microsoft's Community Promise allows anyone to freely implement alternative implementation of .NET. This answers my question precisely. I was afraid of Microsoft would eventually sue me due to using (actually translating) CIL which is Microsoft's intellectual property. Most of my concern's root was Dalvik VM due to it's same thing what I'm trying to do. But, I've read some sources Oracle sued Google for using it's intellectual properties. Commented Dec 30, 2011 at 22:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.