2.4 开源理念
“开源”即开放源代码,具有开源特性的软件(包括操作系统),其源代码对所有人开放,任何人均可以修改、使用、再发行这些软件。下面让我们来简单地了解一下开源。
相信大家都听说过GNU基金会基于Linus Torvalds开发的Linux内核创立的GNU/Linux(也称Linux)操作系统,它的许多发行版本例如Debian、Ubuntu、Red Hat等均为基于开源内核的再创作,广为程序员与技术人员所知。本书中提到的许多软件,如Virtual Box虚拟机等,也是开源软件。
开源软件并非如其字面意义一般只是简单地放出软件的源代码。开源软件需要配备开源许可证,不同的开源软件通常会因不同的开源目的选择不同的许可证,例如Linux内核使用的是GPL许可证,而Android系统使用的是Apache许可证。不同的许可证决定了大家可以如何使用这份代码,例如GPL许可证规定了任何使用了GPL源码的程序也必须用GPL许可证开源。常见的开源许可证有GPL、MIT、Apache、MS-PL等。开源软件在国外通常也被称为自由软件(Free Software),自由软件的一个关键特征就是它的许可证,不使用开源许可证发布的源代码在美国法律中依然被认定为专有(作者享有完整知识产权)软件,例如微软发布的Reference Source。国内在开源软件领域尚处于法律盲区,也造成了一些大型厂商无所顾忌,出现了不遵守开源协议的现象。
开源代表着自由、高效率和共享。作为程序员、开发人员的读者,可以使用源代码进行二次开发并再发布,也可以对原始开源项目进行拓展,将更改提交回原始代码仓库,使开源软件的特性更多、功能更强大、更易使用,同时提升普通用户的使用体验。这些对开源软件做出贡献的开发者也称为开源者,他们和其他为开源软件做出贡献的人员(例如进行本地化或参与测试的人员)组成了开源社区。近些年随着互联网的高速发展,开源在国内也越来越受欢迎,各类开源社区大量涌现,许多城市都有了当地的LUG(Linux User Group/Linux, Linux用户社组),还有一些类似AOSC(安同开源社区)这样专精于开发自己的开源软件/系统的社区。开源与开发者、使用者是相得益彰的,而它所体现出的自由、共享与探索精神,则与黑客精神在本质是相通的。
我们会在第4章讲到对开源CMS(Content Management System)的审计技巧,CMS即内容管理系统,随着Web 2.0时代的发展,越来越多的企业、个人在使用CMS建设网站。由于几乎所有CMS都开源,所以很多的CMS漏洞挖掘实际上是基于代码审计,也就是白盒漏洞挖掘。在阅读代码审计章节前,请先锻炼一下自己的代码阅读能力。