本节书摘来自华章计算机《linux嵌入式实时应用开发实战(原书第3版)》一书中的第1章,第1.5节,作者:(美)doug abbott 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
多数软件终端用户协议都明确限制了你只可以使用协议范围内的功能。典型的限制条件是不允许复制或重新发布。你通常会被警告不要试图对软件进行“逆向工程”。
相反,开源协议是只要你愿意,就允许使用、修改和复制授权的软件。和权利相伴的是义务。如果你修改并发布了一个开源协议内的软件,你就必须将修改后的源代码也纳入该框架。你的修改就成为“派生的工作”,也在该协议的范围内。这就允许其他使用者更好地理解软件,并按他们的意愿做出更多的修改。
开源协议也叫“公共版权”协议,使用版权的目的是表达这样一个观点:使用版权法来作为一种便利而不是限制获取软件知识产权的途径。尽管版权通常用于一个作者限制其他人复制、修改和发布一个产品,公共版权则明确允许在同样的协议框架下修改和再发布该产品。因此“公共版权”允许你从他人的工作中获益,但是你的任何改动均需要在同样的框架下发布。
毫无疑问,最知名的、应用最广泛的开源协议是gnu通用公共协议(gpl),它最初由fsf在1989年发布。linux内核是在gpl框架内的,但是有一个问题使gpl不能在一些商业场合使用。使用或参考其他在gpl架构下发布的软件而生成的软件,即使只是链接到一个库,也被认为是派生产品,也必须受限于gpl架构而以源代码的形式提供。
为了解决这一问题,推动开源库的发展,fsf推出了gpl库(lgpl)。区别是链接到lgpl框架库的程序不被认为是派生工作,尽管你仍然必须使代码能被库所用,但不要求你发布代码。
后来,lgpl就因其提供给用户的自由度更小而被称为“更小的gpl”。所以当lgpl让使用开源软件开发有所有权的产品成为可能时,fsf就鼓励开发者将他们的库置于gpl的框架内,以达到最大限度的开源。
与之完全相反的是伯克利软件发布授权(bsd),它比gpl早了约12年。它建议但不要求对源代码的改动必须反馈给开发者社区,并且允许使用其他协议生成产品,包括个人协议。
也有不少其他协议介于这两者之间。比如在1998年开发的mozilla公共协议(mpl),当时netscape公司将他们的浏览器开源了,它包含比bsd协议更多的关于派生产品的要求,但是比gpl或lgpl少。开源促进会(open source initiative)是一个非盈利性的组织,负责认证满足开源定义的协议,2011年12月,在它的网站上列出了78个通过认证的协议。
多数在gpl的框架下发布的软件,包括linux内核,都适用于协议的第2版,它在1991年发布,正好和linux的发布在同一年。fsf在2007年6月发布了gpl的第3版。发布第3版的目的之一是解决“tivo化(tivoization)”的问题,这是由fsf的创始人richard stallman发明的一个术语。结果表明tivo只能运行有授权数字签名的代码。所以,即使tivo使其源代码纳入gpl框架,修改的代码将仍然不能运行。
stallman认为这违背了gpl的精神。其他的开发者包括linus torvalds则将数字签名视为一个有用的安全工具而不想将其完全禁止。争论还在继续。但是在任何情况下,内核本身不可能很快过渡到第3版。
法律问题
开源的法律意义产生了相当多的fud,尤其是sco的关于linux内核受unix代码破坏的言论。sco组织,正式名称是santa cruz公司,在1996年从novell获得unix系统v源代码的版权,不过现在还有一些关于sco到底从novell购买到什么的争论。无论如何,sco声称ibm公司引入了部分sco版权的unix代码到linux内核中,因此要求linux使用者支付协议费用。
sco的案子最终败诉了,该公司曾于2007年根据《破产法》第11章申请破产,但是突然间通过开源协议问题之争又赢得了很多钱。结果是嵌入式开发者都需要意识到开源和专有软件的协议问题。嵌入式软件,包括衍生的或从其他来源获得的元素,通常与操作系统密切相关。没人期望嵌入式工程师成为知识产权代理人,但无论如何有必要明白你所使用的和生成的软件的授权框架以保证一切运行顺利。
问题要从两方面看待。现在仍然有人努力去识别对gpl的侵权,目的不是挣钱,而是通过给侵权者施压让他们停止行动来维护gpl的完整性。特别地,gpl反侵权项目曝光了十几个嵌入式linux供应商,他们一直快速开发但又不遵守gpl规则。据harald welte,gpl反侵权项目的发起者说,常见的非法设备都是网络设备,像路由器、机顶盒和车载导航系统等。
开源协议专家bruce perens说,嵌入式开发者似乎都有这样一个想法:“这是嵌入式的,没有人能改变源代码,所以无需应用gpl”。他们的确是这样做的。
现在我们有一些关于嵌入式实时空间及linux怎样应用其中的想法,第2章将会描述怎样在一个工作站上安装linux。