I have a client whom makes use of a proprietary banking and transactional gateway through our systems, supplied by a third-party whom provided no source, only details on CLI methods of interface. To facilitate a more accessible method of interface for the software package, I wrote up a fairly comprehensive Perl module which offered a secure and vetted manner by which to interface the package CLI - It should be noted that this module was
not written specifically for the client (nor was the client charged for the use of it), but developed rather as an 'in-house' project to improve the functionality of this system for both ourselves (we also use this banking and transactional system) and our clients.
(Note : The third-party company which supplied the banking and transactional software did also provide a Perl package to interface this script upon delivery, but the script was
so haphazard and poorly written, it was quite obvious that the author did not know a great deal about Perl. This too factored into my motivation to rewrite a more flexible and secure interface API.)
Why is aspect of code quality and product ownership important? Well ...
This system has run smoothly for the last 6-12 months or so, with a few small patches written along the way to improve functionality or clean up return values. Anyhow, today I have been asked for a copy of all template pages and scripts associated with this client's account (this transactional interface was not the only code built for this client) and while the client has little to no programming knowledge or skill, I have no problems complying with this,
except for the banking/transactional interface module. There are a number of reasons for my hesitancy to provide the banking/transactional interface Perl module to this client, some commercial and some simply practical reasons:
- The first reason is commercial - It is quite likely that this client may be looking for a new web host, partly due to their (IMHO, unrealistic) scheduling demands which would explain the request for all files and scripts for migration to the new web hosting provider (there are technical limitations of this which I will explain).
- The second reason is also in part commercial - This banking/transaction interface Perl module was not built specifically for this client, but rather developed 'in-house' for our own interface and use. The client has never been charged any development time for this interface or access fee for use of it (barring those charges levied by the banking gateway itself). It does not seem to be fair or justified to provide this code in its entirity to this client, particularly given that they have little programming expertise or contribution that they could add to the project independently.
- The third reason is more practical than anything else - Even if the client was supplied with this interface module, despite their lack of programming or technical knowledge, they would be very little use for it, as it is dependent upon the proprietary banking and transactional software supplied originally by the third-party in this scenario. Without this banking gateway, the interface module is useless. This banking/transactional gateway is both machine and IP locked so that there is no way, short of reestablishing their account with the banking gateway, that this interface module could be used elsewhere.
So now I am left torn ... Do I provide the client with this code and follow the ideals of open-source which I (purported) believe so greatly in? Despite the fact that it was never written specifically for them and its commerical dependency upon other elements for operation? Or do I refuse to provide this code, supplying them instead with everything but this module? I am especially upset that this scenario involves Perl, a language and community which I have grown to embrace so strongly and appreciate the open nature omnipresence throughout.
This is my dilemma - Your thoughts, ideas and even flames are welcomed as I grapple to come up with the fairest and most just solution for all (including my client).
Ooohhh, Rob no beer function well without!