PC DOS 1.0, but Not Quite
os2museum.com
os2museum.com
More amazing is the fact that the original developers probably weren't exerting great effort in size-optimising them either, unlike demoscene productions, and yet they're still extremely tiny.
Now we have operating systems that go out of their way to automate away everything and present it in real-time with multitasking and custom graphical elements everywhere, while also supporting many more protocols and hardware interfaces - wireless networking, GPU APIs, etc. The biggest growing pains seem to be past - things went from simple and stable to complex and unstable in the 1990's and then to complex and stable but insecure now. There's a lot of room to mature all of these features, but there aren't as many novel ones.
.EXE programs have loaders that handled the segmented memory and could access much more, up to the 1MB of memory space. That loader of course made .EXE programs larger than .COM.
This is incorrect. A COM program had to fit its code and static data into 64K, but it could access as much RAM as existed on the machine.
A related misconception is that the segment registers in COM programs had to have all the same value. This is incorrect as well, as the program once loaded could reset them to any value.
Eventually I overcame laziness though, and started to study the EXE file format, which, AFAIR, does not have a "loader", (as Shorel suggested) but just a header describing the layout of the file. I think EXE files tend to be larger, just because they can be larger.
Minus 256 bytes at the beginning for the Program Segment Prefix (hence why every .com assembly listing usually starts with ORG 100h).
edit: I can load it over 4G on my phone though. Wonder why they would ban a random Japanese ISP?
I found DOS to be incomplete and demanding where it need not be. A lot of time was wasted on config.sys and autoexec.bat with the install disks treating you as stupid.
Is int 18h the [intended] coincidence then?