Абстрактный ОС в вакууме

В самом начале истории IT, когда операционных систем не существовало вообще, байт был равен 6 битам, а программы были размером в тысячу машинных команд максимум, их писали сразу под железо и прямо в машинном коде. Переносимость таких программ была только на бумаге — в виде алгоритма. Гораздо позднее пришёл на помощь язык программирования Ассемблер, но и с ним переносимости не добавилось.

Потом появились простейшие загрузчики, затем первые операционные системы (ОС), и, наконец, зародилась платформа x86. Получил распространение язык программирования C. Программы на C, в отличие от ассемблера, на порядок проще портировать на другие платформы. Кстати в той же DOS, например, необходимости в сторонних драйверах почти не было — железо было единообразным, что облегчало написание программ "под железо".

Компьютеры были быстрыми и не тормозили, но тут появилась Windows (c). Windows развивалась и обрастала драйверами, как средством для абстрагирования более высокоуровневого системного ПО от деталей низкоуровнового взаимодействия с разнообразным компьютерным железом. Поначалу бытовало мнение, что под Windows играть нельзя, а только под DOS — игры шли быстрее, т.к. они общались напрямую с железом, а DirectX тогда ещё не придумали (до 1995 года).

Росли мегагерцы процессоров, выходили новые версии ОС, стандартизировались интерфейсы, но софтверным гигантам этого показалось мало. В итоге родились и отправились в массы технологии Java (и ".NET"). Цель сред исполнения, как нового витка эволюции, — абстрагироваться уже не только от железа и его драйверов, но даже и от операционной системы. Программы на Java славились задумчивостью, прожорливостью по отношению к памяти и топорным пользовательским интерфейсом в обмен на возможность запускать ПО на разных платформах. Вопрос со скоростью исполнения был практически решён после появления JIT-компиляторов, а вот особенности работы с памятью остались. Девиз "написано однажды — работает везде" превратился в реальное правило "написал под одну платформу — отлаживай под все". Дошло до того, что программы под Java 1.5 и 1.4/1.6 стали несовместимы между собой, требуя разные JRE.

Со временем, процессоры стали многоядерными, счёт частот пошёл на гигагерцы, и снова захотелось чего-то эдакого. Теперь популяризируется виртуализация (http://www.microsoft.com/rus/virtualization/default.mspx). На одной физической машине (со своей ОС обычно) запускается менеджер виртуальных машин со своим набором ОС, драйверов, сред исполнения и прикладных программ. Вот такой вот стек получается, есть куда потратить серверные "терафлопы".

Google уже сейчас предлагает программный стек Android, состоящий из OC Linux, виртуальной машины Dalvik и среды исполнения Java… и всё это — в мобильном телефоне.

Господа, а что дальше? Будет ли внедряться полная виртуализация (эмуляция процессора другой архитектуры)? Того и глядишь, через пару лет на ARM-нетбуке будем запускать x86 Windows 7, а под ней Office 2015, написанный чисто под "кроссплатформенную" среду ".NET".