Prima di una domanda vera, permettetemi di riassumere quello che sto cercando di fare. Ho in programma di implementare un runtime VM piccolo, abilitato per JIT, basato su registro. Invece di creare un compilatore appropriato (che è un IMO difficile) per un superbo linguaggio casalingo, ho deciso di implementare un traduttore binario da un codice byte appropriato (molto simile all'approccio VM di Dalvik). Considerando il bytecode CIL rispetto a Java, CIL è la migliore per le mie esigenze.
Come nota, ho voluto elencare alcune cose importanti per evitare possibili confusioni:
- Base Core Library (BCL) o eventuali assembly Microsoft specifici non verranno decompilati e tradotti. Invece, i riferimenti BCL saranno soggetti a sostituzione con i miei codici specifici VM in fase di traduzione (proprio come l'approccio COSMOS Plugs).
- Tutti gli opcode CIL non saranno tradotti. Quindi, usare direttamente CIL non è un'opzione.
- "Qualsiasi" eseguibile .NET non è destinato alla traduzione. .NET sarà uno strumento, non un obiettivo.
- Dalvik VM è un buon esempio di ciò che sto cercando di fare. Nel caso di Dalvik, i programmi sono scritti in Java, ma i codici byte Java sono tradotti in opuscoli Dalvik. Nel mio caso, i programmi verranno scritti in .NET, ma CIL verrà tradotto in opcodes VM "fantasiosi".
- La VM personalizzata stessa sarà closed source e inizialmente si troverà in un software libero. Ma, nel tempo, potrebbe essere utilizzato in progetti open source e / o commerciali.
Quindi, c'è qualche restrizione della licenza per evitare che lo faccia? In tal caso, come posso evitare le restrizioni? Realizzare solo applicazioni non profit o renderle open source?
EDIT: non userò CLI , CLR o qualsiasi altra cosa distribuita da Microsoft. Neanche io ridistribuirò o integrare SSCLI nelle mie applicazioni. La domanda riguarda la traduzione del codice CIL in codici byte personalizzati che verranno eseguiti con i miei strumenti personali . Quindi, in realtà è la decompilazione dei miei eseguibili .NET personalizzati in codici byte diversi per soddisfare le mie esigenze in fase di produzione. Quindi, essenzialmente userò i compilatori .NET come front-end per il mio decompilatore, ma non ridistribuirò nemmeno i compilatori .NET.
EDIT2: CLI E CIL SONO COSE DIVERSE!