What does the N in nmake stand for?

Raymond Chen

Raymond

The Visual Studio toolchain comes with a tool called nmake. It processes files in roughly the same way as the traditional Unix make tool. Why is it called nmake instead of just make?

Rewind back to the late 1980’s. The Microsoft languages toolchain¹ included a make program which we will generously describe as vaguely inspired by the Unix make tool: It processed files that looked like Makefiles, but its dependency calculations were nowhere near as sophisticated as the original Unix make program. As a result, you had to play games with the order of evaluation in order to get everything built in the correct order.

This woefully inadequate make program was the source of much dissatisfaction. A developer was selected to reimplement make from the ground up using a clean room design, working only from the makefile specification without any access to the Unix source code.

To distinguish the new version from the old and busted version, she gave the new version the name New Make, or nmake.

It’s a tribute to the success of the new version that everybody has forgotten that there was an old and busted version to begin with.

Bonus chatter: What about MASM? What does the M stand for?

That one’s easier. The M stands for Macro. It’s the Microsoft Macro Assembler. What made it different from plain old ASM was the fact that it supported macros.

¹ The name Visual Studio wouldn’t come onto the scene until a decade later.

Raymond Chen
Raymond Chen

Follow Raymond   

6 comments

Comments are closed.

  • Avatar
    Kasper Brandt

    I’m curious about the need for a clean-room reimplementation – Microsoft did license Unix in the form of Xenix, couldn’t they have based it on make from that?

    • Avatar
      Joker von Doloh

      There is an old and venerable tradition of “no standard or clause in a standard has a divine right of existence” approach to writing software. Why get it right the first time if you can write it slightly wrong and maybe fix later?

    • Avatar
      Erik Fjeldstrom

      There are three potential possibilities that I can think of: 1. The licence didn’t allow for Microsoft to use UNIX software outside of its Xenix distribution; 2. The code was too UNIX-centric and would take longer to port than to rewrite; and 3. Microsoft made its `make` tool prior to Xenix being in the picture. Of course, the actual reason is likely something completely different!

      • Avatar
        Kasper Brandt

        We can rule 3. out right away – first version of Xenix was in 1980 so it definitely existed by the late 1980’s.
        2., the source for make from Unix V7 which Xenix was based on in available at https://github.com/dspinellis/unix-history-repo/tree/Research-V7/usr/src/cmd/make. At a glance it doesn’t seems like there’s much unix specfic to it. Maybe a bit of work to replace the fork/waitpid/exec stuff in dosys.c.
        1. Might be a possibility. The details about the licensing can probably be found somewhere in the mess that was the SCO Group lawsuits.

  • Avatar
    Stefan Tucker

    “It’s a tribute to the success of the new version that everybody has forgotten that there was an old and busted version to begin with.”Those of us who had to use it haven’t forgotten. 😉