我曾经认为,GPL是世界上最好的开源协议——直到我开始做商业项目。
众所周知,GPL以其“传染性”而在开源界流传,而其衍生协议AGPL更是令人“畏惧”。AGPL对Web Service这类网络服务提供软件也视为“分发”,因而要求其开源,而GPL则无此要求。很明显,Web Service大多数都是商业用途,商业公司当然不吃这套,因此用了很多方法规避了GPL/AGPL的传染性,却也把问题复杂化了。相比之下,其他协议没有强制开源,只要你遵守协议地使用,代码是可以闭源的。我不清楚GPL协议的软件/组件是不是交了保护费就可以闭源使用,但是GPL/AGPL显示了它根深蒂固的资本主义观念——个人的权力。开源代码理应是全世界共同享有使用权,但却因为著作权的限制而把事情变得复杂化。我能理解一些作者不愿意把自己的代码贡献给商业公司使用,但是既然开源,你的思想也会被借用,有能力的商业公司完全可以照着你的思路重构代码,这时候只有著作权能够保护你的设计。所以,开源本质上就应该是无偿贡献代码,集中力量办大事。一些开源厨总是声讨商业公司的种种不是,自己却又暗地里白嫖代码,真是可笑。
我个人现在比较中意的协议有:MIT和Apache License。Apache License是早期Java程序用得最多的协议,如果你使用了带有该协议的组件,只需要附上Apache License并声明修改部分就可以免费使用,但是要列出你修改代码,对商业应用友好;MIT协议则更加宽松,只需要带有该协议即可使用。当然,还是有一些细节的,使用前务必对比后再选择。开源协议目前在中国还是君子协议,难以上升到法律规范,因为目前中国只保护享有著作权的作品。我是不建议大家在这方面太过于纠结,毕竟开源的本意是让大家一起完善,而不是为了防止商业公司偷你代码用。大家还是尽量选没那么多破事的协议,于大家于个人都有好处。
没有任何事情是完美的,乌邦托也是不存在的,劝那些沉浸在“Free source code”世界的人清醒过来,不要反过来被束缚了。