Windows 11 ejecuta incluso binarios compilados hace 30 años
(twitter.com/mikko)- El más reciente Windows 11 ejecuta un binario compilado el 18 de agosto de 1993, lo que resalta la compatibilidad retroactiva de largo plazo de Microsoft
- El programa en cuestión es un binario creado hace 30 años al momento de la publicación, y muestra que software antiguo de Windows puede seguir funcionando incluso en entornos modernos
- El punto clave del caso está en la compatibilidad retroactiva: que una nueva versión del sistema operativo acepte sin cambios un ejecutable del pasado
- No se puede confirmar solo con la información publicada si fue necesaria alguna conversión, recompilación o configuración adicional
- La posibilidad de ejecutar binarios antiguos es una señal importante de estabilidad para empresas y usuarios individuales que manejan software archivado a largo plazo
Caso de ejecución de un binario de hace 30 años en Windows 11
- Windows 11 ejecuta un binario compilado el 18 de agosto de 1993
- Este caso se compartió junto con la valoración de que la compatibilidad retroactiva de Microsoft es muy sólida
- La información confirmada se limita a la posibilidad de ejecución y la fecha de compilación
- No se incluyen el nombre del binario, el lenguaje de desarrollo, la forma de ejecución ni si hubo configuración adicional
1 comentarios
Opiniones de Hacker News
Como referencia, también está el artículo de Joel Spolsky: https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost...
Según uno de los desarrolladores de SimCity, había un bug fatal que de casualidad funcionaba bien en DOS, pero se rompía en Windows. Era un bug que reutilizaba memoria ya liberada, y los testers del equipo de Windows, al probar apps populares, descubrieron que SimCity se cerraba constantemente. Dicen que los desarrolladores de Windows desensamblaron SimCity, lo siguieron con un debugger, encontraron el bug y luego agregaron código que verificaba si se estaba ejecutando SimCity para, solo en ese caso, hacer que el asignador de memoria funcionara en un modo especial que permitía seguir usando memoria incluso después de liberarla.
Este tipo de implementación de retrocompatibilidad no me gusta porque es opaca y es una solución improvisada. También se han usado herramientas similares para romper apps de la competencia. Normalmente termina siendo cuestión de ir probando con qué versión antigua de Windows ejecutarlo. Linux tampoco es mejor porque no tiene una ABI estable, y Mac es una mezcla de un Rosetta excelente con apps que se rompen sin razón. Me pregunto si FreeBSD lo hizo mejor. O si esos sistemas operativos “maduros” ya desaparecidos, como VMS, eran mejores.
X, y si lo es, simplemente lo rechaza.Algo así como: ¿por qué sigues ejecutando Xorg? Ya deberías haberte pasado a Wayland.
https://social.treehouse.systems/@marcan/110904454552941656
Raymond Chen lleva décadas aportando una perspectiva interna sobre este tema: https://devblogs.microsoft.com/oldnewthing/
Es interesante que, gracias a la estabilidad general de la API de Windows, Win32/DX se haya convertido, mediante el enorme trabajo de Wine/Proton, en una API “universal” muy estable y confiable en Linux y otros sistemas operativos. Cada vez veo más juegos que abandonan los lanzamientos nativos para Linux y simplemente salen para Proton.
https://sporks.space/2022/02/27/win32-is-the-stable-linux-us...
Esto no es una locura, es el nivel de expectativa normal que uno tiene de una herramienta. Mi martillo todavía funciona perfectamente con clavos que compré hace 30 años.
No se puede construir algo sobre cimientos inestables que rompen la retrocompatibilidad constantemente. Al final terminas pasando más tiempo manteniendo que creando. Luego vuelves a reinventar la rueda, pero desde el punto de vista del usuario la rueda nueva y brillante no necesariamente es mejor. La mayoría del software que uso tiene más de 10 años; algunas cosas todavía se actualizan, otras no, o se fueron a la nube, y yo me quedé felizmente atrás.
Antes creía eso, pero ya no.
Los juegos de Steam que usaban el servicio Games for Windows – Live y que no se actualizaron después de que el servicio cerró en 2014 no se ejecutan en Windows 10 en adelante. Eso se debe a que se eliminaron las DLL de ese servicio. Durante un tiempo la gente lo solucionaba descargando las DLL de sitios de terceros, pero ahora ni eso funciona.
Hay casos todavía más “locos”.
z/OS (también conocido como OS360 o MVS) soporta programas desde la década de 1960, y un DE de IBM dijo que todavía usa un programa compilado alrededor de la época de la misión Apollo 11.
También hay otros sistemas que ejecutan o convierten automáticamente binarios de más de 30 años. IBM i on POWER (i5/AS400) probablemente pueda ejecutar programas de la época de System/38 (1980), y HPE NonStop (también conocido como Tandem Guardian) on X86-64 puede ejecutar o convertir binarios del sistema TNS propietario original de fines de los 70 y del sistema MIPS de 1991.
Es bien sabido que Windows se obsesiona con la compatibilidad hacia atrás, pero las apps de CLI para DOS no se sienten como un desafío tan grande porque el subsistema DOS está prácticamente congelado. Me da curiosidad qué pasaría al ejecutar programas estilo DOS más exigentes o apps Win16 tempranas. Por ejemplo, ¿funcionarían cosas como Zortech C++ de 1986 con el extensor DOS Phar Lap, o Minesweeper de Windows 3.1?
Esto no debería considerarse algo impresionante en absoluto. Debería verse como algo cotidiano y obvio; si no funciona, debería verse como un fracaso muy vergonzoso e inaceptable.
No quiero decir que no sea impresionante según los estándares del caos de 2023. Me refiero a que esa debería ser la norma a la que aspiramos.
Alguien dirá que Linux también es así, y técnicamente es cierto, pero en la práctica es bastante difícil.
La ABI del kernel es estable, pero el resto se acerca al caos puro, y eso se debe a la forma en que normalmente se empaquetan las aplicaciones en Linux. Aunque la app en sí pueda cargarse (si no está en formato a.out), es muy probable que falle al cargar la mayoría de las bibliotecas. Al final terminas necesitando un chroot completo de la distribución Linux de referencia u otro runtime, y ni siquiera es seguro que puedas encontrar un archivo de una distribución de hace 30 años. Además, hay que asumir que la ABI del kernel realmente no cambió ni un bit y que otras interfaces como
/proco/systampoco cambiaron. Creo que/sysni siquiera existía hace 30 años. Si fuera una app de Xorg, no apostaría mi almuerzo a la compatibilidad a nivel de protocolo.Me cuesta entender por qué esto se considera un punto en contra para Linux y no para Windows.
Siempre me dio pena que el software viejo de Mac simplemente dejara de funcionar. Puede que Apple no tuviera opción al migrar a nuevas arquitecturas. Pero el problema es cuando, unos años después, se rompe el emulador.
No debería sorprender tanto este nivel de compromiso que Microsoft muestra hacia sus clientes. Todas las empresas deberían comportarse así.