I'm an experienced Java programmer but I'm just starting out in the world of freelancing. I've built up a fairly large collection of home-made Java libraries over the years, and I'm not sure of the best way to use them in the world of freelancing. Clients usually expect to receive full source code for everything. I'm not too worried about sharing the source code of my libraries, but the package naming is a problem. The way I see it there are 3 / 4 possible options:
Give them only a compiled JAR of my libraries, using my normal package name. This is the simplest solution, but like I say most clients want full source code.
Give them the complete source code for my libraries using my normal package name. I really don't want to do this because when they edit the library they'll be forking my package, and effectively making their edits in my name.
Give them the source code but rename the library package to a name that relates to the client. This would be an awful lot of work, it would potentially make future maintenance a nightmare, and of course I don't have the right to use the client's domain name in the first place.
Some other option I haven't thought of.
I really don't know what the best solution is. Can anyone out there give me some advice?
You would deal with this on a case-by-case basis. There is no single option that meets all situations effectively. You could provide the source code to a client without having to alter package names. This is their code then and they are free to make any changes that they want. If they make any changes to their code, it does not affect you in any way.
If you provide them the source code and rename it to match whatever makes the most sense for the client, then that is fine as well. As long as you are in contract, this should not be a problem for you. When the contract ends, it does not matter to you.
If you think that your code is valuable enough to warrant only providing a JAR file, then that is fine too. You may not be able to use this code with some clients then.
If you make the code Open Source with a GNU-based license, this is most likely the best option.
Joined: Jun 08, 2012
Making the code open source is something I had considered as well, but I don't want to place additional usage or attribution requirements on the client. Even the modified BSD license would place attribution requirements on the client.