Когда возникает этот вопрос, меня озадачивает то, что Windows занимается этим с тех пор, как в середине девяностых вышла NT. Именно так NT запускает программы DOS и Win16, и так было всегда. Уровень виртуализации NTVDM запускает 16-битные приложения под Win32 с очень небольшой специальной поддержкой со стороны базовой ОС. Это всего лишь один пример, другой — WINE, который, насколько я понимаю, выполняет довольно разумную работу по запуску приложений Windows поверх набора API, который сильно отличается от набора API Windows. Так что это определенно возможно.
Более уместным будет вопрос, почему Microsoft задумалась об этом. Для того, чтобы вы думали, что это необходимо, вы должны думать о двух вещах. 1) Есть что-то лучшее, чем можно заменить Win32 API и 2) Поддержка Win32 API — это бремя.
И то, и другое вызывает сомнения. В случае обязанностей ядра, таких как доступ к оборудованию, синхронизация и выполнение потоков, процессов и памяти, Win32 API справляется довольно хорошо и в конечном счете весьма близок к тому, что на самом деле делает ядро. Если вы думаете, что есть лучший API, значит, есть и лучшее ядро. Я лично не думаю, что NT нуждается в замене прямо сейчас. По общему признанию, для графики и работы с окнами gdi32 немного долговечен. Но Microsoft решила эту проблему, создав WPF прямо рядом с ним. Затем возникает вопрос о бремени. Ну, конечно, нужно поддерживать два API, но если вы виртуализировали GDI поверх WPF, вам все равно придется поддерживать оба, так что в этом нет никакой выгоды. Преимущество параллельной работы обоих заключается в том, что GDI уже существует и уже протестирован. Все, что вам нужно сделать, это исправить случайную ошибку, в то время как новый уровень виртуализации придется писать и тестировать снова и снова, что требует времени для улучшения WPF.
С точки зрения поддержания обратной совместимости это не так сложно, как кажется. В основном это тестовый вопрос - вы должны проверить, что поведение API не меняется, но опять же - эти тесты уже написаны, так что на самом деле это не дополнительная работа.
Так что, отвечая вопросом на вопрос, зачем им вообще заморачиваться?
person
Stewart
schedule
16.05.2010