Cosmopolitan.

C(++) en Cosmopolitan

Je kunt een DOS programma schrijven en die compileren als een .com bestand. Niets bijzonders, zou je zeggen. Maar wat nou als je een DOS programma schrijft dat tegelijkertijd ook in de BIOS kan uitgevoerd worden, omdat het aan eisen voldoet, zoals een Magic Number. En ook nog eens compileerbaar is door andere besturingssystemen via allerlei trucks? Dan heb je een APE. Ofwel: Actually Portable Exectable. De bedenker hiervan heeft zelf een blog geschreven hoe dit werkt.

Maar met alleen die handigheidjes begin je niet zoveel. Je wilt namelijk ook bijvoorbeeld dingen kunnen aanroepen. Dat kan je doen met *tadaa* Cosmopolitan.

Je kunt het zelf proberen. Ik zou even naar GitHub gaan en de README.md lezen. Het zou mooi zijn als het je lukt. Ik heb het op mijn Macbook geprobeerd en dat ging niet helemaal lekker. Op mijn Linux computer gaat het in één keer goed!

Wat mij nog wel is opgevallen, is dat als ik op mijn Linux computer een wat complexer programma wil uitvoeren, het programma met Wine wordt uitgevoerd. Dit kan opgelost worden met het commando:
sudo sh -c 'echo -1 >/proc/sys/fs/binfmt_misc/status'

Wat is een .com bestand?

Een COM-bestand is een uitvoerbaar programma dat kan worden uitgevoerd door MS-DOS en Windows. Het wordt opgeslagen in een binair formaat en lijkt op een .EXE-bestand, maar verschilt doordat het een maximale grootte heeft van ongeveer 64 KB en geen header of metagegevens heeft. COM-bestanden worden vaak gebruikt voor het uitvoeren van een reeks instructies, terwijl EXE-bestanden worden gebruikt voor volledig ontwikkelde programma's. (Bron)

Maar uiteindelijk geldt wel: je kunt elk bestand wel uitvoeren, ongeacht de extensie. En hier zit dus de catch: ondanks dat met Cosmopolitan gecompileerde executables met .com, is het in principe een DOS programma, maar hoeft dat niet per se.

Cosmopolitan projecten

Er zijn ook al wat mensen bezig geweest om wat moois te maken met met Cosmopolitan. Neem bijvoorbeeld een Cosmopolitan versie van SDL 2. Kan je ook GUIs maken voor verschillende besturingssystemen! (link)