The two can Co-Exist
Looking around the internet you could believe that open source software development, and commercial software development, are opposing forces that can never meet or work well together. All experienced software developers know this is simply untrue, and yet the myth seems to perpetuate anyway.
By being careful, and being keeping with the spirit of the freedoms represented by the open source community. It is possible for open source developments to benefit commercial software, and commercial developments to benefit open source software. In the almost two dacades that I’ve now been involved in software development both open source and commercial; I have never found a conflict between the two ideals that couldn’t be solved in a way that helped everyone.
Understanding the Types of Open Source License
The first thing you need to understand is that not all open source licenses are equal. There are primarily two kinds of open source: copyleft and permissive. For commercial software development I find it easy to divide the copyleft licenses into “strong copyleft” and “weak copyleft”. Let me cover the three categories briefly here:
Strong Copyleft
When a software system or library is placed under a Strong Copyleft licenses the author is indicating two things:
- He wants others to be able to use the code he has produced.
- He feels the code produced has value enough to ask others to share their own changes to the code and share systems using the code under the same terms.
The most prominent Strong Copyleft licenses are: GPLv2 and GPLv3.
Strong Copyleft licenses are sometimes described as having a “viral” affect. This is due to the fact that any derived work has to be distributed under the same license terms. In the spirit of the license a derived work is usually intended to include software that references or links to Strong Copyleft software libraries as well as altered versions of the original. This means for example you can only use GPL code in your commercial application, if you are happy to now distribute your commercial application under the terms of the GPL.
Personally I would describe Strong Copyleft licenses as the least friendly for commercial software development and many commercial development companies have to avoid it to meet the IP desires of customers and business owners wanting software developed.
Weak Copyleft
When a software system or library is placed under a Weak Copyleft licenses the author is indicating three things:
- He wants others to be able to use the code he has produced.
- He feels the code produced has value enough to ask others to share their own changes to the code under the same terms.
- He is happy for the library to be used in closed-source products.
Weak Copyleft licenses are most often used for libraries. The author wants bug fixes and enhancements added back to the library so it can continue to improve, but doesn’t care about how you license the software that utilises the library.
The most prominent Weak Copyleft licenses are LGPLv2.1, LGPLv3, MPL, and MS-PL.
Weak Copyleft licenses are mostly about encouraging you to share fixes and enhancements to core functionality and keeping those fixes and enhancements “free”. It does not generally have the same ”viral” affect as strong copyleft licenses because software that references or links to weak copyleft software libraries as not intended to be considered derived works. This means you can use LGPL code in your commercial application, and distribute your main software under any license you want, however any changes you make to the copyleft library must be distributed under the original copyleft license.
Personally I would describe Weak Copyleft licenses as very friendly to commercial software development. It encourages you to get benefit from somebody else’s effort, and simply asks for improvements to be shared in return.
Permissive
When a software system or library is placed under a permissive licenses the author is indicating three things:
- He wants others to be able to use the code he has produced.
- He’d like some credit for the work he has put in.
- He is happy for the code to be used in any future open source or closed source application.
The most prominent permissive licenses are BSD, MIT, and Apache.
Permissive licenses are about preventing wasted effort while people to reinvent the wheel. The functionality of the code is shared freely for open source or commercial use. There is no “viral” affect, and you do not need to contribute changes back to the original author or project team, although this doesn’t mean you shouldn’t.
Personally I would describe Permissive licenses as very friendly to commercial software development. It encourages you to get benefit from somebody else’s existing effort rather than wasting time reproducing the same functionality. In exchange usually all that is asked for is acknowledgement of the codes origins.
Keeping the Spirit of the Original License Choice
Its important to understand that open source licenses work within the restrictions of the existing copyright framework. This differs slightly country to country, and generally only forms contracts between people code or software is “distributed” to. If you are not careful you can get caught up in questions of “can I do this with license X?” or comments “I don’t have to do that because license Y says you are not entitled to it”. This is not what the open source community is about. I believe that as well as keeping to the letter of the licenses, you should honour the spirit of the license regardless of the “additional rights” awarded by copyright laws in your country.
If you take a GPL library you want to use, and try and come up with ways to use the software “indirectly” to avoid putting your own code under the GPL, stop and think again. The code you want to use was shared by the author because he wanted to see enhancements to it shared too. You may not want to share your innovations., you may not like the GPL. But that was the intention of the author and you should honour it or choose not to use the GPL code.
Likewise don’t think that because you upload copyleft software you developed to a web server you didn’t “distribute” it so you can keep the source closed. And don’t create a “wrapper library” around an LGPL library where you add your new functionality so you don’t have to share it. This isn’t the intention of the author when they let you use their code, and you shouldn’t abuse their intentions for your own gain.
If a product is dual licensed under copyleft and non-copyleft licenses, don’t constantly push the boundaries of what you can do with the copyleft version, contribute to the funding of the library or software by buying a license so it can continue to improve.
Giving Back
There are many ways to give back to the open source community as an commercial software developer. Some are really simple but under commercial pressures are often ignored.
1. If you fix a bug in a library, no matter what license its under, submit the change back to the author or project team.
2. If you make minor enhancements that are generically useful, submit them back to the author or project team.
3. Don’t contribute incomplete changes or changes specific for your needs only back to the author or project team. These changes usually carry no reusable value and can waste the project’s time tidying them up for inclusion.
4. If you create a library or tool because you couldn’t find the one you needed in the market, and its not something you are wanting to commercialise on its own, make it available under an open source license you are comfortable with so others don’t have to repeat your effort.
5. If you create a useful program, library, or tool; consider duel licensing a “community” edition under a copyleft license. Yes its true some developers and organisations won’t honour the license, but generally those people would have broken your commercial license terms if they had a chance too. This dual licensing can be particularly useful for libraries as it can attract the attention students and others keen to learn your libraries or software, and this can in time become a major source of paid license users in the future.
6. Even if you are working on an open source project, don’t change the license of code from permissive to copyleft by adding enhancements and fixes under your project’s copyleft license rather than the original permissive license. This practice has long been a point of contention between advocates of permissive licenses and those using their code in copyleft projects. The overall project can still be copyleft, while honouring the spirit of the license for permissive code you use and giving back under the same license.
Commit Pitfalls
Here are a few of the pitfalls that can happen if you’re not careful combining open source software with commercial software products.
1. When you use an open source library don’t assume the author will carry on enhancing it in the future, and don’t assume someone else will fix the bugs. Many open source projects are maintained in people spare time, and so every day some projects go stale as project teams move away, or change direction. If you use an open source library in your commercial product, remember that you must plan to be able to maintain it in the future.
2. Always check the license before using an open source library. Is it compatible with the IP requirements of you and your customers? Does it have an explicit non-commercial use clause? Its even worth checking this if you think you “know” the license the project is under. Its not uncommon for exceptions or additional clauses to be added on top of standard licenses.
3. Don’t expect you can open source a dying product to “hand over” maintenance of it a community. Be aware that the original author or team of an open source product, always end up the major contributors to that project long term.
4. Don’t assume because you didn’t pay for something, its cost is zero. You still need to integrate the software or library into your solution, and you still need to train developers on its code base so you can maintain it within your SLAs.
5. Don’t dismiss a GPL library until you’ve checked the license. Some projects prefer the use of the GPL over the LGPL but add explicit exceptions for the linking of close-source software.
Conclusion
Open source and commercial software can benefit each other, even if their license terms sometimes seem contradictory. By following the license requirements, and keeping with the spirit that caused the author to open source their software in the first place, the open source projects can benefit from bug fixes and enhancements from commercial users of their software.
Closed source commercial software can benefit by using stable versions of open source libraries reducing development times and potentially delivering a richer experience.
Both open source and commercial users benefit from a dual licensing scheme where it is appropriate, with the larger user base providing a useful support and learning network, as well as a pattern of many active open source users progressing to paid services in the future.
The small print: I’m not a lawyer so please take this article as me sharing my experience as an open source and commercial software developer rather than legal advice about licenses and copyright law.
