Wednesday, July 19, 2006

Why free software exists: Part 1

Modifiable software

In the most basic sense software is a computer program that assists us at doing a task. For e.g., MS Word is software that allows you to write documents; Adobe Photoshop is software that allows you to edit image files, and so on. Software is inherently flexible; which means changing/adding some feature (for e.g. adding a spell checking feature to your plain text editor) only requires change in the program's source code. The source code is actually a file which contains instructions telling the computer what to do; but however it is in a language that we human beings can read, provided we know the language; the computer cannot understand this language. The source code is converted into computer readable format (or machine language) so it becomes easy for the computer to carry out the instructions. This is where things like the compiler and the assembler come into play. The compiler reads the source code; and if the code is free of errors it translates the file to assembly language. Assembly language is another language which intermediates our source-code-language with the machine's language. The assembly language converts assembly code into machine readable format. This format is usually in 1s or 0s; and it is commonly referred to as the binary system or machine code. The machine code is bundled into a unique file called an executable (.exe).

We cannot do much with an exe file, except run the application. Because it is machine code; we don't read machine code. But incidentally this is the way most software applications are distributed. The problem with such software applications comes when you want to change something. Most software products that are sold by companies go through a life-cycle called the software life cycle. At one-point in this cycle the product is upgraded: certain new requirements are added, some are removed, and so on. This is also called evolution. What happens during evolution is that the developing team (which may consist of entirely new members or members who have worked on the product before) pool together and incorporate new suggestions given by people. They may have to work with the original source code which they already possess. Then the story is the same as before when the product was created from scratch

So if you wanted something to change or be added we have to be virtually dependent on the original developers of the software. You don't have the freedom to change it if the product is proprietary-licensed. Nor, can you seek other developers (from a different company) to rectify/evolve the product. Because they don't have the source to work with. I guess this is one limitation of proprietary software packages.

If you wanted to help a friend with adding a feature or fixing an existing feature wouldn't you want to do it? Even if you are a good developer, you can't possibly read machine code! This is freedom that doesn't come with the software package. And usually these software packages are known as proprietary software; proprietary because it comes along with a proprietary license. This license usually says you cannot distribute or make copies of the software. If you do then you are violating the licence; you may be arrested or tried in court!

A proprietary license has another issue: what if you somehow got hold of the source code? What if you were able to modify the software source code? What if you could have the power to change the software functionality yourself? I guess it wouldn't be a morbid problem if you've used it for yourself. The problem comes when you distribute the software. Once this issue reaches the hands of the concerned company who had created the software could claim that their intellectual property right has been violated and thus you can be punished for that.