Top 5 Recent Articles
Software Philosophy and Business Model
This posting is an attempt to describe the software philosophy and business model underlying the ideas and software solutions available from my websites. It is not meant to be accurate with respect to the multiple licensing models etc that control the free and open source software world, rather it is just an explanation of what I am doing.
The “Free Software Defintion”:http://www.gnu.org/philosophy/free-sw.html provides the following four essential freedoms to a program’s users:
0. The freedom to run the program, for any purpose (*Freedom 0*).
1. The freedom to study how the program works, and change it so it does your computing as you wish (*Freedom 1*).
2. The freedom to redistribute copies so you can help your neighbor (*Freedom 2*).
3. The freedom to distribute copies of your modified versions to others (*Freedom 3*). By doing this you can give the whole community a chance to benefit from your changes.
Access to the source code is a precondition for many of these freedoms.
Now, the software available from this site, all conform with the above four freedoms. With regards *Freedom 3*, I only have one stipulation and that is any changes are made available to me to fold back into the original code _if I see fit_.
In addition, if any of the algorithms or source code (modified or not) occur in a derived product then I am given some sort of accreditation in line with the Creative Commons by Attribution license on this site.
While there are a number of business models for distributing free and open source software – FOSS – eg service, distribution with value add, etc. This site conforms to no one single model.
My business model or approach is based on a simple business model that starts with my creating the opportunity for a dialog with a customer through helping customers, via free tips, algorithms, suggestions and working software solutions (indicative or thoroughly tested), to solve spatial problems within their IT.
The hope for me is that these free tips and tricks etc, *may* turn into consulting for payment as these things demonstrate my ability sufficient to start a dialog with respect to services for payment. This is a _hope for service_ / _cheap marketing_ model.
Two types of work may arise for which I am engaged:
1. To work on something unrelated to the original solution or suggestion eg database design, tuning, application development, systems review or audit, etc.
2. To work on extending, improving etc an existing function, or creating a new function for an existing package of software functions eg TSQL, MySQL, LINEAR package, T_GEOMETRY Objects, GeoRaptor (Java).
Finally, in the past I have given everything away in the hope that someone, somewhere might have found my code solved a problem and wish to let me know by making a donation. That didn’t work. Now, a donation is asked for before download.
The donation is “thank you” for all the hours I have put in to the software “product”: the product itself is not purchased.
Software Source and Quality
Sometimes I too use algorithms from external websites. (This may or may not require conversion from one language to the other.) Where the algorithm is copyright free with no requirement to acknowledge its source, the algorithm *may* appear in my packages with no acknowledgement. If acknowledgement is required then it will normally appear in suitable comments withing the code.
Some of my software uses existing FOSS software such as GeoTools or Java Topology Suite (JTS). This use is obvious within the source code and their use should comply with their license requirements.
Production Quality Code
I do not claim that any of the downloadable code is production quality and will work in all situations (eg a lot of development is done in projected coordinate space and not geodetic space). Most code is a one-off working out of a potential solution to a problem (often I see “use cases” that the original algorithm missed and either correct the original posting or leave it until another day or if a user contacts me). Having said that I do try to comprehensively test the algorithm via unit testing, documentation writing and other techniques. (For example, the CENTROID package is well tested not just by myself but by many people overseas trying it out on data far more complicated than I possess – a good example of how I hope/expect our dialog to work.)
In addition where an “installer” is provided it is not warranted to work in all situations or provide the features of something like an MSI. They are a thin “wrapper” showing one method for “installing” the components of a solution. If an error occurs then the installing person should be capable of working out why; where an error occurs, support for the installer is part of the download so please contact me.
As I have said in other situations, production quality status is something that the user of this software should ascertain for themselves within the application they are developing for production release. In other words: you create a test plan to ensure that the code passes your quality parameters.
I put many, many hours into writing functions. I do so without any payment whatsoever. Occasionally I get emails that say something like:
“Your Parallel function for Oracle is really neat. I need it for PostGIS: please provide me with a version.”
Most of the time I do not have such a version. If I did I would have posted it to the relevant blog on my site. Also, I often cannot simply drop what I am doing and do a conversion (from Oracle to PostGIS or SQL Server Spatial is not that difficult). What I prefer is if you find yourself in this position do two things:
1. Ask if such a version exists;
2. Be willing to offer your time to test such a version if it does exist;
3. If it does not exist, offer to do the initial conversion yourself and ask if I would be willing to help if you get in to difficulties (I am always willing).
If you are not willing to “help me, help you” then you will just have to wait till that time in the future when I think such a conversion might help me drum up a bit of work.