The Object Module Format (OMF), used by most DOS development tools, and eventually displaced by COFF/ELF in the 32-bit world, is quite old. It is a somewhat strange format because of its age, and it is quite complex, both because it was designed for the segmented 8086 architecture and because it evolved over many years.
The LINK.EXE linker supplied with DOS 1.0 (1981) used OMF as the input format and Microsoft’s development tools (MASM, Pascal, etc.) produced it. Just about all major 16-bit 8086 compilers use OMF by default. OMF must be at least as old as DOS then.
Wikipedia claims that OMF “was originally developed by Intel in 1981” and bases the claim on the fact that Intel published an 8086 OMF specification in 1981. Anyone actually reading that specification will wonder why a specification supposedly developed in 1981 and published that year is already at version 4.0.
The answer is of course that OMF is several years older than that and was likely developed closer to the mid-1970s than to 1981.
First of all, OMF was clearly not developed for the 8086; it was developed for the 8080/85 first, and adapted for the 8086. That is why the 8080 OMF records have numbers starting with zero and 8086 records have numbers starting with 80h. In 1981, an 8080/85 version of the OMF specification was released alongside the 8086 one.
It is probably true that OMF was not publicly documented before 1981 because until then, only Intel’s development tools used it. In other words, there was not much point in understanding the details of the file format when only Intel’s own tools produced and consumed it.
Except when there was: OMF was not used just for object files that only exist at an intermediate stage of the development process. It was also used for relocated “absolute” object modules meant to be burned into a PROM and so on.
For example this Intel document from 1977 describes the “8080 Absolute Object File Format” which is obviously a subset of OMF. The document number is 9800183B, suggesting that it’s not the first revision of the document. This document shows that OMF is not only older than 1981 but also older than the 8086 (1978). On page 4, the document explicitly mentions that the same format is also used for relocatable modules and tools working with absolute code must reject such modules.
None of this is news for readers of this blog. The use of OMF by Intel’s late 1970s tools was mentioned before. It can be shown that Intel’s pre-1980 development tools produce OMF files that can be understood by much newer tools without any real trouble.
Pinning down exactly how old OMF is may unfortunately be impossible. Not enough tools and documentation have survived. For actual surviving tools it is easy to verify whether they produce OMF (like ASM86 V2.0) or not, but dating the tools is problematic because ISIS-II (the most likely host OS for those tools) had no timestamps on disk files. ASM86 V2.0 is most likely from 1979, given that it includes 1979 copyright messages but not 1980 ones. Which conclusively proves that not only is OMF older than 1981 but so is 8086-specific OMF. It should be safe to assume that the missing ASM86 V1.0 (likely from 1978) also used OMF.
Even where old Intel tool documentation survived, it is often not clear whether the tools produced OMF object files or not, since the format was effectively internal to those tools and therefore Intel wasn’t particularly motivated to document it.
Chances are that OMF was used with the initial batch of Intel development tools for the 8085, which was likely released in 1976. So far, we have the aforementioned 1977 document clearly showing OMF usage; OMF is very likely a year or two older than that, having been conceived at some point within the first ten years of Intel’s history.