GPL 2.0 vs GPL 3.0: Complete Comparison
The GNU General Public License (GPL) is one of the most important copyleft open source licenses. The release of GPL 3.0 marked a significant advancement in open source licensing.
Version Timeline
- GPL 1.0: Released in 1989
- GPL 2.0: Released in 1991
- GPL 3.0: Released in 2007 (after 3 years of public discussion)
Major Changes Overview
1. Patent Protection Clauses
GPL 2.0:
- No explicit patent protection clauses
- Relied on implied patent licensing
GPL 3.0:
- Explicit patent protection clauses
- Patent retaliation provisions
- Protection against patent trolling
2. Anti-Tivoization Clauses
GPL 2.0:
- Only required source code provision
- Allowed hardware locking of modifications
GPL 3.0:
- Requires "Installation Information"
- Users must be able to run modified versions on the device
- Prevents TiVo-ization phenomenon
3. Compatibility Improvements
GPL 2.0:
- Strict compatibility requirements
- Difficult to combine with other licenses
GPL 3.0:
- More flexible compatibility mechanisms
- Allows "additional terms"
- Compatible with Apache 2.0 and other licenses
Detailed Change Analysis
Patent Protection
GPL 3.0 Section 11 introduces patent protection:
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license...
This addresses the patent protection gap in GPL 2.0.
DRM and Anti-Tivoization
GPL 3.0 Section 6 requires:
A "User Product" is either... a consumer product designed or sold for personal, family, or household use
For User Products, "Installation Information" must be provided.
Internationalization Improvements
- Better international legal adaptation
- Clear termination and restoration clauses
- Improved definitions and terminology
Real-World Impact
Adoption Status
Notable Projects Still Using GPL 2.0:
- Linux Kernel
- Git
- MySQL
Projects That Migrated to GPL 3.0:
- GCC
- Bash
- GRUB
Compatibility Considerations
Combination Scenario | GPL 2.0 | GPL 3.0 |
---|---|---|
With Apache 2.0 | ❌ Incompatible | ✅ One-way Compatible |
With BSD | ✅ Compatible | ✅ Compatible |
With Proprietary | ❌ Incompatible | ❌ Incompatible |
Migration Guide
Migrating from GPL 2.0 to GPL 3.0
-
Assess Project Needs
- Do you need stronger patent protection?
- Do you care about hardware locking issues?
- Are dependencies compatible?
-
Check Dependency Compatibility
- Ensure all dependencies are GPL 3.0 compatible
- Pay special attention to "GPL 2.0 only" components
-
Update License Files
- Replace license text
- Update file headers
- Update documentation
Migration Example
GPL 2.0 File Header:
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GPL 3.0 File Header:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Selection Recommendations
Choose GPL 2.0 When
- Need compatibility with GPL 2.0 only projects
- Project has long history with high migration costs
- Don't care about patent and hardware locking issues
Choose GPL 3.0 When
- Starting new projects
- Need stronger patent protection
- Care about anti-tivoization issues
- Want compatibility with more licenses
Conclusion
GPL 3.0 represents significant progress over GPL 2.0, addressing many issues in modern software development. While migration requires careful compatibility consideration, GPL 3.0 is usually the better choice for new projects.
Consider balancing:
- Technical needs vs compatibility requirements
- Legal protection vs project flexibility
- Long-term development vs short-term convenience