Home Cooking

Home Cooking

Software, not food, that is. Having cobbled together some applications for Sailfish, I’ve found myself thinking about an old analogy Richard Stallman made about free software.

Sharing Recipes

Below is a segment of Dr. Stallman’s speech in New York in 2001. A link to the full transcript [1] is also below.

Now, some of you may not ever write computer programs, but perhaps you cook. And if you cook, unless you’re really great, you probably use recipes. And, if you use recipes, you’ve probably had the experience of getting a copy of a recipe from a friend who’s sharing it. And you’ve probably also had the experience — unless you’re a total neophyte — of changing a recipe.

You know, it says certain things, but you don’t have to do exactly that. You can leave out some ingredients. Add some mushrooms, ‘cause you like mushrooms. Put in less salt because your doctor said you should cut down on salt — whatever. You can even make bigger changes according to your skill. And if you’ve made changes in a recipe, and you cook it for your friends, and they like it, one of your friends might say, “Hey, could I have the recipe?” And then, what do you do? You could write down your modified version of the recipe and make a copy for your friend. These are the natural things to do with functionally useful recipes of any kind.

Now a recipe is a lot like a computer program. A computer program’s a lot like a recipe: a series of steps to be carried out to get some result that you want. So it’s just as natural to do those same things with computer programs — hand a copy to your friend. Make changes in it because the job it was written to do isn’t exactly what you want. It did a great job for somebody else, but your job is a different job. And after you’ve changed it, that’s likely to be useful for other people. Maybe they have a job to do that’s like the job you do. So they ask, “Hey, can I have a copy?” Of course, if you’re a nice person, you’re going to give a copy. That’s the way to be a decent person.

[1] https://www.gnu.org/philosophy/rms-nyu-2001-transcript.html

Extending the analogy

Stallman is presenting the natural expectation of freedoms that we expect with recipes, and then pointing out that source code is also a series of steps that those freedoms should apply to. This isn’t the full context or content of his speech, so hold your complaints.

The thing I’ve been considering is how my small quest to write applications I need on SailfishOS can be considered another form of home-cooking.

I think home-cooking has a few specific properties that differentiates it from professional-cooking (for lack of a better term): - Made within the limitations of a non-commercial kitchen. - Made with whatever ingredients were on-hand. - Presentation is valued, but not key. - One-course, maybe two if it’s a special occasion. - Made by one or two people. - In an evening or two. Maybe you have a slow-cooker.

If I were to convert these to more software-relevant terms: - Made at no cost. No license required, no Apple Developer Programme. - In any language. It could be Python, or Rust, or Lisp. It’s your meal. - It needs to do the job, not look the part. - The scope should be limited to what is attainable. - Attainable is anything you can feasibly do alone in a short period of time.

Why it works

I like applying the analogy of home-cooking to writing software. Not just because it gives it a rustic charm that computers generally don’t have, but because it humanises an activity that people don’t seem to get. Any computer-adjacent issue in the family seems to end up on my desk because I know computers.

Well, yes. In the same sense I know how to make panac [2]. I don’t intuitively know how to make panna cotta, and whether I do it, or you do it, someone is going to have to search for the Nest camera’s setup instructions and follow them.

[2] https://www.northeastfood.co.uk/panacalty-recipe/

People don’t get programming. They see it as this thing some people do - a specialised skill. The ‘Learn to code and change careers in three months’ crowd certainly don’t help that misapprehension. Programming is a general skill anyone can develop, and that point should be made well before asserting that someone should base their career around it. “Learn to cook” is advice on eating better meals. “Learn to code” is almost always advice on career prospects. It doesn’t need to be.

Free (as in freedom) software is important to me. But too many people ignore select freedoms that define it on the basis of programming being for someone-else to do. That has its place, certainly - I wouldn’t recommend someone without knowledge of cryptography tinker with gnutls. Far better to ask someone with such knowledge to do it. But I do feel there’s a relationship between computer literacy and the success of free software over proprietary software, and I do believe that overcoming not getting programming will be the thing that preserves free software for the coming decades.

If we want that to happen, we need to start pushing programming in the way we push home-cooking. An answer mundanities of the frozen pizza. Not as an answer to “what jobs will exist once ChatGPT replaces parliament”.

Why it doesn’t