[ipxe-devel] any details about the state of KEEP_IT_REAL?

Michael Brown mbrown at fensystems.co.uk
Tue Jun 12 11:49:10 UTC 2012

On Monday 11 Jun 2012 18:40:39 Klaus Espenlaub wrote:
> we're working on updating the PXE support in VirtualBox to iPXE, and had
> to realize that the KEEP_IT_REAL support is broken. Does anyone know how
> far away it is from working state? Didn't find any information in the
> ipxe mailing list except
> http://article.gmane.org/gmane.network.ipxe.devel/66 - funnily again
> talking about VirtualBox.
> It's the only relevant mode of operation which conforms to the PXE spec
> (so I was rather surprised that it's not working). It's vital for many
> DOS/Windows based or completely custom professional deployment solutions
> which expect the PXE stack, especially UNDI, to work from real mode, V86
> mode or 16bit protected mode.
> So if iPXE wants to replace both Etherboot (which is also broken in this
> respect) and Intel PXE in VirtualBox this apparently otherwise unused
> feature will have to be resurrected. We're aware that this means kicking
> out any feature which isn't vital, and that's not a concern since in the
> worst case the people who need a more feature rich iPXE build can
> replace the ROM image, or use the simple one to bootstrap a build over
> the network which has everything enabled.

In the many years since I first implemented KEEP_IT_REAL, this is the first time 
that anyone has expressed any substantial interest in it.  I have personally 
never come across a deployment product that requires KEEP_IT_REAL.  Even the 
most internally convoluted (Tivoli, which uses VM86 mode and ring 1) manages 
to work with iPXE as-is.

I have only ever encountered one NBP that would require KEEP_IT_REAL: the PXE 
loader from one of the BSDs (might have been OpenBSD).

Support has been allowed to wane since no-one seemed interested and nothing 
seemed to actually require it.  However, I've been fairly strict in retaining 
a memory model that would allow it to be resurrected; hence the (otherwise 
artificial) separation between void * and userptr_t.  The build architecture 
introduced to handle EFI (and later Linux-native binaries) is also designed to 
accommodate a KEEP_IT_REAL platform.

Resurrecting support should be reasonably straightforward.


More information about the ipxe-devel mailing list