Eric Sink has an interesting piece about MeWare, ThemWare, and UsWare. The basic idea is that one way of categorising software is by who uses it:

  • MeWare: only the developer
  • UsWare: the developer, among others
  • ThemWare: people other than the developer

I think most programmers can see what Eric’s getting at there. If you’ve ever worked on, say, a piece of software used exclusively by people in a different department of the company you work for, you know how hard it can be to ensure that the software actually meets those people’s needs.

However, I took issue with one particular thing Eric says.

I consider the concept of MeWare to be somewhat new. Simply put, MeWare happens today because today’s developer tools are so amazing. I would never have written ESBMA if I had to do it in C against the Win32 API.

Well, I suppose that’s one way of looking at it. But another is that, on other platforms, MeWare is extremely prevalent, and has been for decades. Unix people are utterly accustomed to writing little programs to accomplish common tasks. Kernighan and Pike’s classic book The Unix Programming Environment is in large part about how to convert interactively composed, one-off shell pipelines to a permanent part of your toolset, probably inside your ~/bin directory. And that book was published more than 20 years ago.

None of this requires advanced developer tools. Note that Kernighan and Pike were advocating doing this sort of thing on hardware that we’d barely consider toys nowadays: 16-bit PDP-11 processors with a 64-KiB address space.

I agree with Eric that writing software with only yourself in mind is a useful thing to do. (The software that runs this website is a case in point.) But I strongly disagree with both the idea that this has only recently become possible, or that it needs advanced developer tools.