diff --git "a/\347\254\254\344\270\200\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\344\273\200\344\271\210\346\230\257\345\274\200\346\272\220.md" "b/\347\254\254\344\270\200\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\344\273\200\344\271\210\346\230\257\345\274\200\346\272\220.md" index 5daa2f76804298ee665ec7b25f1d98b846c47c66..18dc12368cb5dfc4c5fd53c5dc5528daec68c13a 100644 --- "a/\347\254\254\344\270\200\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\344\273\200\344\271\210\346\230\257\345\274\200\346\272\220.md" +++ "b/\347\254\254\344\270\200\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\344\273\200\344\271\210\346\230\257\345\274\200\346\272\220.md" @@ -1,5 +1,76 @@ > 本篇内容将会从最基本的概念开始带开发者们认识开源 ### 开源的概念 + +“开源”一词对应英文 Open Source,最初起源于软件开发领域,因此也称为“开放源代码”,对应的软件则称为**开源软件**(Open Source Software)。 + +那是不是公开源代码的软件就是开源软件呢? + +实际上并不是。按照 [OSI 组织](https://opensource.org/associations)(Open Source Initiative Association)的 [OSD 定义](https://opensource.org/docs/definition.php),除了公开源代码,开源软件的发行条款还必须符合以下条件: + +| 序号 | 条款 | 简单说明 | +| ---- | -------------------------------------------- | -------------------------------- | +| 1 | Free Redistribution | 允许自由地再发布软件 | +| 2 | Source Code | 程序必须包含所有源代码 | +| 3 | Derived Works | 可以修改和派生新的软件 | +| 4 | Integrity of The Author's Source Code | 发布时保持软件源代码的完整性 | +| 5 | No Discrimination Against Persons or Groups | 不得歧视任何个人或团体 | +| 6 | No Discrimination Against Fields of Endeavor | 不得歧视任何应用领域(例如商业) | +| 7 | Distribution of License | 许可证的发布具有延续性 | +| 8 | License Must Not Be Specific to a Product | 许可证不能针对于某一个产品 | +| 9 | License Must Not Restrict Other Software | 许可证不能限制其他软件 | +| 10 | License Must Be Technology-Neutral | 许可证必须是技术中立的 | + +看起来有点复杂,你现在只需要记住,开源软件就是在开放源代码许可证下发布的软件。 + +开源软件不仅仅意味着公开源代码,还需要遵循开源许可证,允许任何人使用、拷贝、修改以及重新发布。 + + ### 开源的历史 + +#### UNIX + +提及开源的历史,不得不从 Unix 说起。 + +在 1965 年前后,贝尔实验室(Bell)、麻省理工学院(MIT)及通用电气公司(GE)曾共同发起了 Multics 项目,旨在开发一个全面的、通用的分时操作系统,实现让大型主机可以同时提供 300 台以上的终端机连接使用的目标。然而,到了 1969 年,由于项目进度落后、资金短缺,在认为 Multics 项目不可能成功之后,贝尔实验室退出了该项目的研究工作。虽然 Multics 项目没有取得成功,但是培养出了很多优秀的人才,其中就包括肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)。 + +回到贝尔实验室后,以肯•汤普森为首的研究人员吸取了 Multics 项目失败的经验教训,将 Multics 庞大而复杂的系统进行简化,实现了一种分时操作系统的雏形,并将其取名为 UNIX。此后十年,UNIX 在学术机构和大型企业中得到了广泛的应用,当时的 UNIX 拥有者 AT&T 公司以低廉甚至免费的许可将 UNIX 源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进。 + +由于早期 AT&T 为避免美国司法部起诉它违反《反垄断法》而签订了和解协议,同意不进入计算机行业,不销售任何与计算机有关的产品。因此从 UNIX 诞生起的前十五年, 学术机构和黑客们自由地共享源码,以分散的方式共同合作开发 UNIX 系统。为后来的自由和开源软件的意识形态和社区诞生过程中起到了奠基性的作用。 + +转折发生在 1984 年,由于对 AT&T 的限制法令被解除,AT&T 开始以能获利的价格销售 UNIX。UNIX 的源码依然可用,但 AT&T 将 UNIX 从研究性质的项目转变为一个商业项目,这在 UNIX 黑客社区里产生了危机,他们开始寻找一个可替代的类 UNIX 系统。 + + + +#### GNU + +实际上,在 UNIX 变成一个商业项目之前,由于硬件价格的不断下跌,制造商已经开始期望软件能够带来额外的收入。于是,开始出现种种保护软件、对其收费的措施,越来越多的厂商开始单独销售软件,也不再提供软件的源代码,软件工业开始独立出来了。1976 年,比尔·盖茨就曾发表《[致计算机爱好者的公开信](https://en.wikisource.org/wiki/Open_Letter_to_Hobbyists)》,明确提出了软件版权(CopyRight)的理念。 + +1983 年,由于私有软件的增长和对不再能自由使用计算机程序的担忧,MIT 的理查德•斯托曼(Richard Stallman)开始倡导自由软件运动,并发起了 GNU 计划。GNU 是“GNU is NOT UNIX”的无穷递归缩写,其目标是构建一整套完全由自由软件构成的 UNIX OS 体系。GNU 起初进展很顺利,开发出 GLibc、GCC、GDB 等一系列操作系统必备软件。 + +随着 RMS 推动自由软件发展和成熟的愿景日益强烈,理查德·斯托曼意识到仅通过编写和分享 GNU 代码是远远不够的。于是,在 1985 年创建了自由软件基金会(Free Software Foundation,简称 FSF),其主要工作是运行 GNU 计划,开发更多的自由软件。同时,FSF 还创建了保护 GNU 和其他自由软件项目的法律和制度框架,提出了与 CopyRight 理念针锋相对的 CopyLeft(许可复制权)理念,其表现形式为 GPL,即公共许可证(General Pubic License)。 + + + +#### Linux + +GNU组件可以运行于Linux内核之上。整个内核是基于GPL许可的,但是Linux内核并不是GNU计划的一部分。 + +1991年,林纳斯·托瓦兹(Linus Torvalds)公开发布了一个类 UNIX 操作系统内核 —— Linux,并接受 CopyLeft 理念。从 Linux 0.12 版本起,Linux 内核开始采用 GPL 许可证的新版权声明。虽然 Linux 内核并不是 GNU 计划的一部分,但由于 HURD 内核进展缓慢,使得 Linux 得到广泛关注并得以快速发展。GNU 与 Linux 的发展,可以说是相辅相成,因此 Linux 也被称为 GNU/Linux。 + +正是 Linux 的出现,使得自由软件运动有了自己可以与 Microsoft 的 Windows 相抗衡的操作系统。自由软件运动初战告捷。但是,自由软件运动关于自由的追求,毕竟和现实的商业氛围格格不入,带有着过于理想化的色彩。这种反商业的信条,让一些本来也反对私有软件的人士对自由软件敬而远之。正是在这种背景下,一部分原有自由软件运动人士,开始尝试将理想的自由软件与现实的商业氛围进行某种衔接。 + + + +#### 自由和开源软件 + +1998年,埃里克·雷蒙德(Eric Raymond)等人成立了一个名为开源促进会(Open Source Initiative,简称 OSI)的组织。为了减少意识形态上的沟壑,以及“自由(Free)”一词造成免费软件的误解。OSI 组织决定从“自由和开源软件”中去掉了“自由”一词,使用“Open Source Software”(开源软件)作为共通名称,并创建了自己的开放源码的定义,以及自己的一套许可证。 + +正因如此,自由软件运动和开源软件运动有着密不可分的关系,两者的根本差别在于它们看待世界的方法。开源软件运动的理念更倾向于解决实际问题,既抓住了私有软件的痛点,又实现了与商业的融合。 + + + ### 不会写代码也可以了解开源吗 -### 开源、Git和代码托管平台 \ No newline at end of file + + +### 开源、Git和代码托管平台 +