Evolving make

Inventing another “better make” does not make sense. Its better to work with the maintainers of GNU make. I’ve taken a brief look at how make has evolved over the years. Pretty impressive.

Evolution instead of revolution

After defining “a better make”, I’ve had a few people ask me when I was going to show off the replacement tool I was building. Guess what — I’m not building one. I made quite a few sketches of what such a thing would look like if I were to do it all from scratch, thinking of how I would do it, etc etc. I ended up with a design not unlike rake, and the basics of a simple scripting language not unlike miniruby.

Now, it dawned on me rather quickly that going down that path further would eventually lead to a rather broken variant of rake. Besides, rake hasn’t really seen the adoption that I described as the target goal, so I somehow doubt this road would be successful.

This leads me to the conclusion that the best kind of “revolution” I can come up with is not good enough. That leaves evolutionary improvements. Which might often be a better idea anyway.

Looking at make’s evolution

Interestingly enough, GNU make (the most popular one) for the last 5 years or so has had only two active developers who have dutyfully done maintainance over the last few years, but they have not added a whole lot of new features, especially not big ones. The last “sizeable” new feature I could identify as such was the implementation of “if… else if… endif” on May 13, 2005. Most everything else seems bugfixes, optimizations, and additions of new built-in functions. The last really big new thing seems to have been the “job server” which was added on April 13, 1999.

Given such a track record, I wonder how eager these guys are to accept patches constituting big change…we’ll see. They have an issue tracker, a CVS repository, and mailing lists. The only difference with the open source environment I’m used to is the license.

Peeking deep into unix history…

On the GNU make track record, it is really impressive how easy it is to follow and trace back. The changelog (split into three files) goes back to 1988 when make was apparently split off from the RCS tree. Its hard to get the story of its development from before 1988 without actually harassing the authors, though Google Groups help a lot (for example, here is one of the oldest online sources for Cake, the make replacement, and here is version 1.0 of perl, and lets top it off with the initial release of flex).