Yếu tố chính trong việc này là tách phần biên dịch khỏi pha thực thi. Bằng cách này, có thể viết các trình biên dịch khác biên dịch các ngôn ngữ khác sang mã byte.
Mã byte hoạt động tương tự như mã máy của CPU - bạn có tất cả các hoạt động nhỏ cần thiết để chạy chương trình - bạn có thể nhận được một biến, làm toán trên nó, có các hoạt động có điều kiện, v.v.
Java cũng không đặc biệt. Trong Java, sự tồn tại của nhiều ngôn ngữ thậm chí không phải là mục tiêu thiết kế, không giống như các máy ảo khác. Đối với Microsoft .Net CIL , khả năng chạy nhiều ngôn ngữ (C #, VB.Net, ...) là một yếu tố thiết kế chính, cũng là ParrotVM từ dự án Perl6 nhằm trở thành một VM chung.
Để giải trí, tôi đã từng tạo ra một bằng chứng rằng ngay cả Zend Engine của PHP cũng cho phép điều đó.
Và thật lòng mà nói đây không phải là bất cứ điều gì mới - ngay cả trên phần cứng thực, bạn có thể chạy nhiều ngôn ngữ - tức là C hoặc Fortran.
Sự khác biệt của sự tách biệt này khỏi quá trình biên dịch và thực thi là các trình thông dịch clssic, như một số dạng Basic, shell script, v.v. chúng thường hoạt động theo cách chúng thực thi mã ít nhiều theo một dòng theo cách mà không đưa nó vào dạng ngay lập tức ở giữa.