Healthier way to open source your code

By admin
Open source was about sharing the code with fellow developers, learning new skills, and having fun. Somehow, it became for many a threat to their mental health, and an unpaid job.

Multi-million
CARDINAL

corporations take advantage of

thousands
CARDINAL

of developers working for free around the globe. And on top of this, we have a generation of developers who demand that open source maintainers fix their issues for free.

Why open source is failing for me

I’ve been struggling with my open source projects for

years
DATE

. I used to enjoy writing code, and learned a lot of things developing these projects, and not just coding skills. However, eventually, I burned out solving other people’s problems and trying to maintain projects that were too big for a single person working in his free time.

What I expect from my open source projects

I enjoy coding much less than I used to but I still have a few projects that I work on for myself, and I’d like to keep the code open for several reasons:

Tooling: GitHub for hosting code and documentation, npm for sharing libraries among several projects, continuous integration, semantic versioning, and so on.

Portfolio of projects that I could use as part of my résumé.

However, there are many things I’d like to change:

Working with users and contributors: answering questions, fixing bugs, reviewing and merging pull requests.


Constant
PERSON

anxiety caused by unread notifications.

A feeling of guilt caused by unanswered issues, unmerged pull requests, or missed releases.

Being a subject of entitlement and toxicity of users.

Having a

second
ORDINAL

, unpaid job.

And, in general, interacting with strangers on the internet.

I’ve tried to reduce user expectations before with the

Powered
ORG

by you badge I was adding to projects I wasn’t actively maintaining, but it wasn’t enough. A few other approaches I found: The

three
CARDINAL

Fs of open source development and Don’t ask me license.

This time I want to go further and give myself the freedom to work only on projects and features I use myself, and ignore everything else. Essentially, I only want to share the code, not my time or my mental capacity.

Curiously, the

MIT
ORG

license already says that:

The software is provided “as is,” without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.

I’m not good with reading this kind of legal language, so I asked

Chat GPT
PERSON

to summarize it in peasant

English
LANGUAGE

:

The software is given as it is, with no promises that it will work perfectly. If something goes wrong when using it, the people who made it can’t be held responsible for any problems or damages.

Totally agree!


One
CARDINAL

way to get there

I think I found a good solution for my projects that was inspired by

Brett Cannons
PERSON

’s article and

Twitter
PRODUCT

discussion with

Dmitry Belyaev
PERSON

:

Clearly state the project status. Convert all open issues to discussions. Block the creation of new issues. Unsubscribe from all notifications.

Let’s talk about each step in greater detail.


1
CARDINAL

. Clearly state the project status

This is the explanation I came up with:

This isn’t a conventional open source project. It’s a personal project that is developed openly. It has been developed with a single user in mind — me, and only has features I use myself.

I adopted an open source development model, including things like hosting code on

GitHub
ORG

, npm packages, and semantic versioning, because it makes it easier for me.

The code is provided for free according to the

MIT
ORG

license (see the

License.md
PERSON

file in the root of the repository), but the social interactions between project users and maintainer(s) are restricted.

I don’t look at the issues and discussion, however, you’re free to use them to talk to other users, share workarounds for bugs, etc.

I appreciate pull requests with bugfixes and documentation improvements, if they are concise and well structured. I may look at them and merge them

one day
DATE

, but no promise.

Contributions of new features will most likely be ignored. I don’t have the time or emotional capacity to review and later maintain them.

I can’t promise that the project will evolve the way you want it to, or that it will evolve at all. However, you are free to fork the project, I won’t feel bad.

And please don’t at-mention me anywhere, that blue dot makes me too anxious.

R’amen,


Artem
PERSON

I add it as an announcement in the project’s Discussions on GitHub. Then I pin it and lock the thread.


2
CARDINAL

. Convert all open issues to discussions


Firstly
ORDINAL

, I create a new Discussions category on GitHub — “Bugs”, so I can move all bug reports there.

Then, I label all open issues, so I can convert all issues labeled with a certain label to discussions of a certain category.


3
CARDINAL

. Block the creation of new issues

This is something that I’ve learned just recently but that changes everything: we could disable the creation of new issues on GitHub without hiding existing ones, so people could still google them and possibly find answers to their questions. We could also redirect folks to the new discussion page when they try to open a new issue.

To disable the creation of new issues, add an issue template at .github/ISSUE_TEMPLATE/config.yml like this:

blank_issues_enabled : false contact_links : – name : Get help url : https://github.com/sapegin/mrm/discussions/new?category=q-a about : > If you can’t get something to work the way you expect, open a question in our discussion forums. – name : Report a bug url : https://github.com/sapegin/mrm/discussions/new?category=bugs about : > If something is broken in the project itself, create a bug report.

In this issue template, blank_issues_enabled option does the magic of blocking the new issue page, and contact_links option defines the buttons that appear when the user tries to create a new issue. We could put a link to any site here, not just GitHub, for example Let me

Google
ORG

that for you.

The last thing I do is ignoring all notifications in the project, even when someone is explicitly mentioning you. Unfortunately, this is the only way to save ourselves from all kinds of toxicity and bullying in the issues.

Instead of the default “Participating and @mentions”, choose “Ignore”:

Conclusion

I think I found a good compromise that would allow me to work on my personal projects in public, and allow users (if there will be any) to help each other. This approach also keeps all the existing issues accessible and googlable.

I hope this will be enough for me to feel calm, and I won’t have to remove all my work from the internets (this has happened before) or unpublish all my npm packages (this has happened too).

Thanks to

Dmitry Belyaev
PERSON

,

Margarita Diaz
PERSON

.