First alpha release of LReport is out

[2006-04-26]
Release 0.14 of LReport is availiable. This is the first release, which I consider usable. Have a look at lreport.sourceforge.net.

Revision 1.0 of Win32::GuiTest documentation is available

[2005-05-06]
There is still much space for improvements but at least all exported functions are documented.

Revision 0.2 of Win32::GuiTest documentation is available

[2005-04-27]
Revision 0.2 of Win32::GuiTest documentation is available. It is still far from being complete but more and more functions get documented

New design of my website is in place

[2005-04-13]
The site design has changed. I believe that navigation is now simpler. It may happen that some links don't work. If you find such a link please let me know

Writings > Why I am biased towards Open Source

Why I am biased towards Open Source

Copyright © 2004 by Piotr Ka³uski
All rights reserved.

Abstract
In this text I explain why I focus on using Open Source tools rather then closed source:

  • I explain briefly why do I believe that Open Source is more likely (than closed source commercial companies, such as Microsoft) to produce stable software.
  • Although I agree that Windows has it's place on desktops of non-IT professional people, I believe they are of limited use in professional, intensive and mission critical data processing.
  • I point out some factors, which in my opinion helped commercial closed source vendors to strengthen their (IMHO undeserved) position on the marked of professional tools.


This article is by no means an attempt of complete analysis of Open and Closed source. You can find such an analysis in writings of Eric Steven Raymond (ESR) here.

Introduction - I am biased toward Unix and Open Source

While walking through my web site, you will quickly notice that I am biased towards Unix, Linux and Open Source. Does it mean that I consider Microsoft's technology not worth consideration? And do I think that Open Source products are better then Microsoft’s.
Well, as for the first question the answer is obvious – you may like or dislike Windows, but you have to be familiar with them (if you consider yourself an IT specialist). They become de facto operating system standard for desktop computers.
As for the second question, the answer is more complex and I will talk about it more in chapters, which follow.
Comment on terminology:
For some people it may be confusing that I sometimes write "Unix/Linux/Open Source", and in different places I am talking only about Unix or only about Linux. Although it seemed consistent to use "Unix/Linux/Open Source" in  the whole text, I decided not to do it. If I did, it would probably be more confusing than it is now.
Unix is an operating system. Some companies (like HP) distribute their proprietary versions of Unix.
Linus is a free, Unix-like operating system, which is being developed by Open Source community.
Open Source is a way/philosophy of writing software - instead of making the code a trade secret, it is freely available. It allows people to understand how the software is written and allows them to fix the code and share fixes with others.
Open Source philosophy has its roots in Unix-culture. So this is why I sometimes write of Unix/Linux/Open Source as of one thing. But they are not the same. Unix is operating system, Open Source - philosophy. Therefore, in some contexts, I decided that using "Unix" or "Linux" or "Open Source" alone would be more natural.


Is systems' comparison reasonable?

Let me start with quoting Bjarne Stroustrup, a father of C++, on comparing programming languages:

“Several reviewers asked me to compare C++ to other languages. This I decided against doing. Thereby, I have reaffirmed a long-standing and strongly held view: Language comparisons are rarely meaningful and even less often fair. A good comparison of major programming languages requires more effort than most people are willing to spend, experience in a wide range of application areas, a rigid maintenance of a detached and impartial point of view, and a sense of fairness. I do not have the time, and as the designer of C++, my impartiality would never be fully credible.
I also worry about a phenomenon I have repeatedly observed in honest attempts at language comparisons. The authors try hard to be impartial, but are hopelessly biased by focusing on single application, a single style of programming, or single culture among programmers. Worse, when one language is significantly better known then others, a subtle shift in perspective occurs: Flaws in the well-known language are deemed minor and simple workarounds are presented, whereas similar flaws in other languages are deemed fundamental. Often, the workarounds commonly used in the less-well-known languages are simply unknown to the people doing the comparison or deemed unsatisfactory because they would be unworkable in the more familiar language.
Similarly, information about the well-known language tends to be completely up-to-date, whereas for the less-known language, the authors rely on several-year-old information. For languages that are worth comparing, a comparison of language X as defined three years ago vs. language Y as it appears in the latest experimental implementation is neither fair nor informative.”


"The Design and Evolution of C++" by Bjarne Stroustrup.

Please forgive me this long quote. I placed it here because I consider it one of the most important observations in IT specialists’ community. I believe Bjarne’s observation applies not only to programming languages but to other areas of IT. Operating Systems are no exception.
Windows and Unix (Linux) are both mature operating systems. Both have nuances, both have their problems and have their workarounds. In order to compare them on the technical level, you have to be intimately familiar with both of them. Moreover, you have to know communities of users and developers. They are the part of operating system. So from the technical point of view, I don’t feel competent to make a comparison. And I believe, much more people make such comparisons then there are people who really know both systems.
What makes me biased toward Unix/Linux is Open Source philosophy.

Windows vs Open Source philosophy
Let me start from the end. Let me sum up the differences between Open Source and Windows philosophy. Windows philosophy for software development is – do it in a way that your software is user friendly. Do it using the most modern and fancy technologies to make the application look cool.
Unix/Open Source philosophy is – do it right.
And doing something right sometimes means using tools, which are 20, 30 years old. But they are good. Through their whole life they have proven many times that they are good in their task. So there is no good excuse for not using them.
When Microsoft Windows appeared on the marked, for many people they became a symbol of instability. But in IT situation changes. It is much better right now. By NT/2000/XP line, Windows is slowly heading towards stability of Unix/Linux. But I don’t think they will ever rich this level of stability. My personal belief is that Open Source philosophy of software development is more likely to lead to stable products then Microsoft’s and other commercial vendors. What makes good and stable software is sweat and tears of users and developers working on it. Naturally, good design and programming skills are important. But a young piece of software in order to become a mature tool or a library, has to live a long time in real world being continuously used and fixed. And Unix community cultivates using old, well tested tools. Microsoft strives to deliver the software, which is most modern and uses the newest technology. They cultivate using the newest tools currently available on the market. So they deprive their software this opportunity to become mature. When a piece of software approaches maturity, the new product enters the marked, consigning the old to oblivion. So it is not about Microsoft’s particular products, which are unstable. It is about their philosophy in software development. The philosophy, which makes a particular level of stability to be out of their reach. Actually, Microsoft’s products have reached some level of stability. The level, which makes them pretty useful for simple tasks. But again, due to their policy, a particular level of stability is out of their reach.

Windows' and Unix's place in IT
As I said Microsoft tools are pretty good for simple home tasks. They are good for people not professionally related to IT. Regardless if we are Unix fans or haters, we have to face the truth. On the mass market of desktop computers, Microsoft rules. And it is well deserved, because their tools are really user friendly. I don’t believe Linux/Unix community would ever be able to compete with Microsoft on this field (unless Microsoft, in their endless greed will change their licensing in a way, which will push people to desperation). For non professionals, who use computers for fun, Windows is the right choice. Windows is also good for people using computer professionally but to the limited extent. The problem with Microsoft is that their tools fail to deliver the promised value, when it comes to intensive, professional use. It is not that Windows is bad and Unix/Linux is good. They should target different customer groups. Let me use the following metaphor. Think about education and participation in science community. It is about absorbing knowledge. Think of TV. There is a strong demand for its style of giving information. It delivers small amount of information in an entertaining way and it is fine. However, if a person using TV as a main source of information about World, will try to join the academic society he/she will be rejected. He/She SHOULD be rejected. The main source of real wisdom are books.
Microsoft stuff is this TV of IT, which is fine. The problem is, that they insist on taking part in a scientists community. Windows tries to enter and actually entered a marked of professional data processing. In the next chapter I will elaborate on why do I consider this to be a problem.

Misleading promises of commercial Vendors about easiness of their tools
From the very beginning Windows provided many tools for many things – for painting, for text processing and so on. But although they try hard, they cannot enter some areas of professional use. I have never heard about serious Desktop Publishing specialist using Word. I haven’t heard about billing system using Microsoft tools for printing bills. No one implements mission critical software using Access. However, Microsoft and other commercial vendors are storming the not-that-critical areas of IT process, like document flow in the company, infrastructure, testing support tools and so on. Their main marketing tool in that campaign is the misleading promise, that you can do your stuff, without deep understanding of issues related to it. You only need the fancy tool, which will reduce your role to clicking some buttons. My personal experience is that in IT you cannot efficiently operate in a particular area without knowing it. There is an excellent quote illustrating my point. The quote is taken from “Programming Windows” by Charles Petzold and it is about the need to understand Windows API:

“…learning the Windows API gives you vital insights into the workings of Windows that are essential regardless of what you end up using to actually do the coding. Windows is a complex system; putting a programming layer on top of the API doesn’t eliminate the complexity – it merely hides it. Sooner or later that complexity is going to jump out and bite you in the leg.”

"Programming Windows, Fifth Edition" by Charles Petzold

My general advise for IT professionals is this – if someone promises you that his/her program is going to reduce handling of difficult problem to pressing some buttons, freeing you from the need of understanding the problem, don’t believe him/her.
You won’t survive without knowledge!!!
Remember - you cannot do your stuff rightly, when you yourself don’t understand it. And general understanding is not enough. You have to understand it deeply. If you want to implement a maintainable and useful suite of automated GUI tests, you have to understand mechanics of windowing in your operating system. Otherwise you will fail. Fancy capture and replay toys will not save you from the disaster.
If you want to create stable and reliable Windows application you have to understand Windows’ API. AppWizards and sophisticated classes of MFC will not patch this gap in your knowledge.
Unfortunately, many people buy these promises, and they buy the tool. Later they realize that those fancy wizards and windows don’t actually give them what they really need. They try to make manual workarounds of wizards’ limitations and they find that they are either very difficult or don’t exist. But it’s too late. Licenses are bought, money is paid and the time is lost. So they stay with the tool.

The second tool in hands of commercial vendors is the false belief that people using open source software are totally on their own. If something goes wrong, there is nobody to sue and no support. Well, in short: the first point is true. Yes, there is no one you can sue in case of a disaster. But do licenses of commercial vendors really leave space for pushing responsibility on them?
As for the second question, the answer is: it depends. If you choose to use software, which is young and not that many people used that – then, surely, you may find yourself left on your own once something goes wrong. But if you chose a well known and mature tool, with the existing community of users and developers around it, then pretty often you get the excellent support, which you will never get from commercial vendors (unless you are a big consumer and pay REALLY big money for their support). And you get it for free. You can find more about it on Open Source Initiative web page.
 
Shall we catch up with the most recent technologies or shall we simply focus on doing stuff right
I am pretty sure that many people would answer "well... actually the real IT professional does both. That is the way it is in IT today. If you don't do it you die". There is a kind of political correctness in that matter and the answer given above is politically correct one. If you are on job interview in big IT company, I don't recommend you saying something different.
OK, so let me be controversial. You either catch up with the most recent technologies or you are good at what you are doing. You can't do both things at the same time. There is too much going on in IT to be up to date even with the small subset of technologies. I found that I am far more effective when I master one tool for one area (say perl for scripting) then if I keep checking new features given in the still growing stream of new tools.
Of course, you have to maintain a balance. If you push my advise to extreme, you may come to conclusion that people who graduated in 1970-1980 should stick to COBOL and VMS and should try to bite each task with DCL. Of course, you have to listen what is going on and from time consider sharpening your saw. But you should definitely resist the hype created by commercial vendors. We are continuously bombarded by messages that we have to check their new tools if we want to survive. We are told that what we've learned yesterday is not going to have any use tomorrow. Maybe in some branches of IT that's the way it is. But it is definitely not the case in serious data processing where reliability and stability are pretty high on list of priorities.
What I value in Open Source is that it not only provides mature tools, which are worth learning. It also cultivates using well tested and mature tools. Even if they are old and not that fancy nowadays.
Summary (read it before starting flame war with me :))
I hope you now understand, where does my bias towards Unix/Linux and Open Source come from. I want to stress once again, that what I was comparing was the philosophy. Not the design, not the implementation, not the competence of people involved. My comments on stability were based on my experience. I am pretty sure I would be able to find lots of papers proving that Windows is more stable then Unix and probably the same amount of papers proving the opposite. What is important for me is to avoid being classified as a Linux/Open Source zealot. I grew up using DOS and MS Windows. I know there is a community of smart people around Microsoft. I really value writings of Charles Petzold, Matt Pietrek, Steve Maguire, Jeffrey Richter, Jeff Prosize, Jim Robbins and others.
Software development in short and long term is a very complex process. I don’t believe anyone can predict what is going to happen in the future. Nor can anyone give 100% guaranteed answer for the question, which development model is better – closed or open source. There are too many factors to consider, to many data to digest. But considering what I know and what I have seen, I believe that Open Source is more likely to produce stable software. And recent developments in IT seem to prove that.

Further reading
The intention of this text was to explain were my bias towards Unix/Linux/Open Source comes from. This text is by no means an attempt to analyze open and closed source mechanics. There are some excellent writings on the topic. See the recommended reading section on my web site.


*