什么是开源

引言:最近参加了 Gitee《开源指北》编写计划,领了第一章第一节 —— 什么是开源,挺有压力的,希望路过的各位同行评审一下,尽量保证内容正确,兼顾通俗易懂。谢谢啦!


开源的概念

“开源”一词对应英文 Open Source,最初起源于软件开发领域,因此也称为“开放源代码”,对应的软件则称为开源软件(Open Source Software)。

那是不是公开源代码的软件就是开源软件呢/p>

实际上并不是。按照 OSI 组织(Open Source Initiative Association)的 OSD 定义,除了公开源代码,开源软件的发行条款还必须符合以下条件:

序号 条款 简单说明
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 年,比尔·盖茨就曾发表《致计算机爱好者的公开信》,明确提出了软件版权(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

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 和 GitHub

前面提到,开源软件是允许自由复制和重新分发的,那么分散的开发者之间是如何协作的呢其是 Linux 这样依靠全世界热心的志愿者参与的项目。其实早年(1991-2002 年间)世界各地的志愿者是通过 diff 的方式把源代码补丁发给 Linus,然后由 Linus 本人通过手工方式合并代码。直到 2002 年,Linux 项目组才开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

但好景不长,2005 年,开发 BitKeeper 的商业公司结束了与 Linux 内核开源社区的合作。于是 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)决定开发自己的版本控制系统 —— Git。很快,Linux 内核的源码已经由 Git 全面管理了。Git 是完全分布式的,同时拥有强大的存储能力,支持离线操作和非线性分支管理,容易制作工作流程,使其非常适合于管理大型开源项目。

2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub。可以说,GitHub 的出现让开源的工作方式变得更简单和有趣了。如今,每天都有无数来自世界各地的开发者在 GitHub 上进行交流,Github 已经成为一个包含问题追踪和版本控制的特殊社交网络。

不会写代码也可以了解开源吗

从自由软件运动和开源文化的发展来看,我们会发现其实它是一场社会运动,是一种生产方式的革新。开源运动旨在利用开源软件的价值和分散的生产模型,为其社区和行业的问题寻找新的解决方式。之所以首先出现在软件领域,是因为软件作为一个新兴领域,所受阻力相对较小,同时软件可以依托网络进行异步协作和分发,大大减少了时间和空间的差异以及获取成本。因此可以肯定,开源不仅仅适用于软件领域。

时至今日,开源已经成为一种超越软件生产界限的运动和工作方式。“源”的含义也从“源代码”扩展到各类“资源”,首当其冲的就是最贴近软件的硬件领域。随着 Arduino 和树莓派的流行,如今我们对“开源硬件”一词已经不陌生了。

另外,还有许多与软件源代码具有相同传播属性的各类设计文档,比如书籍、博客、食谱、配方、照片、音频和视频制品等资料。非营利性组织 Creative Commons 的 CC 许可协议就是专门应用于此类著作权法的保护。

所以,开源与我们息息相关,即便不写代码也可以了解开源(强烈建议)。

开源、Git 和代码托管平台

Git 是一款分布式版本控制系统,Git 本身也是一个用 Git 管理的开源软件。使用 Git 可以让散布各地的开发者更加高效地协同工作,可以说,Git 的出现极大地推动了开源的发展。

初学者容易混淆 Git 和代码托管平台的概念。Git 是版本控制系统,开发者可以将源代码存入名为“Git 仓库”的资料库中加以使用。而代码托管平台,比如 GitHub、GitLab、bitbucket、Gitee 等,则是基于 Git 的代码托管平台,通过网络为用户提供 Git 仓库托管服务。在此基础之上,代码托管平台还提供了许多协作功能,将版本管理、Bug 跟踪、代码审查、邮件列表、IRC 等众多功能组合在一起,以实现更高效的协同开发。

总的来说,Git 和代码托管平台有关联,但又有许多不同的地方。关于 Git 和代码托管平台的操作,将在后续章节展开描述。

参考资料

  • The Open Source Definition
  • Open Source Summit Trip Report by Guido van Rossum
  • Why Open Source misses the point of Free Software by Richard Stallman
  • 《大教堂与集市》Eric S·Raymond,卫剑钒(译)
  • 《若为自由故》Sam Williams,邓楠 / 李凡希(译)
  • 《只是为了好玩》Linus Torvalds / David Diamond
  • 《黑客与画家》Paul Graham,阮一峰(译)
  • 《Git 权威指南》蒋鑫
  • 《GitHub 入门与实践》大塚弘记,支鹏浩 / 刘斌(译)

文章知识点与官方知识档案匹配,可进一步学习相关知识Git技能树首页概览2895 人正在系统学习中

来源:阿基米东

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月3日
下一篇 2020年10月3日

相关推荐