Everyone can agree that computer software has become orders of magnitude larger and more complex when compared to early home computer software. The first complete non-game application I wrote was a spreadsheet. No, I didn't use a spreadsheet app, I wrote my own Excel clone, or rather in the day I called it my own "Visicalc" clone, complete with recursive algorithms. The entire application and data fit within 64k of RAM on my Commodore 64.
Any modern software developer will tell you that a program that creates a dialog that says "Hello World" will likely be 1MB in size. Modern computers are more complex, modern operating systems are more complex, and that makes even the most simple application more complex.
Complex software requires a complex team of developers to get everything designed, tested and developed. A single application might have dozens of programmers working on it.
The more complex an application is and the more developers working on it, the more chance there is to be bugs that are not found in the initial testing phase. Different segments of the application rely on other pieces in order to work correctly, and those pieces cannot be tested until they are all snapped together.
This is why open source software has a unique advantage. Linux software was designed from the ground up to be interconnected through "pipes" (no, not tubes,) allowing one application to make use of another application without need for special API's or DLL's. One application can automatically pass data to another application this way.
This design allows one developer to build on top of another's work without the need for worrying about interoperability problems. The fact that the majority of popular software tools such as these have been in use for quite some time also means that the bugs, for the most part, have already been rooted out. For example, let's say I want to write a program that takes a large jpeg picture and resizes it to something more easily sent over the web, then email it to a designated email address. By using a combination of Linux utilities already written and in common use, I could simply plug a few "lego blocks" together and have a quick, bug-free solution. First, I'd resize the file using Imagemagick and then mail it using sendmail.
As the tasks our computers perform become more complex, this style of software development allows a team of fewer developers to create more complex applications in much less time. Rather than relying on a proprietary toolkit to provide some of the pieces needed, industry standard tools can be integrated easier and at no cost.
Open source design allows a single developer to build on top of what has already come before to create true innovation. Less time is spent learning a toolkit API or debugging your own code and more time is spent providing new features and innovative designs. And the great part is, the developers that made the tools used in the new application are thrilled to see them used in something new.
This design also allows old tools that are outdated to easily be replaced with newer tools with a minimum change in the new application - or in many cases with no change.
Instead of having a team of a lot of programmers, now we have a lot of individual programmers working as a team. This design model would never work in a traditional software company because in most cases you'd have to wait for developer A to finish application A before you could even start thinking about developer B working on application B.
Open source is about more than just free. It's about more than having the source code. It's about working as a community to produce something new and different. Today, it takes multiple dozens of programmers to produce a spreadsheet application. With open source software as an individual developer I could download tools already existing within an open source spreadsheet and expand or modify them to work the way I see fit, or run on the platform that I desire.
Post new comment