{"id":168,"date":"2026-04-10T10:03:40","date_gmt":"2026-04-10T10:03:40","guid":{"rendered":"https:\/\/rfog.es\/?p=168"},"modified":"2026-04-10T10:03:40","modified_gmt":"2026-04-10T10:03:40","slug":"que-es-winrt-origenes-modelo-com","status":"publish","type":"post","link":"https:\/\/rfog.es\/?p=168","title":{"rendered":"2006IIP &#8211; Que\u0301 es WinRT (I de II)"},"content":{"rendered":"<p><small><em>Este texto ha sido generado por Gemini 2.5\/3.1 a partir del audio del autor. El contenido y las ideas son \u00edntegramente del autor; la redacci\u00f3n ha sido asistida por IA.<\/em><\/small><\/p>\n<hr \/>\n<p>\u00bfQu\u00e9 pasa, pat\u00e1ticas m\u00edas? Aqu\u00ed vuestro reportero maricharachero de barrio, S\u00e9samo. S\u00ed, hoy toca un nuevo saludo, \u00abpat\u00e1ticas\u00bb, que no s\u00e9 cu\u00e1nto durar\u00e1, quiz\u00e1s un par de programas o quiz\u00e1s este sea el \u00fanico. Hoy nos adentramos en un tema t\u00e9cnico que surgi\u00f3 del audio anterior, donde hablaba de las promesas de Microsoft para mejorar su sistema operativo.<\/p>\n<p>El plan es hablar de WinRT y WinUI 3, pero son dos bestias muy diferentes, as\u00ed que iremos por partes. Empezaremos por la de m\u00e1s bajo nivel: WinRT. Como no lo ten\u00eda del todo claro, le ped\u00ed a Gemini que me preparara un informe en profundidad, y ahora que lo entiendo, os lo voy a explicar. Pero para entender qu\u00e9 es WinRT, primero tenemos que hacer un viaje en el tiempo.<\/p>\n<h2>Un viaje al pasado: Corva, DDE y el nacimiento de COM<\/h2>\n<p>Si sois desarrolladores con solera, de los viejos como yo, seguramente os suenen t\u00e9rminos como Corva, DDE o las aplicaciones COM. Hubo una \u00e9poca en la que se pusieron de moda los sistemas de objetos, una idea adelantada a su tiempo que buscaba que las librer\u00edas y componentes de software se autodescribieran.<\/p>\n<p>La teor\u00eda era fant\u00e1stica: tener una \u00abcaja negra\u00bb universal que un programador pudiera usar sin importar la plataforma (Solaris, Windows, Linux), la arquitectura o cualquier otro detalle. La funcionalidad deb\u00eda ser agn\u00f3stica. Sin embargo, en la pr\u00e1ctica, era una chorrada, porque como programador, sigues necesitando saber qu\u00e9 hacen esas librer\u00edas para poder usarlas correctamente.<\/p>\n<p>Microsoft contraatac\u00f3 a estas tendencias primero con DDE y luego con su propio protocolo: COM (Common Object Model). La idea de COM tambi\u00e9n estaba adelantada a su tiempo, pero a diferencia de otras, esta s\u00ed que funcionaba, aunque con matices importantes que veremos m\u00e1s adelante.<\/p>\n<h2>Entendiendo COM con una met\u00e1fora: el port\u00e1til y el dock<\/h2>\n<p>Para que entend\u00e1is el concepto de COM, olvidemos el c\u00f3digo por un momento y pensemos en una met\u00e1fora. Imagina que tu aplicaci\u00f3n es un \u00abdock\u00bb de escritorio y un objeto COM es un ordenador port\u00e1til. Cuando conectas el port\u00e1til al dock, de repente el sistema se expande: tienes m\u00e1s puertos USB, el cargador se conecta, quiz\u00e1s accedes a un disco duro externo SCSI o a un almacenamiento PCI Express.<\/p>\n<p>El dock (la aplicaci\u00f3n) ya sabe qu\u00e9 interfaces tiene el port\u00e1til (el objeto COM). Sabe que tiene un conector de carga, puertos USB y una salida de v\u00eddeo, y sabe c\u00f3mo conectarse a ellos, alimentarlos y activarlos. A partir de una interfaz base llamada <code>IUnknown<\/code> (Interfaz Desconocida), la aplicaci\u00f3n puede \u00abpreguntarle\u00bb al objeto qu\u00e9 es capaz de hacer y solicitar una instancia de sus funcionalidades.<\/p>\n<p>Lo realmente potente de este modelo es la flexibilidad. Puedes tener cinco modelos de port\u00e1tiles diferentes, pero si todos tienen los conectores en el mismo sitio, puedes intercambiarlos. Un d\u00eda usas tu port\u00e1til con un procesador i3 para tareas sencillas. Al d\u00eda siguiente, necesitas potencia bruta, as\u00ed que sacas el i3 y conectas un i9 con 600 TB de RAM. Los perif\u00e9ricos del dock siguen siendo los mismos, pero el \u00abobjeto\u00bb que los alimenta ha cambiado por completo.<\/p>\n<p>Esta idea, nacida en el mundo de los \u00abobjetos de negocio\u00bb, ten\u00eda otra ventaja brutal: el objeto COM no ten\u00eda por qu\u00e9 estar en tu ordenador. Pod\u00eda estar ejecut\u00e1ndose en un servidor remoto. Tu aplicaci\u00f3n simplemente llamaba al objeto a trav\u00e9s de su identificador y, seg\u00fan la configuraci\u00f3n del sistema, este se cargaba en otro equipo de la red sin que tu programa se diera cuenta.<\/p>\n<h2>La dolorosa realidad: lentitud, memoria y el infierno de la conversi\u00f3n<\/h2>\n<p>Sobre el papel, COM era una maravilla. En la pr\u00e1ctica, ten\u00eda un problema gigantesco: no era lento, era <em>inmanejablemente lento<\/em>. Adem\u00e1s, consum\u00eda una cantidad de memoria incre\u00edble. \u00bfPor qu\u00e9? Por el coste de los \u00abacoples\u00bb, las conversiones de datos entre el objeto y la aplicaci\u00f3n.<\/p>\n<p>Imagina que tu port\u00e1til tiene una salida de v\u00eddeo DisplayPort, pero tu monitor es un viejo VGA. Como no hay un conversor directo, tienes que encadenar adaptadores: de DisplayPort a DVI, de DVI a HDMI, y finalmente de HDMI a VGA. Cada adaptador en esa cadena es un paso intermedio que a\u00f1ade latencia y complejidad. Eso es exactamente lo que pasaba con COM.<\/p>\n<p>Ve\u00e1moslo con un ejemplo de programaci\u00f3n. Supongamos que un objeto COM tiene una cadena de texto \u00abHola Mundo\u00bb en un formato propio: Unicode con un CRC de verificaci\u00f3n y terminada en el car\u00e1cter 67. La interfaz intermedia de COM usa otro formato, los <code>Hstrings<\/code>. Y tu aplicaci\u00f3n, escrita en C++, usa el formato de la librer\u00eda STL, que guarda primero el tama\u00f1o y luego el texto. Para leer esa simple cadena, el sistema tiene que hacer tres conversiones, pasando por un formato intermedio.<\/p>\n<p>Ahora imagina que quieres modificarla. La cosa se pone todav\u00eda peor. Modificas la cadena en C++, lo que crea una nueva asignaci\u00f3n de memoria. Luego, esa cadena modificada debe convertirse al formato intermedio, que a su vez realiza su propio proceso de memoria. Y finalmente, se convierte al formato del objeto original. Si, para colmo, el objeto COM no permite modificar cadenas, acabas de liarla pard\u00edsima.<\/p>\n<p>Para gestionar todo esto, hab\u00eda que definir un \u00abLenguaje de Definici\u00f3n de Interfaces\u00bb (IDL), donde se especificaba con todo lujo de detalles qu\u00e9 pod\u00eda hacer cada objeto, si sus datos eran mutables, qu\u00e9 formato ten\u00edan las estructuras de datos (como el registro de un cliente), etc. Era un sistema propenso a errores y terriblemente complejo.<\/p>\n<h2>An\u00e9cdotas desde las trincheras: cuando Word decid\u00eda explotar<\/h2>\n<p>En la pr\u00e1ctica, usar esto era una aventura. Imagina que quer\u00edas automatizar Microsoft Office desde tu aplicaci\u00f3n. El proceso parec\u00eda f\u00e1cil: importabas el objeto ActiveX de Word, lo instanciabas y le dec\u00edas \u00ababre este documento\u00bb. Y de repente, todo reventaba. \u00bfPor qu\u00e9?<\/p>\n<p>\u00a1Ah, amigo! Quiz\u00e1s una llamada anterior hab\u00eda dejado a Word en un estado inestable en la memoria, y al volver a llamarlo, el programa se romp\u00eda. De esto, mi amiga Penny tiene bastante experiencia. La soluci\u00f3n cl\u00e1sica era reiniciar el ordenador, y entonces, el mismo c\u00f3digo funcionaba m\u00e1gicamente. Aquello era un batiburrillo de diferentes ABIs (Interfaces Binarias de Aplicaci\u00f3n) y una complejidad estructural demencial, especialmente en la era de Windows 95, 98 y 2000.<\/p>\n<p>Este era el mundo en el que viv\u00edamos los desarrolladores. Un sistema potente pero fr\u00e1gil y complicad\u00edsimo. Entender este caos es fundamental para apreciar por qu\u00e9 naci\u00f3 WinRT como su sucesor. Pero los pasos exactos para instanciar y trabajar con estos objetos&#8230; eso os lo contar\u00e9 en el siguiente audio.<\/p>\n<p>As\u00ed que ya sab\u00e9is, no olvid\u00e9is supextros habitualizaros. \u00a1Hasta el siguiente audio!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Descubre los or\u00edgenes de WinRT explorando su predecesor, el complejo y lento modelo COM de Microsoft. Una historia de desarrollo, errores y reinicios.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[53,55,56,54,52],"class_list":["post-168","post","type-post","status-publish","format-standard","hentry","category-podcastexto","tag-com","tag-desarrollo-windows","tag-iunknown","tag-microsoft","tag-winrt"],"_links":{"self":[{"href":"https:\/\/rfog.es\/index.php?rest_route=\/wp\/v2\/posts\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rfog.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rfog.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rfog.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rfog.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=168"}],"version-history":[{"count":1,"href":"https:\/\/rfog.es\/index.php?rest_route=\/wp\/v2\/posts\/168\/revisions"}],"predecessor-version":[{"id":176,"href":"https:\/\/rfog.es\/index.php?rest_route=\/wp\/v2\/posts\/168\/revisions\/176"}],"wp:attachment":[{"href":"https:\/\/rfog.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rfog.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rfog.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}