Ever wonder why Windows and Mac application tend to install and “just work” and Linux applications don’t? Is it because Windows and OS-X is a superior operating system? I think not. When it comes to the raw power of the operating system I don’t think anyone would seriously call Linux inferior. Most experts consider Linux superior. I certainly do. That’s why I run Linux on all my servers. Yet when it comes to installing and running applications in the Windows and Mac world everything generally installs and just works. The user is running the application in minutes. However in the Linux world application rarely just work and often require days to get it right. One has to search Google and consult experts to make any headway at all.
Why is that? I think the answer lies in both the Open Source culture and the economics that drives the development process. Windows and Macs are commercial products. Software is written by people who are paid and the employers expect results. The company has to make enough of a profit to keep the doors open. So to do that they have to make a product worth buying and that isn’t expensive to support.
In the open source world people are generally not paid and often just want to get something working. Once it works they are done with it. It’s not as important to get it working well or to write good documentation and polish the product. Geeks write software for geeks and expect the users to have geek skills or geek friends to help them out. No one is getting paid and documentation consists of typing your error code into Google and hoping to find a discussion list somewhere where someone else who had the same problem has found a solution.
To develop a commercial application it takes about one third of the time to get the product working and two thirds of the time to get it working correctly, add all the necessary features, make things automatic, make the software visually attractive, make the commands intuitive, and develop good documentation. A product is considered a success when the program “just works” and “does everything” that a program is expected to do.
In the commercial world this is necessary because that’s what people want to pay for. If a program is buggy, poorly documented, missing obvious features, requires cryptic commands, lacks menus, has no configuration interface, and has poor or no documentation then the company is going to have to pay people lots of money to answer phones and listen to customers scream at them. Years ago companies learned that they can reduce their costs and increase their sales by getting the software right so that people didn’t need tech support.
I used to have a small software company. I wasn’t a one person operation but I did all the development, documentation and tech support myself. So if I screwed up people were screaming at me. When someone reported a bug or an obvious missing feature I fixed it immediately. My motto was “compiled fresh daily”. In reality it was often several times a day. But if the problem was fixed then people wouldn’t be calling about it. The same is true for documentation. If someone asked a question I made sure it was documented so that the next time they wouldn’t have to call because it was in the manual.
In the open source world no one is generally responsible in this same way. They don’t have a commercial incentive to get it right and therefore they usually don’t. After all, getting it to work is the fun part. Polishing the software and documenting it is that hard part. Why do the hard part if the software runs? If you have a problem join an email list or Google it they say. If there’s no money then there’s no funds to hire professionals to write manuals. You don’t do end user usability testing. You don’t get feedback from your support department. Open Source is a different culture. It’s free, but you have to do more of the work yourself.
Of course this distinction between open source and commercial software isn’t universal. There are Windows programs that are pure crap and Linux applications that are quite good. But you can’t help but to notice that almost all Linux/BDS/GPL/Open Source apps are configured by editing text files and very few have menu options. Windows and OS-X applications almost all use menus and rarely have text file configurations. The difference is that menu based application represent a higher level of polish than non-menu applications. The programmers took the time to make the software easy to use.
To solve this problem we would need to get the same level of expertise into the Open Source world as we do in the commercial world, and somehow do it without money. Sounds impossible, but if you think outside the box and get innovative then “impossible” is just another word for “challenge”. What we need to do is to create a partnership between the right kinds of people. In this case I suggest we bring in the educational system.
Colleges and trade schools are in the business of training students to function in the real world so they can go out and get jobs working for companies who pay them so they can eat. Companies need people who are ready to go to work and have some real experience so they don’t have to educate the employees themselves. And that’s where the Open source world fits in.
Suppose that the education industry partnered up with the Open Source world and had their student work with Open Source projects as a real world learning opportunity? For example students taking courses in technical writing can work with developers to produce high quality documentation for open source software. People training for tech support position could become online tech support for free software projects. These support and tech writers could give feedback to the developers to make changes in order to make the programs user friendly and eliminate confusing features and unnecessary settings.
Additionally people taking computer programming courses and software design courses could also get involved in free software projects to add polish to existing programs. Instead of editing a text configuration file with the VI editor they could have a menu system and a help system that creates the configuration file so the user doesn’t have to learn yet another set of cryptic commands. The documentation folks can work closely with the help desk group so that the manual cuts down on the tech support calls. And the open source developers could learn some skills as well about how to get a program from “barely works” to a finished product and how to learn social skills so that they lose the habit of belittling the end users.
This would be a win/win/win/win solution in that the education world will be able to give their students real experience working on real projects. The student would have real world experience and have something to put on their resume of something they helped accomplish. Employers will have people to hire who are ready to go to work the first day on the job. And the Open Source world will have quality software that doesn’t suck so bad that people won’t use it for free.
All we need now is for someone to spread this idea around and find people to hook up education and open source and make it happen. I’m hoping some schools will read this and pick up on the idea.