惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Proofpoint News Feed
D
Docker
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
L
LINUX DO - 最新话题
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
A
About on SuperTechFans
Schneier on Security
Schneier on Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
IT之家
IT之家
The Last Watchdog
The Last Watchdog
腾讯CDC
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
B
Blog
Recorded Future
Recorded Future
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
T
Threatpost
H
Heimdal Security Blog
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
У Microsoft не было целостной концепции GUI со времён Петцольда
Дмитрий Брайт · 2026-05-08 · via Все публикации подряд на Хабре

Простой

8 мин

24K

Несколько лет назад я присутствовал на встрече разработчиков, где один из участников задал, казалось бы, простой вопрос: «А какой фреймворк выбрать для написания десктопного приложения под 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 год.

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