My B.Sc. student gave a presentation about her work in progress a couple of days ago. In her research, which deals with the use of free and open source software in software development companies, she discusses the terms "free software" and "open source software" and the interpretation she, as a researcher, puts into the two terms. At the presentation she presented her views of free software with the free software definition, to me and her other advisor, to her examiner and to the dean of the school of computer science (well acting dean of the school).
The free software definition is, for those who do not know it by heart made up of four freedoms which the users of free software have:
After my B.Sc. student presented the free software definition the acting dean of the computer science school had a comment about the free software definition's dimensions. He claimed that there are two dimensions to it. Freedom 0 and 2 make up one of the dimensions and freedom 1 and 3 make up the other. The first one is about using the software, the latter about developing the software. After some discussions about what free software is my student finished her presentation and we all went back to our daily routines.
However, since then I have been thinking about his comment, mostly to understand where he comes from and how he thinks, but also because I used to divide the free software definition into these two parts as well and I realised that I don't do it any more. I wanted to know why I had drifted splitting up the definition into these dimensions as he called it.
Back when I was first looking at and learning about software I was just a university student with no real experience of developing software but as a user I was intrigued by free software and the freedom I had, nobody was trying to control how I used my computer. I didn't really care that much about adapting or modifying the software. Why would I? Free software always fulfilled my needs.
Then I started to grow curious. I started to make small modifications just for the fun of it. I wasn't fixing any bugs and I wasn't really adapting the software to my needs. I just wanted to play around -- just to play around. It was fun, I made some small, insignificant changes to software in various programming languages, changes which I never contributed back because they were only amusing to me or my friends. This was all about me learning to study and modify existing code.
Time passed and I stopped making these small, self-fulfilling changes to the software and started using software and developing other software from scratch. Mostly through school work or for my M.Sc. project. The time I spent on playing around with free software, making these changes, became useful. I could sit and study other software or code and figure out what could be done better or what could be re-used.
Then as time went by some more and I grew older and more confident I began making changes to free software projects which could be useful to others and I contributed them back to these projects. I wanted to help make the software I was using better. This wasn't always coding but sometimes it was and here I am today.
For me, using software is developing software. If I want to run the software for any purpose, I need to be able to study it and adapt it. If the software is to be useful I want to be able to make modifications to it and I want to be able to let others have the software, with my adaptations, with my modifications or just as-is from the original project web site. I can't efficiently use the software if I can't improve it. Therefore, in my view, these dimensions of free software are on the same axis, it is only one dimension but I understand the dean's comment.
What frightens me is that the dean does not fully understand software development and how we learn to develop software. It appears that for him, there is a clear boundary between using software and developing software when for me there isn't. I as a user want to be able to adapt and improve my software and if I want to do it I do not have to go and sit for many years in some university courses to become a programmer or reading books (even though it helps quite a lot). Learning to develop software doesn't only come from reading books and taking tests. Learning to develop takes practice. It's about reading and understanding the software project, tinkering with the code, writing documentation, testing the software, applying new knowledge to ones personal processes, etc.
When we teach people at universities how to develop software we are not teaching them to become developers, they already are, we are teaching them to become better developers. This is what the dean of the school of computer science should understand.
Of course it isn't that clear cut. Sometimes we are developers only because we have the knowledge to develop software on behalf of someone and sometimes we just use the software as-is. But -- that does not justify the division into two distinct dimensions. We're all together going in the same direction.