The thing is that XMS is only for data. A real mode DOS binary can't put code there: the addresses are out of range. Only the 64kB of the HMA could hold executable code: 1024-1088kB.
XMS allows a DOS app running on a 286 or 386 to store blocks of data above 1088kB, but the programmer gets no more space for their executable at all.
While EMS _also_ gave you lots more storage, but was much longer established, and it worked on an 8088/8086 and didn't need a 286.
If you wanted bigger *programs* then they had to run in protected mode. To do that and access DOS services meant using a DOS extender, and that did mean paying, but it allowed you to have (a theoretical max of) 16MB programs on a 286 PC and 4GB programs on a 386 PC.
(Not that anyone had 4GB of RAM in an x86 PC in the 20th century.)
So, the choice was:
* EMS: runs on anything, highly compatible, only gets you more data
* XMS: only runs on >= 80286, less compatible, only gets you more data
* DOS Extender: only runs on >= 80286, less compatible, but you get up to 25x bigger programs and almost all the restrictions of plain old DOS go away.
Not a tough choice.
If you used Watcom C, you got Tenberry DOS/4G (or DOS/16) for free.
https://web.archive.org/web/20...