Why I’m an Open Source nerd: An Apology
[epistemic status: an explainer to my friends and family. Nothing new if you already know who Richard Stallman is.]
I often tend towards idealism, which I ultimately end up beating it down with my Realism-Bat (trademark pending). Some ideals are easily grasped. Pursuing the ideal of empathetic communication and well-implemented basic income is understandable to the average lay-person. However, I figured my love Open Source Software and Hardware (software/hardware who’s building-blocks are visible, functional and modifiable without restriction) needed some elaboration and inevitably more scrutiny.
For those that don’t know, Open Source is analogical to posting your recipes online. You could just keep your recipe for yourself and still feed people the results, but posting it online allows other people to see how it works and modify it. Like all analogies, this one has limitations. For example, when you eat something you can usually determine what pieces went into it. You can taste butter or some spice. With code, it’s always a mystery. Additionally, code is more complex than a recipe. There’s no limit to your ingredients. Worse, what works in the author’s oven might not work in yours. Consequently, putting good code on the Internet other people can learn from and use is harder than posting a recipe.
If you’re expecting this article to be a ten-page rant on the technical merits of Windows vs. Linux, I’m sorry to disappoint you. Like CodingHorror, I actually don’t care. My love for Open Source Software is based on a few simple sub-ideals: creativity, ownership, respect for history and understandable explanations.
I want to encourage the creativity of people
When I see something work really well, like a game explaining Cognitive Behaviour Therapy with Neuroscience or an interface for doing math with distributions, my first thought is “how can I re-use and modify the parts I like?” I think everyone should be able to this with everything they see on a computer. This is dependent upon being able to look under the hood of the beautiful thing and mess with the mechanics mechanics meaningfully. For this to happen, the source code must be “open”.
I want people to own things
It used to be that when you bought something it worked and you could use it for whatever and however you wanted. Sometimes it would break, but you could look inside it and fix it. These days, you buy something that has a computer in it, but it’s illegal to modify that computer or the hardware the computer runs on. Even if it’s a life-saving improvement. This isn’t ownership as much as it is buying into a serfdom run by a corporation. I don’t want people to get stuck in serfdoms. I believe human freedom shouldn’t be tied down by the devices you buy.
I think history is valuable
When a company discontinues a product, they often bury it in their archives never to see the light of day again. This loss of work is a tragedy. I don’t want cool ideas to be lost into the sands of time because they weren’t profitable enough. If these companies could open-source the assets they’re no longer using (whether hardware or software), creators could learn from their struggles and revive concepts from their designs in new forms.
Science cannot function without Open Source
When I went to the Kavli Summer School in Cognitive Science I was mildly horrified. I saw the field of Cognitive Neuroscience becoming increasingly more dependent on computation to analyse data, but a horrible understanding of software remained. One of the primary programs for analysing fMRI data was a giant unreadable code-blob with no publicly posted code-base and no shared knowledge-base. Eventually, bugs were found in the software and the results of many studies were put into jeopardy.
Like science, you cannot have scientifically-guided governmental policy without Open Source algorithms. Instead, you’ll get bias-guided policy and end up programs with racist outputs setting bail amounts and dictating where police should patrol.
Humanity cannot afford to have it’s scientific and political fate being guided by algorithms it cannot debate.
I think these goals are valuable, but I also want all of this to be done properly and I realise simply screaming “GIVE ME FREE AS IN FREEDOM OR GIVE ME DEATH” all the time isn’t going to make this possible. Open Source has problems and we have to address them if it’s going to accomplish any of the aforementioned goals.
Sustainability
Like the vast majority of things I love (research, music where musicians work with professional producers to evolve and writing edited by professional editors, free health care), I am deeply concerned about the sustainability of open source for both industry and scientific endeavours.
Community Quality
Friendliness is hard to enforce. Especially when half of the population of your community legitimately have a hard time with social interactions and teaching them to be nice to each other can often just end up marginalising them. That being said, it’s hard to ignore that a lot of the open source community communicate horribly. I have seen dozens of abandoned projects where the last news-post is “I had to quit because I couldn’t handle the assholes anymore”.
Programming is Hard
You have to be a pretty good programmer to get started on the vast majority of Open Source projects. Going from computer user to understanding code to contributing to an Open Source projects has become much easier over the years, but it’s still not a gentle slope. Also, the fact that the best way to contribute to an Open Source Project is to dig down into the code feels really weird to me and I’m not the only one. I dream of a world where code is just one level of abstraction a creator can operate on and they can transition between them. Where the separation between designer and programmer are seen as artificial and unnecessary. It’s an old dream, but I hold onto it anyways.
Usability
Have you ever tried using Git for version control? Did you want to throw your computer out of the window as a result? You are not the only one. Programmers aren’t always super insightful about usability when creating a product, since they’re often mostly creating it for themselves and they lack the insight/training/desire to accommodate less technical folk.
I don’t have answers to the vast majority of these questions. Much ink has been spilled, companies founded and communities rallied. In the meantime, I’ll keep supporting any initiative that I feel pushes in the right direction and I’ve got a few projects that I’m trying to contribute to. I honestly think Online Python Tutor may be the future of programming or at least the future of teaching people to program. Consequently, I’m setting the goal of completing one pull request a month. If this proves too hard, I’ll write another post about my failure and where it stemmed from.