I almost don't have free time, but, anyway, when I can, I have a look at the Computer Graphics market and look for software from all niches: researches, open source projects, free or commercial programs. We don't learn just from books, periodics, articles and our own studies and practices: see what other people are developing can teach us as well.
Very recently, I downloaded a relatevely well known open source graphic software to have a test in the newest version with kind of 1.5MB. Trying to install it, I got a very disapointing message: "... requires the X framework ..." just before the installer abortion. Here "X" replaced the name of a software package that, no matter if it's free for now, comes from a COMMERCIAL company.
So, trying to get the software ready to use yet, I downloaded a ~ 2MB executable from the company site. You can't imagine my surprise when I realized that I had just downloaded a remote installer. It has shown me a licence (by the way, not very good for the user) and told me that I would download nothing less than 66MB. YES, 66MB OF LIBRARIES AND ENVIRONMENT SOFTWARE to use an absolutely not advanced CG program. How can it make any sense ?????
This aparently small episode really bothered me and reminded me how many "open source" softwares use free but commercial softwares to make things easier. Also there are several open source softwares that depend on big and heavy libraries to use just a small part of it. I remembered how many free softwares are made over tons of other free softwares (libraries or not) like black boxes, even if these lower level softwares are without any improvement for years. They have all the source, but this "control" sensation can be very illusory: eventually nobody will be able to mantain that code, but the original coder.
By the way, my experience as a developer have shown me that most open source libraries have NO useful documentation for developers, neither merged with the source code itself. I know some very well documented open source softwares, but unfortunately they are rare.
In fact, most programmers see open source software as a chance to get a free lunch: free, (with some luck) good pieces of code to prevent them from code the hard parts of a new software. I'm not against software reuse at all, but, if you are a programmer, probably you know 95% of developers never ever have a look at the source of these open programs/libraries they catch over the Internet. And worse: if something goes wrong, like an unexpected bug or a misunderstanding, they simply try to find other open software (unless if a question in a forum can solve their problems in a few days).
Suppose you develop a software trusting in a non-trivial library (free or commercial). What about if you find a bug in this library or your program has an unexpected behavior? What about if you need a non implemented feature? And if the library doesn't work in your new environment?
Maybe you think all of this is fool, because you just use free software from big organizations or from a large community. If so, then here comes the more important question: how will your program have any competitive differential if the hard part of your software is exactly the same one used by hundreds or thousands other programmers around the world? Novice developers usually are very optimistic, but very experienced ones know that sometimes these questions have bad answers. (Obs: when talking about a software that should strictly implement a standard or protocol, worry about differentials could make no sense, since the software has a good performance and has no bugs.)
I don't make everything from scratch just to learn and prove my researches. I want to:
- dominate the science and the technology I use to develop;
- understand everything around that matters;
- have tools as powerful as I can provide;
- be able to extend any part as I desire.
And I don't want to:
- use what I don't understand: I don't like "magic";
- marginal dependencies;
- black boxes;
- face bugs that would force me to study code from others for weeks and weeks to (maybe) fix it;
- don't be able to make a feature because I don't know how to improve a lower level software;
- be forced to make things the same way everybody makes.
Well, Computer Graphics is my business and I make Picture to People from scratch. I don't think eveybody must do everything from scratch all the time. In my case, tackle all the challenges from the very low to high level is the best way to produce a software having the power I intend. Anyway, my knowledge needs to be very deep and make everything is a very good way to achieve high improvement in theory and practice.
Leonardo C. de Almeida - P2P developer