[6] The variety of output formats allows retargeting programs to virtually any x86 operating system (OS).
It can also create flat binary files, usable to write boot loaders, read-only memory (ROM) images, and in various facets of OS development.
[7] It also avoids features such as automatic generation of segment overrides (and the related ASSUME directive) used by MASM and compatible assemblers.
It is based heavily on the internal structure of NASM,[8] essentially consisting of a header containing a serialization of the output driver function calls followed by an array of sections containing executable code or data.
In version 0.90, Simon Tatham added support for an object-file output interface, and for DOS .OBJ files for 16-bit code only.
[9] Since this initial version, there has been one major update to the RDOFF format, which added a record-length indicator on each header record,[10] allowing programs to skip over records whose format they do not recognise, and support for multiple segments; RDOFF1 only supported three segments: text, data and bss (containing uninitialized data).