美国政治传播学家拉斯韦尔提出了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. 双哈希_Birthday_Cake

    Birthday Cake 思路:找到每个串的公共前后缀,统计公共前后缀之间的字符串的hash值,并判断所给n个串中是否存在符合条件的串 eg:abbddab 对于该串,我们不难发现,公共前后缀是ab ...

  2. XXL-Job框架入门介绍

    框架概述 框架主页: https://www.xuxueli.com/xxl-job/ 包含组件: 1.调度中心 2.任务执行器 特点: 1.调度中心,任务执行器独立部署,互不影响. 2.调度中心和任 ...

  3. 硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了创建晶振封装(DIP),将原理图的 ...

  4. java+文件读写实现的图书管理系统

    一功能 管理员具有的功能 1.增加图书.删除图书.修改图书信息.查询图书.图书列表 2.借阅者管理,通过借阅的书号查询图书信息 3.个人信息修改 读者功能 1.图书借阅 2.图书归还 3.图书查询 4 ...

  5. 【LeetCode动态规划#16】矩阵的最小路径和、三角形的最小路径和

    矩阵的最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:一个机器人每次只能向下或者向右移动一步. 示例 1 ...

  6. 【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls

    问题描述 参考Github上 Event Hub的示例代码(Using Apache Flink with Event Hubs for Apache Kafka Ecosystems : https ...

  7. MapStruct的一些常规用法

    每天坚持写一篇原创文章. 使用过MapStruct之后,再也没用过BeanCopy来复制对象了.确实是非常好用的工具库. MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处 ...

  8. 16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(递归、思维、dp)

    C. Min Max Sort 很不错的一道题目,不过脑电波和出题人每对上,\(qwq.\) 正难则反. 我们考虑最后一步是怎么操作的. 最后一步一定是对\(1\)和\(n\)进行操作 那么上一步呢? ...

  9. python tkinter - pickle 持久化

    查看当前python版本命令 cmd - python 现在当前版本是 3.8.8 tkinter - tool kits interface

  10. 日常办公——Word中重复标题的设置

    在Word中,遇到表格分页时,可以设置重复标题,如下图所示: