美国政治传播学家拉斯韦尔提出了5W传播模式,经过后人的不断运用和发展总结,形成了一套逐渐成熟的“5W1H”体系,即:对选定的项目、工序或操作,都要从原因(何因Why)、对象(何事What)、地点(何地Where)、时间(何时When)、人员(何人Who)、方法(何法How)等六个方面提出问题进行思考。

本系列文章就以5W1H体系来讲一讲开源的那些事。这一次,讲讲开源的Who/When/Where——谁在何时何地“发明”了开源?

微软的一封信

自上世纪第一台计算机问世以来,计算机产业是以硬件为主的商业模式,即硬件销售为主要收入来源,附带的软件并不收费且附有源代码,便于专业人员调试和修改。虽然现在都将软件著作权视为司空见惯,但当时的法律并不能给予这一新生事物充足的保护。后来,随着个人电脑的普及,人们对软件的需求扩大,出现了一批专门开发通用软件的公司,这样的软件公司需要对软件收费来获取利润。但软件收费与提供源代码显然是矛盾的,因为只要仍然提供源代码,就无法阻止用户或者竞争对手复制或改写软件代码。

1976年2月3日,
Bill Gates发表了著名的《Open Letter to Hobbyists》(致电脑业余爱好者的一封公开信),在这封公开信中,Bill

Gates明确提出软件应该具有“CopyRight”(版权)。这封公开信奠定了软件产品“CopyRight”的理论基础,也促使私有软件成为软件产业发展的主流。“Copy
Right”理念的提出,必然导致源代码被彻底被封闭起来。

客观地讲,Bill Gates的“Copy
Right”理念以及私有软件的兴起,对于推动软件产业的兴旺功不可没。但是,Microsoft等私有软件厂商对于软件市场的垄断,引发了用户和广大软件开发者的强烈不满,兴起了反对私有软件理念的运动,开源软件就是这种运动的重要组成部分。首先兴起的私有软件运动,是自由软件运动(Free
Software Movement),它是开源软件运动的先河。

自由软件运动

一些人对于软件从免费转向收费并且不再提供源代码这一现象感到不适应或不满,其中最著名的就是发起了自由软件运动的Richard

Stallman。70年代的Richard在MIT的AI(人工智能)实验室做程序员。施乐的打印机不再提供源代码,Richard无法像以前通过修改代码来解决打印机故障;Richard向商业公司提供了LISP编译器的公共代码,但该公司拒绝分享扩充和改进后的代码。这两件事促使Richard辞职,投入到自由软件运动中。

1983年,Richard
开始倡导自由软件运动。1985年,Stallman等人创建了自由软件基金会(Free Software
Foundation,简称FSF)。Stallman提出了与“Copy Right”理念针锋相对的“Copy
Left”(许可复制权)理念,其表现形式是GPL,即公共许可证(General Pubic
License)。自由软件应该是具有如下4大自由的软件:

  • 出于任何目的运行该软件的自由;
  • 有研究该软件如何运行并加以改进使之更符合自己需要的自由;
  • 有重新发布以帮助邻里的自由;
  • 有改善程序,公布改进方案(以及通常的修订版)以推动整个社区利益的自由。

时间来到1991年,自由软件基金会已经开发了GNU操作系统的大部分组件(例如编译器、编辑器、用户界面等),但是仍然未完成作为操作系统核心的内核,即GNU Hurd。

完成操作系统内核的任务是在一个21岁的芬兰大学生Linus

Torvalds的带领下完成的。出于个人兴趣和测试目的,Linus于1991年9月编写了0.01版的Linux内核,而该版内核甚至还无法运行。不过1个月后他就写出了0.02版,该版本已可以运行各种GNU组件了(所以Linux也常被称为GNU

Linux)。在0.02版后,来自世界各地的程序员们加入到了Linux内核的开发中,使其迅速完善。在1992年2月释放0.12版时,Linus将Linux内核的许可证改为GPL许可证第二版,并一直保持至今。1994年3月,1.00版Linux内核开发完成。

正是 Linux 的出现,使得自由软件运动有了自己可以与 Microsoft 的 Windows
相抗衡的操作系统。自由软件运动初战告捷。但是,自由软件运动关于自由的追求,毕竟和现实的商业氛围格格不入,带有着过于理想化的色彩。这种反商业的信条,让一些本来也反对私有软件的人士对自由软件敬而远之。正是在这种背景下,一部分原有自由软件运动人士,开始尝试将理想的自由软件与现实的商业氛围进行某种衔接。

开源软件

1998
年2月,Richard Stallman、Eric Raymond等人在美国加州成立了一个名为开源促进会(Open Source
Initiative,简称 OSI)的组织,旨在推广开源软件。为了减少意识形态上的沟壑,以及「自由(Free)」一词造成免费软件的误解。OSI
组织决定从「自由软件」中去掉了「自由」一词,使用「开源软件」(Open Source
Software)作为共通名称,并创建了自己的开放源码的定义,以及自己的一套许可证。根据开源促进会的标准,开源软件可以使用非著佐权(copyleft)性质的宽松(permissive)许可证,允许该许可证下的代码的衍生代码闭源。

用一句话概括,开源软件就是源代码开放且可以自由复制的软件。开源软件运动的理念更倾向于解决实际问题,既抓住了私有软件的痛点,又实现了与商业的融合。

5W1H聊开源之Who/When/Where——谁在何时何地“发明”了开源?的更多相关文章

  1. 说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架

    说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架 解答: 1)与spring同类型的开源框架:JUIDE.EJB3.0.pi ...

  2. [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了

    有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...

  3. 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github

    一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...

  4. Asynchttpclient开源框架下载图片和文本,于Volley和Glide开源框架的区别。

    AsyncHttpClient是一款比较流行的Android异步网路加载库,在github上的网址是:https://github.com/loopj/android-async-httpAsyncH ...

  5. 转:Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「网络请求哪家强」

    转载自https://zhuanlan.zhihu.com/p/21879931 1. 原则 本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软 ...

  6. 【新晋开源项目】内网穿透神器[中微子代理] 加入 Dromara 开源社区

    1.关于作者 dromara开源组织成员,dromara/neutrino-proxy项目作者 名称:傲世孤尘.雨韵诗泽 名言: 扎根土壤,心向太阳.积蓄能量,绽放微光. 拘浊酒邀明月,借赤日暖苍穹. ...

  7. 用 5W1H 告诉你如何规划合理的测试策略

    ​​摘要:测试策略描述了测试工程的总体方法和目标.描述目前在进行哪一阶段的测试以及每个阶段内在进行的测试种类(功能测试.性能测试.覆盖测试等)以及测试人力安排等. 本文分享自华为云社区<浅谈敏捷 ...

  8. 吉特仓储管系统(开源WMS)--分享两月如何做到10W+的项目

    在此文开篇之处先特别申明,此文在有些人的眼中会有广告的嫌疑,但是本人不想将其作为一个广告宣传的文章,在此提到软件内容部分请大家予以谅解和包含,作为时间不算短的程序员给大家分享一些自己开发吉特仓储管理软 ...

  9. 59.Android开源项目及库 (转)

    转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...

  10. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

随机推荐

  1. npm模块全局安装后无法使用解决方案

    好家伙 npm模块全局安装后无法使用   估计是少配了环境变量 1.使用命令: npm config get prefix 找到全局包的安装位置   2.随后我们右键"我的电脑"打 ...

  2. 【Azure 应用服务】Azure App Service能否使用Storage Account File Share

    问题描述 Azure App Service能否使用Storage Account File Share? 问题回答 如果部署的App Service为Linux环境,可以直接使用Mount stor ...

  3. 李宏毅2022机器学习HW4 Speaker Identification上(Dataset &Self-Attention)

    Homework4 Dataset介绍及处理 Dataset introduction 训练数据集metadata.json包括speakers和n_mels,前者表示每个speaker所包含的多条语 ...

  4. [Linux] ubuntu系统使用zfs记录

    关于zfs 之前从B站视频里面了解到了btrfs这个文件系统,说是能够实现cow,然后我第一时间觉得这是个极好的特性,结果后来才发现,使用的时候并不多,而且只能通过cp --reflink的方式使用, ...

  5. Spring Cloud跟Dubbo区别?

    Spring Cloud是一个微服务框架,提供了微服务中很多功能组件,Dubbo一开始时RPC调用框架,核心是解决服务调用间的问题, Spring Cloud是一个大而全的框架,Dubbo更侧重于服务 ...

  6. 十五: InnoDB的存储结构

    InnoDB的存储结构 1.数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引|信息以及数据记录都是保存在文件上的,确切说是存储在页结构中.另一方面,索引是在存储引擎中实现的,MySQ ...

  7. linux控制显示器的亮度

    我使用的manjaro yay -S redshift -b 白天:晚上 要应用的屏幕亮度(在 0.1 和 1.0 之间) -c 文件 从指定的配置文件加载设置 -g R:G:B 要应用的其他伽马校正 ...

  8. 记Okhttp的拦截器导致app崩溃问题

    原文: 记Okhttp的拦截器导致app崩溃问题 - Stars-One的杂货小窝 app对接的后台接口,传参需要加密,获取数据需要解密,于是使用了拦截器去实现,然后发现以下问题: 即使在发起请求的那 ...

  9. 3、Azure Devops之Azure Repos篇

    1.什么是Azure Repos Azure Repos,就是我们常说的代码仓库,相当于gitee,github,git,svn工具.主要是提供给开发人员使用的,管理.查看代码的部件.通过Files. ...

  10. 低代码平台前端的设计与实现(二)构建引擎BuildEngine切面处理设计

    上一篇文章,我们介绍了如何设计并实现一个轻量级的根据JSON的渲染引擎,通过快速配置一份规范的JSON文本内容,就可以利用该JSON生成一个基础的UI界面.本文我们将回到低开的核心-页面拖拉拽,探讨关 ...