Niníes de la retrocompatibilidad

Hace un par de días estuve leyendo un artículo en el que John Carmack comentaba cómo Direct3D es ahora una mejor API que OpenGL. Venga, que el comentario no viene de un desentendido del tema.

Pero lo que hace que yo hoy me siente a escribir este post son las siguientes palabras que dijo Carmack en la entrevista

Microsoft had the courage to continue making significant incompatible changes to improve the API, while OpenGL has been held back by compatibility concerns

A ver, ¿no les trae a la cabeza otra API famosa de Microsoft? digo, ¿una tal WinAPI? Una de las grandes “maravillas” de esta API es la retrocompatibilidad. Cualquier cosa programada para Windows 95 que soporte limpiamente la Win32 podrá ejecutarse en Windows 7, incluso cuando los sistemas, incluso sus núcleos mismos, han cambiado.

Muchas veces he discutido con amigos y colegas este tema: ¿por qué soportar semejante rémora y no mejor hacer un borrón y cuenta nueva a algo serio, escalable, limpio? La respuesta viene casi siempre en los mismos términos: cuota de mercado. Microsoft no puede permitirse que todo el software hecho hasta el sol de hoy deje de funcionar; simplemente deben tratar de que cada actualización sea lo más suave posible y que los usuarios no se planteen nuevos entornos (¿o vamos a recordar el caso Vista?)

Hay una empresa con experiencia en este tipo de transiciones: Apple. Cuando pasaron del Mac OS 9 al Mac OS X, todo, absolutamente todo el sistema era nuevo: un núcleo híbrido entre UNIX y Mach, nuevo entorno gráfico, APIs totalmente nuevas, etc. Y eso que Mac OS no contaba en ese entonces ni con una fracción de la cuota de mercado que tienen ahora (y que sigue siendo ridícula si se compara con la de Windows). Tuvieron que mantener un soporte de segundo plano para las aplicaciones viejas (el llamado Classic), luego vino el soporte de dos APIs en paralelo: Cocoa (como la nueva y buena), y Carbon (como la API antigua), y por último Rosetta (para dar compatibilidad a los antiguos procesadores PowerPC). Les ha costado 7 versiones del sistema y casi 10 años lograr deshacerse de todo eso. Y repito, no tenían casi cuota de mercado. Imagínense lo que tendría que hacer Microsoft. No quiero ni imaginármelo.

¡Pero lo están haciendo con los juegos! Bueno, en parte. Las versiones de DirectX tienen soporte para algunas versiones más antiguas, pero básicamente por empaquetar las antiguas APIs junto a las nuevas. Además, los juegos no son lo mismo que grandes sistemas empresariales. Un juego se termina (se “pasa”), y se busca otro; a lo sumo se juega de nuevo en un día nostálgico o para rememorar aquellas épicas luchas a 320×200 píxeles. Pero no, un sistema empresarial puede permanecer años instalado. O bueno, que se lo digan al BBVA, donde al menos en el 2006 vi perfectamente cómo el sistema de gestión debía ser ejecutado dentro de una máquina virtual ejecutando Windows 3.1. También podemos recordar lo que le ha costado a las empresas actualizar sus “estables” Windows XP.

No, no es un tema fácil. Pero si Microsoft lo hubiera hecho en su momento (yo creo que XP hubiera sido el momento perfecto, dado que fue cuando el núcleo del NT se hizo realmente popular), ahora estarían navegando en aguas muy diferentes. Apple ve ahora los resultados de sus esfuerzos y el sacrificio de los desarrolladores: un sistema moderno con APIs modernas (aunque históricamente sean mucho más viejas), fácilmente actualizables, flexibles.

Estoy convencido de que Microsoft no hará un “deprecation” oficial de sus APIs. No, sinceramente no lo creo. Más bien creo que seguirán una estrategia basada en la evolución tecnológica: el software viejo muere, se deja de usar, la gente se olvida de él. De esta forma, llegará el día (quizás como regalo por el 70 cumpleaños de Bill Gates) en el que puedan anunciar que Windows ha decidido dar un paso adelante en la su modernización y comenzará a dejar de soporte a las APIs antiguas hasta las incluídas en el Windows 98 ;).

2 comments

  1. La verdad que viéndolo de ese modo, desde el punto de vista de avances, estoy de acuerdo con hacer borrón y cuenta nueva, porque de verdad que es un lastre pesado traer toda esa compatibilidad encima, lo mismo pasa con los procesadores, los cuales tuvieran unos cuantos millones de transistores menos si solo estuvieran diseñados para ejecutar programas de la SSE3 para adelante! (por mencionar un “instruction set” que de paso ya esta viejito)

Comments are closed.