IMVHO the current architecture of the .NET Micro Framework simply does not allow support of AOT (native compilation). You’d gain some performance from rewriting or translating managed parts of the framework into native code, but the main bottleneck is the interpreter.
You can imagine the current implementation as one thread with a loop, inside which the runtime interprets CIL instructions and manages [pseudo-] threads and events (plus some other things - GC, debugging etc.).
Now, you take your managed application and compile it into native code (*) - how do you run it in such runtime? You can’t. (**) You need a completely different runtime, i.e. without the interpreter, runtime that has threading, event handling etc. So, what can you do? Actually, a simple thing: you take an RTOS, which already has support for threading, synchronization primitives etc., create one task/thread for your application, second task/thread for GC and you are basically done. Of course, there is some plumbing code that has to be written to interact with the actual hardware, manage memory etc. but it is relatively small; managed library references like corlib will be translated into native code with the application.
If I understand correctly what the Microsoft team is doing, they are changing the architecture so that there is one thread for the existing .NET MF runtime and second thread for the network stack, they provide two implementations: one for Windows and second for Cortex-M using ARM/Keil CMSIS-RTOS RTX. So, the runtime stays the same. However, you should be able to create another task/thread for your native application that would run in parallel with the .NET MF CLR runtime (interpreter) and even interact with the interpreted managed application.
I really like C# and Visual Studio and how awesome it is to write managed applications that run on tiny boards with fancy microcontrollers, but given a task to write anything that needs to meet real-time (***) requirements, I would not use any managed runtime, neither interpreted nor compiled, but an appropriate RTOS + C/C++.
So, in my opinion, AOT for .NET MF is not going to happen, because it would require complete rewrite, there would be nothing left (many RTOS-es come with rich driver libraries). What could Microsoft do is to make .NET Native variant for Cortex-M :whistle:
Hope I did not annoy you too much
(*) There are already many projects and tools that can convert managed code into native, using various ways.
(**) Technically, you could develop/invent some mechanism to overcome or workaround situations that arise when you need to handle threading, events etc. but it will be complicated and almost impossible to troubleshoot.
(***) Real-time is not about speed, it is about deadlines. Real-time operating system - Wikipedia