Несколько лет назад я присутствовал на встрече разработчиков, где один из участников задал, казалось бы, простой вопрос: «А какой фреймворк выбрать для написания десктопного приложения под Windows?»

Воцарилась мёртвая тишина. Спустя какое-то время, кто-то предложил WPF. Ещё один человек назвал WinUI 3. Третий упомянул Electron. В итоге беседа ушла в сторону, и ответ на поставленный вопрос так и не был дан.

В этой статье я буду говорить о причинах той воцарившейся тишины, поведав историю, которая началась тридцать с лишним лет назад.

Если вы в течение десяти секунд не можете ответить на вопрос «Какой подход будет оптимальным для разработки UI на платформе X?», значит, эта платформа сильно заплутала на своём пути. Пора тормозить.

Последний раз, когда для Windows можно было дать конкретный ответ

В 1988 году Чарльз Петцольд выпустил книгу «Programming Windows» объёмом 852 страницы. Это была инструкция о том, как писать программы для Windows с помощью API Win16 на C. И среди огромного объёма материала она содержала одну важную вещь: целостный и уверенный ответ на вопрос о том, как правильно писать приложение под Windows. В бизнесе мы называем это «стратегией».  

Появившийся следом интерфейс Win32 был уже масштабнее, но всё такой же связный и последовательный. Циклы сообщений, оконные процедуры, GDI. Сама ментальная модель была странноватой, но зато целостной. Петцольд всё объяснял. Это была своеобразная формула F=MA для Windows. Простая. Мощная. Вы её осваивали. Использовали. Добивались успеха.

Ясность — ваш друг! Одна ОС, один API, один язык, одна книга. Не было никакого комитета, который бы спорил о применении альтернатив на основе управляемого кода. Был только Win32 и Петцольд. И всё работало. Это была физика, а не химия (когда что-то работает только для этого элемента таблицы Менделеева. Только при определённом давлении и определённой температуре. И только, если Луна находится в седьмом доме Юпитера).

Далее же мы наблюдали показательный пример того, как компания с умнейшими специалистами и огромными ресурсами может в течение тридцати лет творить несуразицу,* оптимизируя продукт не под те задачи. Иначе говоря, это был пример того, как умнейшие люди делают глупые вещи.

*Прим. пер.: в оригинале автор использует оригинальный термин boof-a-rama. По тексту он переведён контекстуально в соответствии с предполагаемым смыслом.

Объектно-ориентированный делирий (1992—2000)

У Win32 были реальные ограничения, поэтому в Microsoft сделали то, что делали всегда: к моменту конференции разработчиков они приготовили некое новшество. Несколько новшеств.

В 1992 году было решено завернуть Win32 в C++ с помощью библиотеки MFC. Win32 сам по себе выглядел невзрачно, а в одеянии MFC он будто нарядился в смокинг, сшитый из других смокингов. Потом появились технологии OLE, COM, ActiveX. Ни одна из них не являлась настоящим фреймворком для GUI — это были компонентные архитектуры — но они проникли во все уголки разработки под Windows, создав такой уровень когнитивной сложности, после которого даже Кьеркегор покажется Хэмингуэем.

В конце девяностых я прослушал целый доклад на конференции, стараясь понять разницу между документом OLE, объектом COM и управлением ActiveX. Я весь час смотрел на выступающего с недоумением, будто у него изо рта торчал крысиный хвост.

Microsoft продавала не целостную историю, а технологические примитивы, предлагая разработчикам разбираться с ними самостоятельно. Это был ключевой доклад конференции, по сути, о бардаке — для компании было важнее впечатлить публику ярким выступлением одного из директоров, нежели обеспечить реальную пользу для конечных потребителей или разработчиков.

PDC 2003 и видение, которое утонуло само в себе

На конференции PDC 2003 Microsoft презентовала Longhorn — поистине одну из самых убедительных технических концепций, какие компания предлагала разработчикам. В её основе лежало три столпа: WinFS (реляционная файловая система), Indigo (унифицированная система коммуникаций) и Avalon — позднее WPF — векторная подсистема UI с аппаратным ускорением на GPU и управляемая декларативным языком XAML. Разработчики оказались потрясены демонстрацией возможностей Avalon. Это было правильное видение.

А ещё, как его описал Джим Аллчин во внутренней записке от января 2004, это была неповоротливая, тяжёлая «свинья».

К августу 2004 компания объявила о полном перезапуске разработки. Было решено начать с переписывания кодовой базы Server 2003. После перезапуска руководство выпустило негласное распоряжение: «никакого нахрен управляемого кода в Windows!». Весь новый код писался на C++. Как результат, WPF включили в Vista, но сама оболочка ОС продолжила использовать старые решения.

После этого инцидента у команды Windows возникла к .NET стойкая неприязнь, которая сохранилась надолго. Они считали, что ставка на новый фреймворк с управляемым кодом привела к самому позорному провалу в истории компании. Эта неприязнь породила внутреннюю тринадцатилетнюю войну между разработчиками Windows и командой .NET. В конечном итоге WPF осталась не у дел, Silverlight загнулась, UWP не взлетела, и в экосистеме GUI возник тот хаос, который мы наблюдаем сегодня.

Silverlight: паттерн закрепился (2007—2010)

WPF вышла в конце 2006 года. Проект был выдающимся — здесь вам и XAML, и рендеринг на GPU, и реальная привязка данных. Если бы только в Microsoft сделали на нём уверенную ставку и хорошенько вложились, исход мог оказаться совсем иным. Но вместо этого компания в 2007 году запустила Silverlight — облегчённый плагин для браузера, который должен был составить конкуренцию Flash. Он был кроссплатформенным, элегантным и лёг в основу Windows Phone. К 2010-му году этот фреймворк уже выглядел как решение, за которым стоит будущее функциональных клиентских приложений.

Вот только позднее на конференции MIX 2010 представитель Microsoft, отвечая на вопросы, сказал, что Silverlight больше не рассматривается как кроссплатформенный стандарт и предполагается только для Windows Phone. Компания свернула в сторону HTML5. Причём команду Silverlight об этом не предупредили. И разработчики, которые выбрали его в качестве основы для своих бизнес-приложений, тоже узнали об этом повороте только из конференции.

Так что Silverlight оказался загублен не техническим провалом. Сама технология была в порядке. Его убило стратегическое решение, о котором разработчики узнали последними.

Запомните этот паттерн. Он ещё повторится.

Паника вокруг Metro и война двух команд (2012)

На тот момент компания Apple продала 200 миллионов iPhone, а их iPad начали отъедать часть рынка ПК. Ответом со стороны Microsoft стала Windows 8 с её концепцией Metro. В основу этой версии легла среда выполнения WinRT, ориентированная на сенсорный ввод и намеренно реализованная не на базе .NET. Помните про разногласия между командами? Вот вам одно из их проявлений. WinRT была реализована как нативная среда выполнения на C++, резко отойдя от WPF, WinForms и десятилетий разработки под .NET.

Тогда в Microsoft параллельно развивалось две истории. Команда Windows создавала WinRT, а команда .NET всё также проповедовала идею WPF. Разные подразделения, разные вице-президенты, разные стратегические планы.

В итоге на конференции //Build 2012 разработчики услышали такие тезисы: будущее за WinRT; акцент на HTML+JS; .NET продолжает жить; C++ возвращается; вам также нужно писать приложения под Metro; ваш код для WPF продолжит работать. Это не стратегия. Это этап «Голодных игр», когда шесть команд яростно сражаются за получение вашего внимания.

Корпоративные разработчики взглянули на реализованную в UWP изоляцию приложений, требование распространять их только через Store, отсутствие API Win32, после чего развернулись и ушли. Фреймворк, созданный с целью затянуть их в новую парадигму разработки, был оптимизирован под магазин приложений для планшетов, который так и не увидел свет.

UWP и разрастание WinUI (2015 — сегодня)

В Windows 10 появилась Universal Windows Platform с лозунгом — пиши один раз, запускай на ПК, смартфоне, Xbox и HoloLens. На бумаге всё выглядело весьма заманчиво. Но была одна проблема: Windows Phone умирала, а флагманские приложения Microsoft — Office, Visual Studio, да и сама оболочка — UWP не использовали. Перспективы стали очевидны, хотя вслух их никто не озвучивал.

Когда UWP забуксовала, официальные рекомендации стали расплывчатыми и ситуативными. Используйте UWP для новых приложений; оставляйте WPF для существующих; добавляйте современные API через XAML Islands; ожидайте появления WinUI 3; вообще-то есть WinUI 2, но он только для UWP; Project Reunion всё исправит, вот только мы переименовываем его в Windows App SDK, и он всё равно не заменит UWP полноценно; и так далее…

Умнейшие люди делают глупые вещи. Какое-то броуновское движение в мире технологий.

Project Reunion и WinUI 3 действительно представляют прогресс. Но задайтесь вопросом, откуда вообще взялась проблема? Средства управления UWP были привязаны к ОС, потому что ими полностью владела команда Windows. Ни команда .NET. Ни команда DevDiv. В этом свете Project Reunion стала организационным костылём, преподнесённым как техническое решение.

Вот выдержка из отчёта одного разработчика, который он написал в 2024: «Я прошёл через все постоянные изменения траектории Microsoft: UAP, UWP, замена C++/CX на C++/WinRT без поддержки инструментов, XAML Islands, XAML Direct, Project Reunion, перезапуск WinAppSDK, хаотичный переход от WinUI 2.0 к 3.0…». Четырнадцать лет. Четырнадцать крутых поворотов. Этот человек заслуживает медали и извинений — именно в таком порядке.

Зоопарк без смотрителя

Перечислю все технологии для создания GUI, которые сегодня поставляются с Windows.

Нативные фреймворки Microsoft:

  • Win32 (1985) — по-прежнему в деле. Книга Петцольда до сих пор актуальна.

  • MFC (1992) — C++ обёртка для Win32. В режиме поддержки. Используется в корпоративной среде и CAD.

  • WinForms (2002) — обёртка .NET для Win32. «Доступна, но устарела». По-прежнему самый быстрый механизм обработки форм для ввода данных.

  • WPF (2006) — XAML, отрисовка через DirectX, открытый исходный код. Находится в режиме поддержки, без нововведений.

  • WinUI 3 / Windows App SDK (2021) — «современное» решение. Планы развития туманны.

  • MAUI (2022) — кросс-платформенный последователь Xamarin.Forms. Текущий приоритет команды .NET.

Microsoft web-hybrid:

  • Blazor Hybrid — компоненты .NET Razor в нативном WebView.

  • WebView2 — встраивание Chromium в приложение Win32/WinForms/WPF.

Сторонние решения:

  • Electron — Chromium + Node.js. VS Code, Slack, Discord. Самая популярная технология создания GUI в Windows на сегодня — и Microsoft с этим никак не связана.

  • Flutter (Google) — язык Dart, собственный отрисовщик, кроссплатформенность.

  • Tauri — бэкенд на Rust, легковесная альтернатива Electron.

  • Qt — C++/Python/JavaScript. Серьёзный кроссплатформенный вариант.

  • React Native для Windows — порт мобильного фреймворка Facebook, разработанный при поддержке Microsoft.

  • Avalonia — духовный наследник WPF с открытым исходным кодом. Используется платформами JetBrains, GitHub, Unity — то есть теми разработчиками, которые устали ждать Microsoft.

  • Uno Platform — WinUI API для любой платформы. Ориентированы на развитие WinUI больше, чем Microsoft.

  • Delphi / RAD Studio — всё ещё на плаву, по-прежнему отличается высокой скоростью и используется при создании специализированных приложений.

  • Java Swing / JavaFX — да, до сих пор в продакшене. Корпоративный сектор без них никуда.

Семнадцать разных подходов. Пять языков программирования. Три философии рендеринга. Это не платформа. У меня нет отдельного словарного определения для таких вещей, кроме как цирк.

Выводы

В корне провал любого проекта для разработки GUI был вызван одной из трёх причин: внутренние разногласия (Windows против .NET), объявление на конференции разработчиков, породившее преждевременный интерес к платформе (Metro, UWP) или же стратегический поворот, который подставил разработчиков без какого-либо предупреждения (Silverlight). Ничто из этого не стало следствием технического провала. Сами технологии зачастую были действительно хороши — WPF была хороша, Silverlight был хорош, и XAML тоже. Проблема крылась в организационных моментах.

У вас есть либо Реалистичная теория успеха, включающая весь жизненный цикл продукта — внедрение, инвестирование, обслуживание и миграцию — либо громкое заявление для конференции разработчиков.

Первое называется стратегией, а второе — затяжным цирком.

Стараясь поспеть за каждым объявленным Microsoft нововведением, Чарльз Петцольд написал шесть редакций «Programming Windows». Последняя была посвящена WinRT для Windows 8. Это был 2012 год.

И я его нисколько не виню.

Комментарии (21)


  1. Pcturl
    08.05.2026 09:12

    То, что UI пошёл по пизде в продуктах Microsoft — давно всем известно и очень хорошо заметно:

    Штатные приложения Microsoft Windows 11: Paint > Store > Edge > Photos
    Штатные приложения Microsoft Windows 11: Paint > Store > Edge > Photos

    Только вот компания ничего менять не собирается, её всё устраивает, и это тоже очень хорошо видно по изменениям (их отсутствию) из года в год.


  1. AndreyDmitriev
    08.05.2026 09:12

    В общем всё верно написано. У меня вот прямо сейчас в разработке небольшое измерительное приложение под Windows (оно на Расте написано), выглядит вот так:

    С математикой (Фурье, интерполяции) всё хорошо, но каждый, кто хоть когда-нибудь сам делал вьюпорт для картинки с зумом, скроллингом и метками, регионами интереса, либо графики с множественными осями и аннотациями знает, какая это попаболь бывает местами. Вот казалось бы сейчас ИИ, скорость разработки улетает в небеса, но как-то вменяемых фреймворков, чтобы с WYSIWYG — нет их пока хороших и удобных. Конкретно для Раста есть целая куча всяких разных egui, gpui и т.д., но стоит начать делать приложение как выше, и количество бойлерплейта и "обвязки" просто начинает зашкаливать. Смотрю на Дельфи с нежной грустью.


    1. nerudo
      08.05.2026 09:12

      LabView возьмите ;)


      1. AndreyDmitriev
        08.05.2026 09:12

        С LabVIEW я работаю с середины 2000, и там с интерфейсом всё норм, но ирония в том, что на Расте я теперь пишу быстрее, потому что я могу ему просто сказать "а теперь по вот этому вектору, сделай Фурье, возьми магнитуду и дай мне значение на 10%, до кучи рассчитай частоту Найквиста", и получаю живой рабочий код, а Nigel AI из LabVIEW - это жалкое подобие копилота, он так не умеет. Впрочем тот интерфейс, что выше, взят из NI CVI, я сделал биндинги и наступило почти счастье ("почти" - потому что не кроссплатформенно это), так что "ноги" в общем растут из того же места, что и LabVIEW (декорации у графиков и вид переключателя как бы намекают).


        1. nerudo
          08.05.2026 09:12

          Хе-хе. То-то я и чувствую узнаваемый стиль.


          1. AndreyDmitriev
            08.05.2026 09:12

            Да, я вот тут писал, как там всё устроено.


      1. pvvv
        08.05.2026 09:12

        Чтобы попаболь была не только местами с закатом солнца вручную с графиками/зумом/скроллом, а вообще везде? а месье знает толк ;)

        Досталась как-то в наследство некая измерительная программа где так же решили в качестве гуёвой библиотеки взять даже не labview, а аж labwindows (тот же рантайм но со своим нескушным С89 в качестве языка) - "много всякого говна я в своей жизни повидал, но гаже вот этого ещё не было"(с)

        А для программы @AndreyDmitriev типа как на скриншоте выше, когда надо на лету графики показывать, я бы просто gnuplot позвал с его родным терминалом и зумом/скороллом/..., да немного коряво, что отдельное окошко, но всё равно лучше всякой самодеятельности с графиками.


        1. AndreyDmitriev
          08.05.2026 09:12

          Чтобы попаболь была не только местами с закатом солнца вручную с графиками/зумом/скроллом, а вообще везде? а месье знает толк ;)

          Ну нет в мире совершенства, что уж тут поделать...

           я бы просто gnuplot позвал с его родным терминалом

          Я в курсе, но покажите мне хоть одну современную среду разработки, которая возьмёт gnuplot и позволит набросать интерфейс вот так:


  1. hex_coder
    08.05.2026 09:12

    Оказывается, не только у Линукса всякий зоопарк технологий и фреймворков, но и у винды тоже! и если надо делать кроссплатформенное приложение, то как всегда остаётся Java. Да, ещё развивали Mono/.Net, а также QT. Потом стали развиваться веб-технологии и появился Электрон, приложения на котором будут тащить браузер, даже если надо просто показать одно окно.

    В общем, всё как на картинке про 16 конкурирующих стандартов.


    1. gev
      08.05.2026 09:12

      Думаю, по количеству платформ QT и Flutter вне конкуренции


      1. Kenya-West
        08.05.2026 09:12

        Одно слово - Avalonia


        1. AndreyDmitriev
          08.05.2026 09:12

          Эх, кто бы её к Расту прирастил, наступило бы счастье. На реддите вроде был робкий эксперимент, но кода так и не показали.


    1. Nikita22007
      08.05.2026 09:12

      https://xkcd.ru/927/
      Как множатся стандарты
      Как множатся стандарты

      https://xkcd.ru/927/


  1. Wohlstand
    08.05.2026 09:12

    Вот как ни крути, всё, кроме чистого WinAPI, это костыли и обёртки, из-за которых итоговая масса приожения будет в разы больше, чем его собственный код из-за килотонны зависимостей, которых надо либо доустанавливать пользователю, либо таскать их с собой вместе с приложением. Если я пишу программы под Windows без Qt (который в основном использую на линухах и макоси, а также под винду отдельные сборки), то стараюсь точить под чистый WinAPI, чтобы приложение было максимально компактным и независимым, а также чтобы самостоятельно контролировать совместимость со старыми и новыми системами. Единственный плюс подобных обёрток - упростить разработку и сократить время создания конечного продукта, но, ценой компактности и даже совместимости с конкретными системами.

    Дополняю: лично я больше всего недолюбливаю Electron, из-за того, что приложения получаются крайне неповоротливыми и чрезвычайно прожорливыми, даже не смотря на то, что выполняют жалкий минимум, который легко запихнуть в исполняшку на Чистом Си весом несколько килобайт.


    1. ImagineTables
      08.05.2026 09:12

      Вот как ни крути, всё, кроме чистого WinAPI, это костыли и обёртки

      К сожалению, используя только чистый WinAPI, невозможно использовать все GUI-фичи, поддерживаемые виндами.


      1. Wohlstand
        08.05.2026 09:12

        Ну WinAPI это не только базовый набор, но ещё куча куча различных библиотек в составе, которых тоже можно задействовать, чтобы добраться до нужной фишки. Не спорю, что некоторые подобные фишки сами реализованы на других языках или интерфейсах, и с ними надо стыковаться совсем по другому. Либо базовый WinAPI чего-то НЕ даёт, и это нужно реализовать самостоятельно, программно на голом виджете, хватая вручную события мышки и клавиатуры, и выводя анимацию при взаимодействии с подобными штуками.


        1. ImagineTables
          08.05.2026 09:12

          Как через WinAPI вписаться в оконный композитинг с акриловой кистью? Это спор (в смысле дискуссия), который я ХОЧУ проиграть.


          1. Wohlstand
            08.05.2026 09:12

            В плане, чтобы создать инструмент для графического редактора, или интеграция с графическим планшетом и стилусом? Или тему оформления окна сделать?


  1. Einherjar
    08.05.2026 09:12

    Так целостной концепции ни в одной ос нет. А там где кажется что она есть, казаться так будет (да и в принципе будут мысли о какой то целостной концепции) до первой задачи сделать что то кроссплатформенное или портировать что то.


  1. qvvah
    08.05.2026 09:12

    Есть ешё Sciter если нужен GUI на HTML (жив ли он?) и куча мелких библиотек для GUI, которые в статью не попали. Вообще, у Windows не только с графическим интерфейсом проблемы, но и с другими технологиями, см.

    История программных революций от Microsoft, вкратце:

    Сначала были Windows API и DLL Hell. Революцией №1 было DDE – помните, как ссылки позволили нам создавать статусные строки, отражающие текущую цену акций Microsoft? Примерно тогда же Microsoft создала ресурс VERSION INFO, исключающий DLL Hell. Но другая группа в Microsoft нашла в DDE фатальный недостаток – его писали не они!

    Для решения этой проблемы они создали OLE (похожее на DDE, но другое), и я наивно вспоминаю докладчика на Microsoft-овской конференции, говорящего, что скоро Windows API перепишут как OLE API, и каждый элемент на экране будет ОСХ-ом. В OLE появились интерфейсы, исключающие DLL Hell. Помните болезнь с названием «по месту», при которой мы мечтали встроить все свои приложения в один (возможно, очень большой) документ Word? Где-то в то же время Microsoft уверовала в религию С++, возникла MFC решившая все наши проблемы еще раз.

    Но OLE не собиралась сложа руки смотреть на это, поэтому оно заново родилось под именем COM, и мы внезапно поняли, что OLE (или это было DDE?) будет всегда – и даже включает тщательно разработанную систему версий компонентов, исключающую DLL Hell. В это время группа отступников внутри Microsoft обнаружила в MFC фатальный недостаток – его писали не они! Они немедленно исправили этот недочет, создав ATL, который как MFC, но другой, и попытались спрятать все замечательные вещи, которым так упорно старалась обучить нас группа COM. Это заставило группу COM (или это было OLE?) переименоваться в ActiveX и выпустить около тонны новых интерфейсов (включая интерфейсы контроля версий, исключающие DLL Hell), а заодно возможность сделать весь код загружаемым через броузеры, прямо вместе с определяемыми пользователем вирусами (назло этим гадам из ATL!).

    Группа операционных систем громким криком, как забытый средний ребенок, потребовала внимания, сказав, что нам следует готовиться к Cairo, некой таинственной хреновине, которую никогда не могли даже толком описать, не то, что выпустить. К их чести, следует сказать, что они таки представили концепцию «System File Protection», исключающую DLL Hell. Но тут некая группа в Microsoft нашла фатальный недостаток в Java - её писали не они! Это было исправлено созданием то ли J, то ли Jole, а может, и ActiveJ (если честно, я просто не помню), точно такого же как Java, но другого. Это было круто, но Sun засудило Microsoft по какому-то дряхлому закону. Это была явная попытка задушить право Microsoft выпускать такие же продукты, как у других, но другие.

    Помните менеджера по J/Jole/ActiveJ, стучащего по столу туфлей и говорящего, что Microsoft никогда не бросит этот продукт? Глупец! Все это означало только одно – недостаток внимания к группе ActiveX (или это был COM?). Эта невероятно жизнерадостная толпа вернулась с COM+ и MTS наперевес (может, это стоило назвать ActiveX+?). Непонятно почему к MTS не приставили «COM» или «Active» или «X» или «+» – они меня просто потрясли этим! Они также грозились добавить + ко всем модным тогда выражениям. Примерно тогда же кое-кто начал вопить про «Windows DNA» (почему не DINA) и «Windows Washboard», и вопил некоторое время, но все это почило раньше, чем все поняли, что это было.

    К этому моменту Microsoft уже несколько лет с нарастающей тревогой наблюдала за интернет. Недавно они пришли к пониманию, что у Интернет есть фатальный недостаток: ну, вы поняли. И это приводит нас к текущему моменту и технологии .NET (произносится как «doughnut (пончик по-нашему)», но по-другому), похожей на Интернет, но с большим количеством пресс-релизов. Главное, что нужно очень четко понимать - .NET исключает DLL Hell.

    В .NET входит новый язык, C#, (выясняется, что в Active++ Jspresso был фатальный недостаток, от которого он и помер). .NET включает виртуальную машину, которую будут использовать все языки (видимо, из-за фатальных недостатков в процессорах Интел). .NET включает единую систему защиты (есть все-таки фатальный недостаток в хранении паролей не на серверах Microsoft). Реально проще перечислить вещи, которых .NET не включает. .NET наверняка революционно изменит Windows-программирование... примерно на год.

    Источники: 1 2


  1. ImagineTables
    08.05.2026 09:12

    В конце девяностых я прослушал целый доклад на конференции, стараясь понять разницу между документом OLE, объектом COM и управлением ActiveX. Я весь час смотрел на выступающего с недоумением, будто у него изо рта торчал крысиный хвост.

    Смотрим оригинал.

    I sat through a conference session in the late nineties trying to understand the difference between an OLE document, a COM object, and an ActiveX control.

    Артикль “an” перед “ActiveX control” говорит нам, что это не может быть «управление». Это именно контрол, то есть, говоря литературным языком, «элемент управления».

    А разница очень простая.

    Объект COM — это бинарный (то есть, не требующий виртуальном машины из Java, .Net или браузера) объект, написанный на одном языке, а используемый на другом. Для этого были придуманы роли (интерфейсы) и строгие правила, по которым объекты играют эти роли (как они расположены в памяти, кто чистит стек после вызова и т.п.). Если ты соблюдаешь эти правила и на языке C++, и на языке Паскаль, то объекты (например, хранилище данных или парсер текста или что угодно ещё) можно написать на C++, а использовать в Delphi.

    Если среди играемых ролей есть набор «то, что умеет любой элемент управления по стандарту ActiveX», такой объект COM становится элементом управления ActiveX (например, кнопкой, графиком или полем ввода).

    Если какое-нибудь приложение написано по стандарту OLE (их там, насколько я помню, три, два из которых — стандарт на то, как быть гостем, и стандарт на то, как быть хозяином), то его документы могут содержать вставки с документами чужих (неизвестных) приложений. Например, электронную таблицу внутри отчёта в текстовом редакторе, при щелчке по которой интерфейс текстового редактора незаметно заменяется интерфейсом электронной таблицы. Документы таких приложений и называются «документами OLE». А чтобы соответствовать стандарту, надо уметь создавать объекты COM, играющие такие роли как «чужой документ внутри моего документа».

    Однако, несмотря на придирки, в целом автор прав: с уходом Гейтса в МС развели самый настоящий бардак. А переводчик, в целом, переводит хорошо, и берёт интересные статьи, за что ему спасибо.