اگر بخواهیم برنامه ها را از نظر نحوه اجرای برنامه در زمان اجرا دسته بندی کنیم می توانیم آنها را به دو دسته اصلی تقسیم بندی کنیم، دسته اول برنامه هایی که بدون هیچ واسطه برروی CPU اجرا می شوند که اصطلاحا به آنها برنامه های native هم گفته می شود (مانند برنامه هایی که توسط زبان های برنامه نویسی C و C++ و Delphi تولید می شوند) این دسته از برنامه های برای اجرا نیاز به نرم افزار خاصی ندارند و می توانند مستقیم برروی CPU اجرا شوند.
دسته دوم برنامه هایی هستند که با واسطه یک برنامه دیگر (مانند ماشین مجازی یا مفسر زبان) اجرا می شوند. برنامه هایی که با استفاده از زبان های برنامه نویسی جاوا و پایتون تولید می شوند در این دسته هستند و برای اجرا باید یک نرم افزار دیگر برروی سیستم نصب باشد که برنامه به واسطه آنها برروی سیستم اجرا شود (در جاوا ماشین مجازی جاوا یا JVM و در پایتون مفسر زبان پایتون).
برنامه هایی که با استفاده از زبان برنامه نویسی C# برروی پلتفرم .Net تولید می شوند جزء دسته دوم قرار دارند و CLR ماشین مجازی اجرا کننده برنامه های تولید شده برروی پلتفرم .Net است (معادل jvm در جاوا).