总结
软件不是静态的,在开发过程中会不断演变,因此协议不应基于软件生命周期结束前所有开发都将完成的假设。开发者通常使用模板和库,软件包含由第三方拥有和开发的组件,依赖项对于软件功能实现至关重要。要求提供整个开发环境或排除特定许可证(如GPL)往往不切实际,且可能损害谈判信誉。
关键事实包括:
- 软件开发依赖第三方组件和工具,这些工具通常在开源许可证下提供(如70-90%的系统代码)。
- 软件许可证种类繁多,但合同关注点应聚焦于代码选择、维护和许可条款的遵守,而非区分OSI批准的许可证。
- GPL等copyleft许可证被广泛使用,商业公司可谨慎遵守其要求。
- 试图规定开发方式或排除GPL软件可能忽略技术现实,导致协议模糊和延误。
核心观点:
- 谈判应基于事实而非假设,确认双方对开发流程和依赖项的理解一致。
- 风险分配是关键问题,而非许可证类型或开发方式的规定。
- 避免不切实际的合同要求,与实际执行工作的技术团队保持一致。