I'm interested in starting to code the DOS subsystem.

So I am going to list some possible design principles:

Avoid excessive switching from V86 mode and Protected mode.
Limit direct access to system hardware by DOS programs (especially IO).
Must differentiate CPU exceptions and Software interrupts.
Each DOS process would have its own private first Megabyte of Memory.
At least DPMI v. 0.9 support.
Dos API support (Including Long File Name support.)

Possible design additions:
Native handling of DJGPP DPMI programs (I.E. skip DJGPP stub-loader and jump directly to the DJGPP COFF image).
Open GEM GUI API Support.
Bios and Video ROM virtualization.

Additions, subtractions, modifications, or comments anyone?