I've talked before about the sorts of things you should know before you get started writing some code. I've even touched on typical filesystem layouts for projects. And we've talked a little about free software licences and even a bit about being a mensch.

This week I'd like to talk to you a little bit about getting started with a project from the point of view of the more social side of things. It's not often that we start projects with the explicit intention of growing a community immediately, and oftentimes we end up with a community without even really planning it. Thanks to the wonders of the general F/LOSS community, these can sometimes go entirely without hitch; yet sometimes really awful things happen (and no, I'm not going to link to them) and people can end up feeling marginalised, unwanted, or even downright attacked.

I am grateful, on a more than daily basis, that despite being fat, ginger, and gay, I am an able-bodied cis white male and as such I get so much privilege in our communities that I am rarely directly attacked. I try, again on a more than daily basis, to check my privilege and behave in a courteous way. I often fail, and I hope that by acknowledging that I am at least a little better than those who fail and ignore it. I run, or participate in, a significant number of projects. Some have social contracts and codes of conduct such as Debian, and others simply rely on the community members being "nice" to one another.

I have, recently, been considering a code of conduct, or social contract, for my Gitano group of projects; and also I have been considering it in a wider context of my membership in the NetSurf project and in my barely new-born participation in the KiCad project. In my bimbling around, I have encountered numerous options for codes of conduct or social contracts and have whittled my selection set down to The citizen code of conduct, The contributor covenant, and The open code of conduct.

I'm not yet sure which one I'll pick, or if I feel the need to produce my own variant of an existing one. (A good friend reminded me that codes of conduct, or social contracts / covenants are kinda like cryptography -- necessary, but don't go rolling your own unless you're especially skilled in the domain. So if you feel the need to have a different CoC, amend an existing one and remember to feed back to the original authors, just like you would with code). However, one thing I'm sure of is that the next time I start a new project, right alongside the README and the LICENCE/COPYING file, there's going to be a CONDUCT file (or something of similar name) with the relevant covenant or code of conduct in it.

Perhaps next time you start a project, just after you've run git init and just before you git commit your chosen F/LOSS licence, perhaps you too will add a contributor covenant or code of conduct to shape your future community just a little better than it might self-organise otherwise.