De oudste GUI-applicatie die nog steeds draait op Windows 11

Eerste onderzoek

Gezien de uitstekende achterwaartse compatibiliteit van Windows, verwachtte ik dat het antwoord indrukwekkend oud zou zijn. Helaas kan Windows 11 geen 16-bits Windows-programma's zelfstandig draaien, omdat 64-bits Windows geen NTVDM heeft. We zullen dus iets moeten vinden uit het vroege NT-tijdperk.

Ik herinner me dat ik deze vraag een tijd geleden op een anoniem forum heb gesteld, waar iemand me wees op Win32s en suggereerde om een vroege releaseversie daarvan met FREECELL.exe te zoeken.

Dat is precies wat ik heb gedaan, en tot mijn verbazing draait FREECELL.EXE met een wijzigingsdatum van 22 februari 1993 volledig en speelbaar op de nieuwste versie van Windows 11, zonder enige wijzigingen.

Op het moment van dit bericht is dat een applicatie van 33 jaar en 8 maanden oud, wat indrukwekkend genoeg bijna net zo oud is als ikzelf. Ik dacht toen: "cool", beschouwde het mysterie als opgelost en vergat het kort daarna weer. Maar om redenen die ik niet kan verklaren, kwam deze vraag onlangs weer in mijn hoofd en besloot ik deze keer dieper te graven om te zien of ik iets nog ouders kon vinden.

Verdere inspanningen

Tijdens het doorzoeken van oude Windows-versies op het Internet Archive vond ik enkele vroege NT 3.1 pre-release-versies die veelbelovend leken. Het belangrijkste probleem leek echter ofwel incompatibiliteit met het huidige executable-formaat, ofwel API-wijzigingen die later in de ontwikkeling zijn doorgevoerd.

De vroegste versies uit 1991 gebruikten een concept-PE-formaat dat niet compatibel is met modern Windows. Builds tot medio 1992 gingen uit van de cdecl-aanroepconventie in plaats van stdcall voor Windows API-aanroepen, waardoor argumenten twee keer zouden worden verwijderd, als volgt:

push hwnd          ; 4 bytes aan args
call [ShowWindow]  ; Win11 ShowWindow is stdcall, eindigt met "ret 4" en verwijdert ze
add  esp, 4        ; de aanroeper uit 1992 verwijdert ze opnieuw

Dit zou begrijpelijk genoeg ervoor zorgen dat het programma crasht.

Er was echter één applicatie die mijn aandacht trok, afkomstig uit Build 347: CDPLAYER.EXE, gelinkt op 16 november 1992. Tegen die tijd was de aanroepconventie hersteld, maar de andere programma's in die build crashen in hun gebundelde C-runtime. CDPLAYER.EXE voorkomt dit door de crtdll.dll van het systeem te gebruiken, en Windows 11 levert nog steeds een crtdll.dll in SysWOW64.

Als je het programma start, krijg je een melding dat er geen CD-ROM-station aanwezig is, omdat mijn computer er simpelweg geen heeft. Maar je kunt een kleine DLL (cdemu.dll) gebruiken om er een te emuleren met neppe audiodata en het programma daadwerkelijk audio te laten afspelen.

Best cool voor een programma dat bijna 34 jaar oud is!

Wat als we valsspelen?

Eerder noemde ik dat 16-bits programma's niet meedoen omdat ze niet langer worden ondersteund. Maar als je wilt, kun je iets als otvdm gebruiken om oudere Windows-applicaties te draaien.

Kijk bijvoorbeeld naar deze volledig speelbare versie van REVERSI.EXE gedateerd op 15 november 1985, afkomstig uit Windows 1.01, die draait op Windows 11.

Hoewel het gebruik van otvdm voelt als valsspelen, vond ik het wel leuk genoeg om in dit bericht op te nemen.